fix strncat and wcsncat (double null termination)
authorRich Felker <dalias@aerifal.cx>
Mon, 23 May 2011 01:58:43 +0000 (21:58 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 23 May 2011 01:58:43 +0000 (21:58 -0400)
also modify wcsncpy to use the same loop logic

src/string/strncat.c
src/string/wcsncat.c
src/string/wcsncpy.c

index 255b7a7..08685ad 100644 (file)
@@ -4,7 +4,7 @@ char *strncat(char *d, const char *s, size_t n)
 {
        char *a = d;
        d += strlen(d);
-       while (n && (*d++ = *s++)) n--;
+       while (n && *s) n--, *d++ = *s++;
        *d++ = 0;
        return a;
 }
index b07abe4..9d61bbb 100644 (file)
@@ -4,7 +4,7 @@ wchar_t *wcsncat(wchar_t *d, const wchar_t *s, size_t n)
 {
        wchar_t *a = d;
        d += wcslen(d);
-       while (n && (*d++ = *s++)) n--;
+       while (n && *s) n--, *d++ = *s++;
        *d++ = 0;
        return a;
 }
index 9f68a00..714eeb6 100644 (file)
@@ -3,7 +3,7 @@
 wchar_t *wcsncpy(wchar_t *d, const wchar_t *s, size_t n)
 {
        wchar_t *a = d;
-       for (; n && (*d = *s); n--, d++, s++);
+       while (n && *s) n--, *d++ = *s++;
        wmemset(d, 0, n);
        return a;
 }