From ee154f16bd09a43359967f7e7b86c3677c09461d Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Wed, 30 Mar 2005 08:30:22 +0200 Subject: rename part 1 -- files --- base/util_strlcat.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 base/util_strlcat.c (limited to 'base/util_strlcat.c') diff --git a/base/util_strlcat.c b/base/util_strlcat.c new file mode 100644 index 00000000..c659b73a --- /dev/null +++ b/base/util_strlcat.c @@ -0,0 +1,35 @@ +/* Appends src to string dst of size siz (unlike strncat, siz is the + * full size of dst, not space left). At most siz-1 characters + * will be copied. Always NUL terminates (unless siz == 0). + * Returns strlen(src); if retval >= siz, truncation occurred. + */ + +#include + +int strlcat(char *dst, const char *src, int siz) +{ + register char *d = dst; + register const char *s = src; + register int n = siz; + int dlen; + + /* Find the end of dst and adjust bytes left but don't go past end */ + while (*d != '\0' && n-- != 0) + d++; + dlen = d - dst; + n = siz - dlen; + + if (n == 0) + return dlen + strlen(s); + while (*s != '\0') { + if (n != 1) { + *d++ = *s; + n--; + } + s++; + } + *d = '\0'; + + return dlen + (s - src); /* count does not include NUL */ +} + -- cgit v1.2.3