فهرست منبع

fix strncat and wcsncat (double null termination)

also modify wcsncpy to use the same loop logic
Rich Felker 14 سال پیش
والد
کامیت
86339bc4ba
3فایلهای تغییر یافته به همراه3 افزوده شده و 3 حذف شده
  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;
 }