version 1.1, 2011/07/24 18:15:14 |
version 1.6, 2020/06/15 20:49:57 |
|
|
#ifdef HAVE_STRLCPY |
/* $Id$ */ |
|
|
int dummy; |
|
|
|
#else |
|
|
|
/* $OpenBSD$ */ |
/* $OpenBSD$ */ |
|
|
/* |
/* |
* Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> |
* Copyright (c) 1998, 2015 Todd C. Miller <millert@openbsd.org> |
* |
* |
* Permission to use, copy, modify, and distribute this software for any |
* Permission to use, copy, modify, and distribute this software for any |
* purpose with or without fee is hereby granted, provided that the above |
* purpose with or without fee is hereby granted, provided that the above |
|
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
*/ |
*/ |
|
#include "config.h" |
|
|
#include <sys/types.h> |
#include <sys/types.h> |
#include <string.h> |
#include <string.h> |
|
|
/* |
/* |
* Copy src to string dst of size siz. At most siz-1 characters |
* Copy string src to buffer dst of size dsize. At most dsize-1 |
* will be copied. Always NUL terminates (unless siz == 0). |
* chars will be copied. Always NUL terminates (unless dsize == 0). |
* Returns strlen(src); if retval >= siz, truncation occurred. |
* Returns strlen(src); if retval >= dsize, truncation occurred. |
*/ |
*/ |
size_t |
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 *osrc = src; |
const char *s = src; |
size_t nleft = dsize; |
size_t n = siz; |
|
|
|
/* Copy as many bytes as will fit */ |
/* Copy as many bytes as will fit. */ |
if (n != 0) { |
if (nleft != 0) { |
while (--n != 0) { |
while (--nleft != 0) { |
if ((*d++ = *s++) == '\0') |
if ((*dst++ = *src++) == '\0') |
break; |
break; |
} |
} |
} |
} |
|
|
/* Not enough room in dst, add NUL and traverse rest of src */ |
/* Not enough room in dst, add NUL and traverse rest of src. */ |
if (n == 0) { |
if (nleft == 0) { |
if (siz != 0) |
if (dsize != 0) |
*d = '\0'; /* NUL-terminate dst */ |
*dst = '\0'; /* NUL-terminate dst */ |
while (*s++) |
while (*src++) |
; |
; |
} |
} |
|
|
return(s - src - 1); /* count does not include NUL */ |
return(src - osrc - 1); /* count does not include NUL */ |
} |
} |
|
|
#endif |
|