diff options
Diffstat (limited to 'lib/libc/stdio/setvbuf.c')
-rw-r--r-- | lib/libc/stdio/setvbuf.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/libc/stdio/setvbuf.c b/lib/libc/stdio/setvbuf.c index 867f9b4..c6c037d 100644 --- a/lib/libc/stdio/setvbuf.c +++ b/lib/libc/stdio/setvbuf.c @@ -41,11 +41,16 @@ static char sccsid[] = "@(#)setvbuf.c 8.2 (Berkeley) 11/16/93"; #include <stdio.h> #include <stdlib.h> #include "local.h" +#ifdef _THREAD_SAFE +#include <pthread.h> +#include "pthread_private.h" +#endif /* * Set one of the three kinds of buffering, optionally including * a buffer. */ +int setvbuf(fp, buf, mode, size) register FILE *fp; char *buf; @@ -65,6 +70,9 @@ setvbuf(fp, buf, mode, size) if ((mode != _IOFBF && mode != _IOLBF) || (int)size < 0) return (EOF); +#ifdef _THREAD_SAFE + _thread_flockfile(fp,__FILE__,__LINE__); +#endif /* * Write current buffer, if any. Discard unread input (including * ungetc data), cancel line buffering, and free old buffer if @@ -116,6 +124,9 @@ nbf: fp->_w = 0; fp->_bf._base = fp->_p = fp->_nbuf; fp->_bf._size = 1; +#ifdef _THREAD_SAFE + _thread_funlockfile(fp); +#endif return (ret); } flags |= __SMBF; @@ -156,5 +167,8 @@ nbf: } __cleanup = _cleanup; +#ifdef _THREAD_SAFE + _thread_funlockfile(fp); +#endif return (ret); } |