Changeset View
Changeset View
Standalone View
Standalone View
sys/libkern/strlcat.c
Show All 40 Lines | |||||
/* | /* | ||||
* Appends src to string dst of size siz (unlike strncat, siz is the | * 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 | * full size of dst, not space left). At most siz-1 characters | ||||
* will be copied. Always NUL terminates (unless siz <= strlen(dst)). | * will be copied. Always NUL terminates (unless siz <= strlen(dst)). | ||||
* Returns strlen(src) + MIN(siz, strlen(initial dst)). | * Returns strlen(src) + MIN(siz, strlen(initial dst)). | ||||
* If retval >= siz, truncation occurred. | * If retval >= siz, truncation occurred. | ||||
*/ | */ | ||||
size_t | size_t | ||||
strlcat(char *dst, const char *src, size_t siz) | strlcat(char * __restrict dst, const char * __restrict src, size_t siz) | ||||
{ | { | ||||
char *d = dst; | char *d = dst; | ||||
const char *s = src; | const char *s = src; | ||||
size_t n = siz; | size_t n; | ||||
size_t dlen; | size_t dlen; | ||||
/* Find the end of dst and adjust bytes left but don't go past end */ | /* Find the end of dst and adjust bytes left but don't go past end */ | ||||
while (n-- != 0 && *d != '\0') | for (n = siz; n != 0 && *d != '\0'; n--) | ||||
d++; | d++; | ||||
dlen = d - dst; | dlen = d - dst; | ||||
n = siz - dlen; | n = siz - dlen; | ||||
jrtc27: Old code was clearer | |||||
if (n == 0) | |||||
return(dlen + strlen(s)); | |||||
while (*s != '\0') { | while (*s != '\0') { | ||||
if (n != 1) { | if (n != 1) { | ||||
*d++ = *s; | *d++ = *s; | ||||
n--; | n--; | ||||
} | } | ||||
Done Inline Actionsstyle(9) violation jrtc27: style(9) violation | |||||
s++; | s++; | ||||
} | } | ||||
*d = '\0'; | *d = '\0'; | ||||
return(dlen + (s - src)); /* count does not include NUL */ | return (dlen + (s - src)); /* count does not include NUL */ | ||||
} | } |
Old code was clearer