strlcpy is:
size_t
strlcpy(char *dst, const char *src, size_t dsize)
{
const char *osrc = src;
size_t nleft = dsize;
/* Copy as many bytes as will fit. */
if (nleft != 0) {
while (--nleft != 0) {
if ((*dst++ = *src++) == '\0')
break;
}
}
/* Not enough room in dst, add NUL and traverse rest of src. */
if (nleft == 0) {
if (dsize != 0)
*dst = '\0'; /* NUL-terminate dst */
while (*src++)
;
}
return(src - osrc - 1); /* count does not include NUL */
}
why isn't it like this (this version is faster too):
size_t
strlcpy2(char *dst, const char *src, size_t dsize)
{
const char *osrc = src;
if (dsize != 0) {
/* Copy as many bytes as will fit. */
while (--dsize != 0)
if ((*dst++ = *src++) == '\0')
return(src - osrc - 1);
*dst = '\0';
}
/* Not enough room in dst, traverse rest of src. */
while (*src++)
;
return(src - osrc - 1); /* count does not include NUL */
}
-Luke
No comments:
Post a Comment