Fix strncpy() and strncat().
diff --git a/klibc/strncat.c b/klibc/strncat.c
index 264ba31..0dd9deb 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 f171e08..06964f3 100644
--- a/klibc/strncpy.c
+++ b/klibc/strncpy.c
@@ -10,7 +10,8 @@
const char *p = src;
char ch;
- while ( n-- ) {
+ while (n) {
+ n--;
*q++ = ch = *p++;
if ( !ch )
break;