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); | 
