Browse Source

fix scanf %c conversion wrongly storing a terminating null byte

this seems to have been a regression from the refactoring which added
the 'm' modifier.
Rich Felker 11 years ago
parent
commit
ef5507867b
2 changed files with 8 additions and 4 deletions
  1. 4 2
      src/stdio/vfscanf.c
  2. 4 2
      src/stdio/vfwscanf.c

+ 4 - 2
src/stdio/vfscanf.c

@@ -265,8 +265,10 @@ int vfscanf(FILE *restrict f, const char *restrict fmt, va_list ap)
 				if (size == SIZE_l) *(wchar_t **)dest = wcs;
 				else *(char **)dest = s;
 			}
-			if (wcs) wcs[i] = 0;
-			if (s) s[i] = 0;
+			if (t != 'c') {
+				if (wcs) wcs[i] = 0;
+				if (s) s[i] = 0;
+			}
 			break;
 		case 'p':
 		case 'X':

+ 4 - 2
src/stdio/vfwscanf.c

@@ -281,8 +281,10 @@ int vfwscanf(FILE *restrict f, const wchar_t *restrict fmt, va_list ap)
 				if (size == SIZE_l) *(wchar_t **)dest = wcs;
 				else *(char **)dest = s;
 			}
-			if (wcs) wcs[i] = 0;
-			if (s) s[i] = 0;
+			if (t != 'c') {
+				if (wcs) wcs[i] = 0;
+				if (s) s[i] = 0;
+			}
 			break;
 
 		case 'd': case 'i': case 'o': case 'u': case 'x':