* Copy src to string dst of size siz. At most siz-1 characters * will be copied. Always NUL terminates (unless siz == 0). * Returns strlen(src); if retval >= siz, truncation occurred. */
| 200 | * Returns strlen(src); if retval >= siz, truncation occurred. |
| 201 | */ |
| 202 | size_t |
| 203 | strlcpy(char *dst, const char *src, size_t siz) |
| 204 | { |
| 205 | register char *d = dst; |
| 206 | register const char *s = src; |
| 207 | register size_t n = siz; |
| 208 | |
| 209 | /* Copy as many bytes as will fit */ |
| 210 | if (n != 0 && --n != 0) { |
| 211 | do { |
| 212 | if ((*d++ = *s++) == 0) |
| 213 | break; |
| 214 | } while (--n != 0); |
| 215 | } |
| 216 | |
| 217 | /* Not enough room in dst, add NUL and traverse rest of src */ |
| 218 | if (n == 0) { |
| 219 | if (siz != 0) |
| 220 | *d = '\0'; /* NUL-terminate dst */ |
| 221 | while (*s++) |
| 222 | ; |
| 223 | } |
| 224 | |
| 225 | return(s - src - 1); /* count does not include NUL */ |
| 226 | } |
| 227 | #endif |
| 228 | |
| 229 | #ifdef NEED_STRCASESTR |
no outgoing calls
no test coverage detected