aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2004-09-27 22:49:02 +0000
committerH. Peter Anvin <hpa@zytor.com>2004-09-27 22:49:02 +0000
commit628ef1a5c7fb6ccd5cbcbd783ecc84a15241197a (patch)
treeee5fcb013edf79a2c97893371d187de9814a105e
parent52ae5dfd4153deae98b3e96e59d8913567285593 (diff)
downloadklibc-628ef1a5c7fb6ccd5cbcbd783ecc84a15241197a.tar.gz
Fix strncpy() and strncat().klibc-0.181
-rw-r--r--klibc/strncat.c11
-rw-r--r--klibc/strncpy.c3
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;