summaryrefslogtreecommitdiff
path: root/src/stdio/vfscanf.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/stdio/vfscanf.c')
-rw-r--r--src/stdio/vfscanf.c26
1 files changed, 8 insertions, 18 deletions
diff --git a/src/stdio/vfscanf.c b/src/stdio/vfscanf.c
index 62bf47f6..d8f9ae6b 100644
--- a/src/stdio/vfscanf.c
+++ b/src/stdio/vfscanf.c
@@ -169,32 +169,22 @@ int vfscanf(FILE *restrict f, const char *restrict fmt, va_list ap)
t = *p;
- switch (t) {
- case 'C':
- if (width < 1) width = 1;
- case 'S':
+ /* C or S */
+ if ((t&0x2f) == 3) {
t |= 32;
size = SIZE_l;
- break;
+ }
+
+ switch (t) {
case 'c':
if (width < 1) width = 1;
- case 'd': case 'i': case 'o': case 'u': case 'x':
- case 'a': case 'e': case 'f': case 'g':
- case 'A': case 'E': case 'F': case 'G': case 'X':
- case '[': case 's':
- case 'p': case 'n':
+ case '[':
break;
- default:
- goto fmt_fail;
- }
-
- if (t == 'n') {
+ case 'n':
store_int(dest, size, pos);
/* do not increment match count, etc! */
continue;
- }
-
- if (t != '[' && (t|32) != 'c') {
+ default:
shlim(f, 0);
while (isspace(shgetc(f)));
shunget(f);