diff options
author | Rich Felker <dalias@aerifal.cx> | 2013-06-04 16:22:02 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2013-06-04 16:22:02 -0400 |
commit | 1ab59de81e94e7802f85d314a709f8350a0e9b65 (patch) | |
tree | 7a0eda9ee4a6d85439416378c9a1462947a88145 /src/stdio | |
parent | f18846dd3a048598676e10b2a7b9f931bb3d1d6a (diff) | |
download | musl-1ab59de81e94e7802f85d314a709f8350a0e9b65.tar.gz |
simplify some logic in scanf and remove redundant invalid-format check
Diffstat (limited to 'src/stdio')
-rw-r--r-- | src/stdio/vfscanf.c | 26 |
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); |