diff options
author | sin <sin@2f30.org> | 2015-11-20 14:12:47 +0000 |
---|---|---|
committer | sin <sin@2f30.org> | 2015-11-20 14:12:47 +0000 |
commit | ebaa637b0b30d7fa70fdd4ca61f8b1149e60e819 (patch) | |
tree | 71d2574cdba394d6a6896935568b99e460150fc4 /strlcpy.c | |
parent | 9b47bfd9aa26c0dbc3ed63dd1960918359cf09b0 (diff) | |
download | noice-ebaa637b0b30d7fa70fdd4ca61f8b1149e60e819.tar.gz |
Sync strlcpy/strlcat from OpenBSD
Diffstat (limited to 'strlcpy.c')
-rw-r--r-- | strlcpy.c | 39 |
1 files changed, 21 insertions, 18 deletions
@@ -1,5 +1,5 @@ /* - * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> + * Copyright (c) 1998, 2015 Todd C. Miller <Todd.Miller@courtesan.com> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -16,32 +16,35 @@ #include <sys/types.h> #include <string.h> + #include "util.h" /* - * 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. + * Copy string src to buffer dst of size dsize. At most dsize-1 + * chars will be copied. Always NUL terminates (unless dsize == 0). + * Returns strlen(src); if retval >= dsize, truncation occurred. */ size_t -strlcpy(char *dst, const char *src, size_t siz) +strlcpy(char *dst, const char *src, size_t dsize) { - char *d = dst; - const char *s = src; - size_t n = siz; - /* Copy as many bytes as will fit */ - if (n != 0) { - while (--n != 0) { - if ((*d++ = *s++) == '\0') + 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 (n == 0) { - if (siz != 0) - *d = '\0'; /* NUL-terminate dst */ - while (*s++) + + /* 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(s - src - 1); /* count does not include NUL */ + + return(src - osrc - 1); /* count does not include NUL */ } |