summaryrefslogtreecommitdiff
path: root/lib/libc/string/strlcat.c
blob: 751f16160542657d5d710940dc8846fb3293af04 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <string.h> // for size_t, strlen, memcpy, strlcat

size_t strlcat(char *restrict dst, const char *restrict src, size_t dstsize)
{
	size_t dlen = strlen(dst);
	size_t slen = strlen(src);
	size_t n = dstsize - dlen - 1;

	if (n == 0)
		return dlen + slen;

	if (n > slen)
		n = slen;

	memcpy(dst + dlen, src, n);
	dst[dlen + n] = '\0';

	return dlen + n;
}