improved _doscan(); fflush() doesn't call fseek() anymore
This commit is contained in:
parent
ad7e46a324
commit
d87444a7fb
2 changed files with 14 additions and 4 deletions
|
@ -266,7 +266,8 @@ _doscan(register FILE *stream, const char *format, va_list ap)
|
||||||
return done;
|
return done;
|
||||||
}
|
}
|
||||||
str = o_collect(ic, stream, kind, width, &base);
|
str = o_collect(ic, stream, kind, width, &base);
|
||||||
if (str < inp_buf) return done;
|
if (str < inp_buf
|
||||||
|
|| (str == inp_buf && *str == '-')) return done;
|
||||||
nrchars += str - inp_buf + 1;
|
nrchars += str - inp_buf + 1;
|
||||||
if (!(flags & FL_NOASSIGN)) {
|
if (!(flags & FL_NOASSIGN)) {
|
||||||
if (kind == 'd' || kind == 'i')
|
if (kind == 'd' || kind == 'i')
|
||||||
|
@ -415,7 +416,8 @@ _doscan(register FILE *stream, const char *format, va_list ap)
|
||||||
|
|
||||||
if (!width) return done;
|
if (!width) return done;
|
||||||
str = f_collect(ic, stream, width);
|
str = f_collect(ic, stream, width);
|
||||||
if (str < inp_buf) return done;
|
if (str < inp_buf
|
||||||
|
|| (str == inp_buf && *str == '-')) return done;
|
||||||
nrchars += str - inp_buf + 1;
|
nrchars += str - inp_buf + 1;
|
||||||
if (!(flags & FL_NOASSIGN)) {
|
if (!(flags & FL_NOASSIGN)) {
|
||||||
ld_val = strtod(inp_buf, &tmp_string);
|
ld_val = strtod(inp_buf, &tmp_string);
|
||||||
|
@ -433,5 +435,5 @@ _doscan(register FILE *stream, const char *format, va_list ap)
|
||||||
} /* end switch */
|
} /* end switch */
|
||||||
++format;
|
++format;
|
||||||
}
|
}
|
||||||
return conv ? done : EOF;
|
return conv || (ic != EOF) ? done : EOF;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,15 @@ fflush(FILE *stream)
|
||||||
&& !io_testflag(stream, _IOWRITING)))
|
&& !io_testflag(stream, _IOWRITING)))
|
||||||
return 0;
|
return 0;
|
||||||
if (io_testflag(stream, _IOREADING)) {
|
if (io_testflag(stream, _IOREADING)) {
|
||||||
(void) fseek(stream, 0L, SEEK_CUR);
|
/* (void) fseek(stream, 0L, SEEK_CUR); */
|
||||||
|
int adjust = 0;
|
||||||
|
if (stream->_buf && !io_testflag(stream,_IONBF))
|
||||||
|
adjust = stream->_count;
|
||||||
|
stream->_count = 0;
|
||||||
|
_lseek(fileno(stream), (off_t) adjust, SEEK_CUR);
|
||||||
|
if (io_testflag(stream, _IOWRITE))
|
||||||
|
stream->_flags &= ~(_IOREADING | _IOWRITING);
|
||||||
|
stream->_ptr = stream->_buf;
|
||||||
return 0;
|
return 0;
|
||||||
} else if (io_testflag(stream, _IONBF)) return 0;
|
} else if (io_testflag(stream, _IONBF)) return 0;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue