When a match() fails, we need to unget the character we
tried to match against, rather than leaving it consumed.
Also, we can't break out of a conversion before we reach
the end of a format string, because things like the '%n'
conversion do not consume anything, and should still be
handled.
do
c=ngetc(f);
while(isspace(c));
- if(c==EOF) return ncvt?ncvt:EOF;
nungetc(c, f);
break;
}
if(nn==0) return 0;
else goto Done;
}
- if(!match(c, pat))
- break;
+ if(!match(c, pat)){
+ nungetc(c, f);
+ return 0;
+ }
if(store)
*s++=c;
nn++;
}
- nungetc(c, f);
Done:
if(store) *s='\0';
return 1;
do
c=ngetc(f);
while(isspace(c));
- if(c==EOF) return ncvt?ncvt:EOF;
nungetc(c, f);
break;
}
if(nn==0) return 0;
else goto Done;
}
- if(!match(c, pat)) break;
+ if(!match(c, pat)){
+ nungetc(c, f);
+ return 0;
+ }
if(store) *s++=c;
nn++;
}
- nungetc(c, f);
Done:
if(store) *s='\0';
return 1;