|
|
|
@ -83,7 +83,7 @@ static int in_set(const wchar_t *set, int c) |
|
|
|
|
|
|
|
#undef ungetwc |
|
|
|
#define ungetwc(c,f) \ |
|
|
|
((f)->rend && (c)<128 ? *--(f)->rpos : ungetwc((c),(f))) |
|
|
|
((f)->rend && (c)<128U ? *--(f)->rpos : ungetwc((c),(f))) |
|
|
|
#endif |
|
|
|
|
|
|
|
int vfwscanf(FILE *f, const wchar_t *fmt, va_list ap) |
|
|
|
@ -215,19 +215,22 @@ int vfwscanf(FILE *f, const wchar_t *fmt, va_list ap) |
|
|
|
|
|
|
|
case 's': |
|
|
|
s = dest; |
|
|
|
while (!iswspace(c=getwc(f)) && c!=EOF) { |
|
|
|
while (width && !iswspace(c=getwc(f)) && c!=EOF) { |
|
|
|
int l = wctomb(s?s:tmp, c); |
|
|
|
if (l<0) goto input_fail; |
|
|
|
if (s) s+=l; |
|
|
|
pos++; |
|
|
|
width--; |
|
|
|
} |
|
|
|
if (width) ungetwc(c, f); |
|
|
|
if (s) *s = 0; |
|
|
|
break; |
|
|
|
|
|
|
|
case 'S': |
|
|
|
wcs = dest; |
|
|
|
while (!iswspace(c=getwc(f)) && c!=EOF) |
|
|
|
pos++, *wcs++ = c; |
|
|
|
while (width && !iswspace(c=getwc(f)) && c!=EOF) |
|
|
|
width--, pos++, *wcs++ = c; |
|
|
|
if (width) ungetwc(c, f); |
|
|
|
if (wcs) *wcs = 0; |
|
|
|
break; |
|
|
|
|
|
|
|
|