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 867f9b4951f6..c6c037d7e293 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);  } | 
