diff options
author | Ori Bernstein <ori@eigenstate.org> | 2020-05-15 16:46:20 -0700 |
---|---|---|
committer | Ori Bernstein <ori@eigenstate.org> | 2020-05-15 16:46:20 -0700 |
commit | 78aec6d5c67cab79e03cdbe4f1a1bd7a7aa15612 (patch) | |
tree | 555810535e5c50097cc4ed219b14819e09cc4207 /sys/src/libstdio | |
parent | ed4645979c0a6286d92c6bddaee7ea71727b0afb (diff) |
Fix scans of more than one character in %[]
This got broken in d8e877a89dae, where we returned 0 on the
first mismatch; we want to return 0 only when we consumed no
characters.
Diffstat (limited to 'sys/src/libstdio')
-rw-r--r-- | sys/src/libstdio/vfscanf.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/sys/src/libstdio/vfscanf.c b/sys/src/libstdio/vfscanf.c index d811b7803..be5c71284 100644 --- a/sys/src/libstdio/vfscanf.c +++ b/sys/src/libstdio/vfscanf.c @@ -339,6 +339,7 @@ static int icvt_sq(FILE *f, va_list *args, int store, int width, int type){ int c, nn; register char *s; register const char *pat; + pat=++fmtp; if(*fmtp=='^') fmtp++; if(*fmtp!='\0') fmtp++; @@ -354,12 +355,12 @@ static int icvt_sq(FILE *f, va_list *args, int store, int width, int type){ } if(!match(c, pat)){ nungetc(c, f); - return 0; + goto Done; } if(store) *s++=c; nn++; } Done: if(store) *s='\0'; - return 1; + return nn > 0; } |