size_t strlcat(char *s1, const char *s2, size_t n);
strlcat appends no more than n?strlen(dst)?1 characters pointed to by s2 into the array pointed to by s1 and always terminates the result with a null character if n is greater than zero. Both the strings s1 and s2 must be terminated with a null character on entry to strlcat and a byte for the terminating null should be included in n. The behavior of strlcat is undefined if copying takes place between objects that overlap.
strlcat returns the number of characters it tried to copy, which is the sum of the lengths of the strings s1 and s2 or n, whichever is smaller.
strlcat is commonly found in OpenBSD libraries.