diff options
author | Bartosz Brachaczek <b.brachaczek@gmail.com> | 2017-07-09 23:00:18 +0200 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2017-09-04 16:59:38 -0400 |
commit | 9255dad97e7bfd4165d1aa0f93f2aae321a7a4d8 (patch) | |
tree | c8bb838f61cc2a6141199893fe49c92103e3a81d /src/stdio/vfscanf.c | |
parent | 51bdcdc424bd7169c8cccdc2de7cad17f5ea0f70 (diff) | |
download | musl-9255dad97e7bfd4165d1aa0f93f2aae321a7a4d8.tar.gz musl-9255dad97e7bfd4165d1aa0f93f2aae321a7a4d8.tar.bz2 musl-9255dad97e7bfd4165d1aa0f93f2aae321a7a4d8.tar.xz musl-9255dad97e7bfd4165d1aa0f93f2aae321a7a4d8.zip |
handle whitespace before %% in scanf
this is mandated by C and POSIX standards and is in accordance with
glibc behavior.
Diffstat (limited to 'src/stdio/vfscanf.c')
-rw-r--r-- | src/stdio/vfscanf.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/stdio/vfscanf.c b/src/stdio/vfscanf.c index d4d2454b..9e030fc4 100644 --- a/src/stdio/vfscanf.c +++ b/src/stdio/vfscanf.c @@ -89,15 +89,19 @@ int vfscanf(FILE *restrict f, const char *restrict fmt, va_list ap) continue; } if (*p != '%' || p[1] == '%') { - p += *p=='%'; shlim(f, 0); - c = shgetc(f); + if (*p == '%') { + p++; + while (isspace((c=shgetc(f)))); + } else { + c = shgetc(f); + } if (c!=*p) { shunget(f); if (c<0) goto input_fail; goto match_fail; } - pos++; + pos += shcnt(f); continue; } |