9os

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit e22b6bcefd83056bc346d8bb75e98c4699a173cd
parent aa05a2bbe90ece29f332346380f61a96cb286913
Author: Dimitris Papastamos <dimitris.papastamos@arm.com>
Date:   Mon,  5 Nov 2018 17:17:01 +0000

Merge "[libc] Fix setvbuf()"
Diffstat:
Msrc/libc/stdio/setvbuf.c | 18+++++++-----------
1 file changed, 7 insertions(+), 11 deletions(-)

diff --git a/src/libc/stdio/setvbuf.c b/src/libc/stdio/setvbuf.c @@ -20,13 +20,6 @@ setvbuf(FILE * restrict fp, char * restrict buf, int mode, size_t size) break; case _IOLBF: case _IOFBF: - if (size == 0) { - if ((buf = malloc(BUFSIZ)) == NULL) { - errno = ENOMEM; - return EOF; - } - size = BUFSIZ; - } break; default: errno = EINVAL; @@ -34,13 +27,16 @@ setvbuf(FILE * restrict fp, char * restrict buf, int mode, size_t size) } flags = fp->flags; - if (flags & _IOALLOC) + if (buf && (flags & _IOALLOC)) { free(fp->buf); - flags &= ~(_IONBF | _IOLBF | _IOFBF | _IOALLOC | _IOALLOC); + fp->buf = buf; + fp->len = size; + flags &= ~_IOALLOC; + } + + flags &= ~(_IONBF | _IOLBF | _IOFBF); flags |= mode; fp->flags = flags; - fp->buf = buf; - fp->len = size; return 0; }