From 1ab59de81e94e7802f85d314a709f8350a0e9b65 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Tue, 4 Jun 2013 16:22:02 -0400 Subject: simplify some logic in scanf and remove redundant invalid-format check --- src/stdio/vfscanf.c | 26 ++++++++------------------ 1 file 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); -- cgit v1.2.1