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 255b7a721f8628250ddcd41d50db7256468f360e..08685ad6aadafdb503178057506fed584431bdd0 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 b07abe455b23c5fe1bf36e7a3dba1250edae88ad..9d61bbbd61cecfb5d69a623ded1f751d6a5d1d84 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 9f68a004d4940fd8b8b0dba1ce7165b4ebc7e8ac..714eeb641ae865216c77cd32249824f15377f07e 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;
 }