}
if (*p != '%' || p[1] == '%') {
p += *p=='%';
+ shlim(f, 0);
c = shgetc(f);
if (c!=*p) {
shunget(f);
scanset[0] = 0;
if (*p == '-') p++, scanset[1+'-'] = 1-invert;
- if (*p == ']') p++, scanset[1+']'] = 1-invert;
- for (; *p && *p != ']'; p++) {
- if (*p=='-' && p[1] != ']')
+ else if (*p == ']') p++, scanset[1+']'] = 1-invert;
+ for (; *p != ']'; p++) {
+ if (!*p) goto fmt_fail;
+ if (*p=='-' && p[1] && p[1] != ']')
for (c=p++[-1]; c<*p; c++)
scanset[1+c] = 1-invert;
scanset[1+*p] = 1-invert;
}
- if (!*p) goto fmt_fail;
if (size == SIZE_l) {
st = (mbstate_t){0};
case 'e': case 'E':
case 'f': case 'F':
case 'g': case 'G':
- y = __floatscan(f, -1, size, 0);
+ y = __floatscan(f, size, 0);
if (!shcnt(f)) goto match_fail;
if (dest) switch (size) {
case SIZE_def:
if (readwc(c, &wcs, &st) < 0)
goto input_fail;
}
+ shunget(f);
if (!mbsinit(&st)) goto input_fail;
if (dest) *wcs++ = 0;
break;