diff options
author | Roland McGrath <roland@gnu.org> | 1994-12-11 20:32:27 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 1994-12-11 20:32:27 +0000 |
commit | 7136779828fac8445c2ffaf1d81cab44a79feac6 (patch) | |
tree | da464ec1d7a2e133a26b51e2794535e98eeaefaa | |
parent | fd5b8c617837a50873fafd34125f9c35b1f35c2d (diff) |
(enlarge_buffer): Always add one char into NEED for the char we are writing
or the NUL terminator.
-rw-r--r-- | stdio/memstream.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/stdio/memstream.c b/stdio/memstream.c index fbb3538b48..704eca53b3 100644 --- a/stdio/memstream.c +++ b/stdio/memstream.c @@ -48,7 +48,11 @@ DEFUN(enlarge_buffer, (stream, c), up to the target address. */ need = stream->__target; else - need = *info->bufsize + (c == EOF ? 0 : 1); + need = *info->bufsize; + + /* We always need an extra character in the buffer. Either we are + writing C, or we are flushing and need to write a NUL terminator. */ + ++need; if (stream->__bufsize < need) { @@ -56,7 +60,7 @@ DEFUN(enlarge_buffer, (stream, c), char *newbuf; size_t newsize; if (stream->__bufsize * 2 < need) - newsize = need; + newsize = need; else newsize = stream->__bufsize * 2; newbuf = (char *) realloc ((PTR) stream->__buffer, newsize); @@ -73,9 +77,7 @@ DEFUN(enlarge_buffer, (stream, c), stream->__get_limit = stream->__bufp = stream->__buffer + *info->bufsize; stream->__put_limit = stream->__buffer + stream->__bufsize; - need -= stream->__bufp - stream->__buffer; - if (c != EOF) - --need; + need -= stream->__bufp - stream->__buffer + 1; if (need > 0) { /* We are extending the buffer after an fseek; zero-fill new space. */ |