diff options
author | Andrew Tridgell <tridge@samba.org> | 1998-11-15 01:04:16 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 1998-11-15 01:04:16 +0000 |
commit | 5a788adec19043d4d93c4fa2713f9f633bfd35ab (patch) | |
tree | f0ee9e7fb92a5bc745b7a87d7cd6e6d86365f2c3 /lib | |
parent | 50abd20bb3dc3d853de22cd5cf8198edfde5ae92 (diff) | |
download | rsync-5a788adec19043d4d93c4fa2713f9f633bfd35ab.tar.gz |
use native strlcat() and strlcpy() if available
Diffstat (limited to 'lib')
-rw-r--r-- | lib/compat.c | 45 |
1 files changed, 40 insertions, 5 deletions
diff --git a/lib/compat.c b/lib/compat.c index 922d1199..f4913489 100644 --- a/lib/compat.c +++ b/lib/compat.c @@ -36,7 +36,7 @@ #endif #ifndef HAVE_GETCWD -char *getcwd(char *buf, int size) + char *getcwd(char *buf, int size) { return getwd(buf); } @@ -44,7 +44,7 @@ char *getcwd(char *buf, int size) #ifndef HAVE_WAITPID -pid_t waitpid(pid_t pid, int *statptr, int options) + pid_t waitpid(pid_t pid, int *statptr, int options) { return wait4(pid, statptr, options, NULL); } @@ -52,7 +52,7 @@ pid_t waitpid(pid_t pid, int *statptr, int options) #ifndef HAVE_MEMMOVE -void *memmove(void *dest, const void *src, size_t n) + void *memmove(void *dest, const void *src, size_t n) { memcpy(dest, src, n); return dest; @@ -63,7 +63,7 @@ void *memmove(void *dest, const void *src, size_t n) /* Find the first ocurrence in S of any character in ACCEPT. derived from glibc */ -char *strpbrk(const char *s, const char *accept) + char *strpbrk(const char *s, const char *accept) { while (*s != '\0') { const char *a = accept; @@ -78,7 +78,7 @@ char *strpbrk(const char *s, const char *accept) #endif #ifdef REPLACE_INET_NTOA -char *rep_inet_ntoa(struct in_addr ip) + char *rep_inet_ntoa(struct in_addr ip) { unsigned char *p = (unsigned char *)&ip.s_addr; static char buf[18]; @@ -92,3 +92,38 @@ char *rep_inet_ntoa(struct in_addr ip) return buf; } #endif + +#ifndef HAVE_STRLCPY +/* like strncpy but does not 0 fill the buffer and always null + terminates. bufsize is the size of the destination buffer */ + size_t strlcpy(char *d, const char *s, size_t bufsize) +{ + size_t len = strlen(s); + size_t ret = len; + if (len >= bufsize) len = bufsize-1; + memcpy(d, s, len); + d[len] = 0; + return ret; +} +#endif + +#ifndef HAVE_STRLCAT +/* like strncat but does not 0 fill the buffer and always null + terminates. bufsize is the length of the buffer, which should + be one more than the maximum resulting string length */ + size_t strlcat(char *d, const char *s, size_t bufsize) +{ + size_t len1 = strlen(d); + size_t len2 = strlen(s); + size_t ret = len1 + len2; + + if (len1+len2 >= bufsize) { + len2 = bufsize - (len1+1); + } + if (len2 > 0) { + memcpy(d+len1, s, len2); + d[len1+len2] = 0; + } + return ret; +} +#endif |