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