From e71372faea4af670215b087a69c2b7432181a852 Mon Sep 17 00:00:00 2001 From: Thomas Fitzsimmons Date: Wed, 8 May 2002 00:12:49 +0000 Subject: * libc/include/sys/stdio.h: New file. * libc/sys/linux/sys/stdio.h: New file. * libc/include/stdio.h: Add declarations for flockfile, ftrylockfile, and funlockfile. Include . * libc/stdio/clearerr.c: Add file locking. * libc/stdio/fclose.c: Likewise. * libc/stdio/feof.c: Likewise. * libc/stdio/ferror.c: Likewise. * libc/stdio/fflush.c: Likewise. * libc/stdio/fgetc.c: Likewise. * libc/stdio/fgetpos.c: Likewise. * libc/stdio/fgets.c: Likewise. * libc/stdio/fileno.c: Likewise. * libc/stdio/fputc.c: Likewise. * libc/stdio/fputs.c: Likewise. * libc/stdio/fread.c: Likewise. * libc/stdio/freopen.c: Likewise. * libc/stdio/fseek.c: Likewise. * libc/stdio/ftell.c: Likewise. * libc/stdio/fwrite.c: Likewise. * libc/stdio/getc.c: Likewise. * libc/stdio/putc.c: Likewise. * libc/stdio/setvbuf.c: Likewise. * libc/stdio/ungetc.c: Likewise. * libc/stdio/vfprintf.c: Likewise. --- newlib/libc/stdio/setvbuf.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) (limited to 'newlib/libc/stdio/setvbuf.c') diff --git a/newlib/libc/stdio/setvbuf.c b/newlib/libc/stdio/setvbuf.c index 357ea5142..d44cdba5f 100644 --- a/newlib/libc/stdio/setvbuf.c +++ b/newlib/libc/stdio/setvbuf.c @@ -103,6 +103,9 @@ _DEFUN (setvbuf, (fp, buf, mode, size), register size_t size) { int ret = 0; + + _flockfile(fp); + CHECK_INIT (fp); /* @@ -111,7 +114,10 @@ _DEFUN (setvbuf, (fp, buf, mode, size), */ if ((mode != _IOFBF && mode != _IOLBF && mode != _IONBF) || (int)(_POINTER_INT) size < 0) - return (EOF); + { + _funlockfile(fp); + return (EOF); + } /* * Write current buffer, if any; drop read count, if any. @@ -145,15 +151,16 @@ _DEFUN (setvbuf, (fp, buf, mode, size), size = BUFSIZ; } if (buf == NULL) - { - /* Can't allocate it, let's try another approach */ + { + /* Can't allocate it, let's try another approach */ nbf: - fp->_flags |= __SNBF; - fp->_w = 0; - fp->_bf._base = fp->_p = fp->_nbuf; - fp->_bf._size = 1; - return (ret); - } + fp->_flags |= __SNBF; + fp->_w = 0; + fp->_bf._base = fp->_p = fp->_nbuf; + fp->_bf._size = 1; + _funlockfile(fp); + return (ret); + } fp->_flags |= __SMBF; } /* @@ -186,5 +193,6 @@ nbf: if (fp->_flags & __SWR) fp->_w = fp->_flags & (__SLBF | __SNBF) ? 0 : size; + _funlockfile(fp); return 0; } -- cgit v1.2.3