diff options
author | H. Peter Anvin <hpa@zytor.com> | 2004-09-27 22:49:02 +0000 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2004-09-27 22:49:02 +0000 |
commit | 628ef1a5c7fb6ccd5cbcbd783ecc84a15241197a (patch) | |
tree | ee5fcb013edf79a2c97893371d187de9814a105e | |
parent | 52ae5dfd4153deae98b3e96e59d8913567285593 (diff) | |
download | klibc-628ef1a5c7fb6ccd5cbcbd783ecc84a15241197a.tar.gz |
Fix strncpy() and strncat().klibc-0.181
-rw-r--r-- | klibc/strncat.c | 11 | ||||
-rw-r--r-- | klibc/strncpy.c | 3 |
2 files changed, 10 insertions, 4 deletions
diff --git a/klibc/strncat.c b/klibc/strncat.c index 264ba315a9f23..0dd9deb984f13 100644 --- a/klibc/strncat.c +++ b/klibc/strncat.c @@ -8,13 +8,18 @@ char *strncat(char *dst, const char *src, size_t n) { char *q = strchr(dst, '\0'); + const char *p = src; + char ch; size_t nn = q-dst; if ( __likely(nn <= n) ) - n = nn; + n -= nn; - memcpy(q, src, n); - q[n] = '\0'; + while (n--) { + *q++ = ch = *p++; + if ( !ch ) + break; + } return dst; } diff --git a/klibc/strncpy.c b/klibc/strncpy.c index f171e080873e3..06964f31d687c 100644 --- a/klibc/strncpy.c +++ b/klibc/strncpy.c @@ -10,7 +10,8 @@ char *strncpy(char *dst, const char *src, size_t n) const char *p = src; char ch; - while ( n-- ) { + while (n) { + n--; *q++ = ch = *p++; if ( !ch ) break; |