Browse Source

fix strncat and wcsncat (double null termination)

also modify wcsncpy to use the same loop logic
Rich Felker 14 years ago
parent
commit
86339bc4ba
3 changed files with 3 additions and 3 deletions
  1. 1 1
      src/string/strncat.c
  2. 1 1
      src/string/wcsncat.c
  3. 1 1
      src/string/wcsncpy.c

+ 1 - 1
src/string/strncat.c

@@ -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;
 }

+ 1 - 1
src/string/wcsncat.c

@@ -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;
 }

+ 1 - 1
src/string/wcsncpy.c

@@ -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;
 }