Add FILE locking stubs for libc.
Change the FILE locking to support kernel threads when linked with libpthread (which you haven't see yet). This requires that libc become thread-safe and thread-aware, testing __isthreaded before attempting to do lock/unlock calls. The impact on non-threaded programs is minor. This change works with libc_r, so it's the best compromise.
This commit is contained in:
parent
af3c7c8d85
commit
ec216c2634
|
@ -1,10 +1,11 @@
|
|||
# @(#)Makefile.inc 8.3 (Berkeley) 4/17/94
|
||||
# $Id: Makefile.inc,v 1.12 1998/02/13 02:13:23 imp Exp $
|
||||
# $Id: Makefile.inc,v 1.13 1998/03/12 12:05:14 bde Exp $
|
||||
|
||||
# stdio sources
|
||||
.PATH: ${.CURDIR}/../libc/stdio
|
||||
|
||||
SRCS+= asprintf.c clrerr.c fclose.c fdopen.c feof.c ferror.c fflush.c \
|
||||
SRCS+= _flock_stub.c \
|
||||
asprintf.c clrerr.c fclose.c fdopen.c feof.c ferror.c fflush.c \
|
||||
fgetc.c fgetln.c fgetpos.c fgets.c fileno.c findfp.c flags.c fopen.c \
|
||||
fprintf.c fpurge.c fputc.c fputs.c fread.c freopen.c fscanf.c \
|
||||
fseek.c fsetpos.c ftell.c funopen.c fvwrite.c fwalk.c fwrite.c \
|
||||
|
@ -12,9 +13,16 @@ SRCS+= asprintf.c clrerr.c fclose.c fdopen.c feof.c ferror.c fflush.c \
|
|||
printf.c putc.c putchar.c puts.c putw.c refill.c remove.c rewind.c \
|
||||
rget.c scanf.c setbuf.c setbuffer.c setvbuf.c snprintf.c sprintf.c \
|
||||
sscanf.c stdio.c tempnam.c tmpfile.c tmpnam.c ungetc.c vasprintf.c \
|
||||
vfprintf.c vfscanf.c vprintf.c vscanf.c vsnprintf.c vsprintf.c \
|
||||
vfscanf.c vprintf.c vscanf.c vsnprintf.c vsprintf.c \
|
||||
vsscanf.c wbuf.c wsetup.c
|
||||
|
||||
.if defined(NETBSD_SYSCALLS)
|
||||
# XXX Temporary until FreeBSD's vfprintf is ported
|
||||
SRCS+= netbsd_vfprintf.c
|
||||
.else
|
||||
SRCS+= vfprintf.c
|
||||
.endif
|
||||
|
||||
.if ${LIB} == "c"
|
||||
MAN3+= fclose.3 ferror.3 fflush.3 fgetln.3 fgets.3 fopen.3 fputs.3 \
|
||||
fread.3 fseek.3 funopen.3 getc.3 mktemp.3 printf.3 putc.3 remove.3 \
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
* Copyright (c) 1998 John Birrell <jb@cimlogic.com.au>.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by John Birrell.
|
||||
* 4. Neither the name of the author nor the names of any co-contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
/*
|
||||
* Declare weak references in case the application is not linked
|
||||
* with libpthread.
|
||||
*/
|
||||
#pragma weak _flockfile=_flockfile_stub
|
||||
#pragma weak _flockfile_debug=_flockfile_debug_stub
|
||||
#pragma weak _ftrylockfile=_ftrylockfile_stub
|
||||
#pragma weak _funlockfile=_funlockfile_stub
|
||||
|
||||
/*
|
||||
* This function is a stub for the _flockfile function in libpthread.
|
||||
*/
|
||||
void
|
||||
_flockfile_stub(FILE *fp)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* This function is a stub for the _flockfile_debug function in libpthread.
|
||||
*/
|
||||
void
|
||||
_flockfile_debug_stub(FILE *fp, char *fname, int lineno)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* This function is a stub for the _ftrylockfile function in libpthread.
|
||||
*/
|
||||
int
|
||||
_ftrylockfile_stub(FILE *fp)
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
|
||||
/*
|
||||
* This function is a stub for the _funlockfile function in libpthread.
|
||||
*/
|
||||
void
|
||||
_funlockfile_stub(FILE *fp)
|
||||
{
|
||||
}
|
|
@ -39,25 +39,18 @@
|
|||
static char sccsid[] = "@(#)clrerr.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: clrerr.c,v 1.5 1997/02/22 15:01:46 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#undef clearerr
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
void
|
||||
clearerr(fp)
|
||||
FILE *fp;
|
||||
{
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
__sclearerr(fp);
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
}
|
||||
|
|
|
@ -39,17 +39,14 @@
|
|||
static char sccsid[] = "@(#)fclose.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: fclose.c,v 1.5 1997/02/22 15:01:47 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "local.h"
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
int
|
||||
fclose(fp)
|
||||
|
@ -61,9 +58,7 @@ fclose(fp)
|
|||
errno = EBADF;
|
||||
return (EOF);
|
||||
}
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
r = fp->_flags & __SWR ? __sflush(fp) : 0;
|
||||
if (fp->_close != NULL && (*fp->_close)(fp->_cookie) < 0)
|
||||
r = EOF;
|
||||
|
@ -73,9 +68,7 @@ fclose(fp)
|
|||
FREEUB(fp);
|
||||
if (HASLB(fp))
|
||||
FREELB(fp);
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
fp->_flags = 0; /* Release this FILE for reuse. */
|
||||
fp->_file = -1;
|
||||
fp->_r = fp->_w = 0; /* Mess up if reaccessed. */
|
||||
|
|
|
@ -39,16 +39,13 @@
|
|||
static char sccsid[] = "@(#)fflush.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: fflush.c,v 1.5 1997/02/22 15:01:50 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include "local.h"
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
/* Flush a single file, or (if fp is NULL) all files. */
|
||||
int
|
||||
|
@ -59,18 +56,14 @@ fflush(fp)
|
|||
|
||||
if (fp == NULL)
|
||||
return (_fwalk(__sflush));
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
if ((fp->_flags & (__SWR | __SRW)) == 0) {
|
||||
errno = EBADF;
|
||||
retval = EOF;
|
||||
} else {
|
||||
retval = __sflush(fp);
|
||||
}
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (retval);
|
||||
}
|
||||
|
||||
|
|
|
@ -39,26 +39,19 @@
|
|||
static char sccsid[] = "@(#)fgetc.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: fgetc.c,v 1.5 1997/02/22 15:01:51 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
int
|
||||
fgetc(fp)
|
||||
FILE *fp;
|
||||
{
|
||||
int retval;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
retval = __sgetc(fp);
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (retval);
|
||||
}
|
||||
|
|
|
@ -39,14 +39,11 @@
|
|||
static char sccsid[] = "@(#)fgetpos.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: fgetpos.c,v 1.5 1997/02/22 15:01:53 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
int
|
||||
fgetpos(fp, pos)
|
||||
|
@ -54,12 +51,8 @@ fgetpos(fp, pos)
|
|||
fpos_t *pos;
|
||||
{
|
||||
int retval;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
retval = (*pos = ftell(fp)) == (fpos_t)-1;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return(retval);
|
||||
}
|
||||
|
|
|
@ -39,16 +39,13 @@
|
|||
static char sccsid[] = "@(#)fgets.c 8.2 (Berkeley) 12/22/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: fgets.c,v 1.7 1997/02/22 15:01:53 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "local.h"
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
/*
|
||||
* Read at most n-1 characters from the given file.
|
||||
|
@ -68,9 +65,7 @@ fgets(buf, n, fp)
|
|||
if (n <= 0) /* sanity check */
|
||||
return (NULL);
|
||||
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
s = buf;
|
||||
n--; /* leave space for NUL */
|
||||
while (n != 0) {
|
||||
|
@ -81,9 +76,7 @@ fgets(buf, n, fp)
|
|||
if (__srefill(fp)) {
|
||||
/* EOF/error: stop with partial or no line */
|
||||
if (s == buf) {
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (NULL);
|
||||
}
|
||||
break;
|
||||
|
@ -107,9 +100,7 @@ fgets(buf, n, fp)
|
|||
fp->_p = t;
|
||||
(void)memcpy((void *)s, (void *)p, len);
|
||||
s[len] = 0;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (buf);
|
||||
}
|
||||
fp->_r -= len;
|
||||
|
@ -119,8 +110,6 @@ fgets(buf, n, fp)
|
|||
n -= len;
|
||||
}
|
||||
*s = 0;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (buf);
|
||||
}
|
||||
|
|
|
@ -39,17 +39,14 @@
|
|||
static char sccsid[] = "@(#)fpurge.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: fpurge.c,v 1.5 1997/02/22 15:01:58 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "local.h"
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
/*
|
||||
* fpurge: like fflush, but without writing anything: leave the
|
||||
|
@ -60,9 +57,7 @@ fpurge(fp)
|
|||
register FILE *fp;
|
||||
{
|
||||
int retval;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
if (!fp->_flags) {
|
||||
errno = EBADF;
|
||||
retval = EOF;
|
||||
|
@ -74,8 +69,6 @@ fpurge(fp)
|
|||
fp->_w = fp->_flags & (__SLBF|__SNBF) ? 0 : fp->_bf._size;
|
||||
retval = 0;
|
||||
}
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (retval);
|
||||
}
|
||||
|
|
|
@ -39,14 +39,11 @@
|
|||
static char sccsid[] = "@(#)fputc.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: fputc.c,v 1.5 1997/02/22 15:02:00 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
int
|
||||
fputc(c, fp)
|
||||
|
@ -54,12 +51,8 @@ fputc(c, fp)
|
|||
register FILE *fp;
|
||||
{
|
||||
int retval;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
retval = putc(c, fp);
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (retval);
|
||||
}
|
||||
|
|
|
@ -39,16 +39,13 @@
|
|||
static char sccsid[] = "@(#)fputs.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: fputs.c,v 1.5 1997/02/22 15:02:02 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "fvwrite.h"
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
/*
|
||||
* Write the given string to the given file.
|
||||
|
@ -66,12 +63,8 @@ fputs(s, fp)
|
|||
iov.iov_len = uio.uio_resid = strlen(s);
|
||||
uio.uio_iov = &iov;
|
||||
uio.uio_iovcnt = 1;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
retval = __sfvwrite(fp, &uio);
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (retval);
|
||||
}
|
||||
|
|
|
@ -39,16 +39,13 @@
|
|||
static char sccsid[] = "@(#)fread.c 8.2 (Berkeley) 12/11/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: fread.c,v 1.5 1997/02/22 15:02:03 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "local.h"
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
size_t
|
||||
fread(buf, size, count, fp)
|
||||
|
@ -68,9 +65,7 @@ fread(buf, size, count, fp)
|
|||
*/
|
||||
if ((resid = count * size) == 0)
|
||||
return (0);
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
if (fp->_r < 0)
|
||||
fp->_r = 0;
|
||||
total = resid;
|
||||
|
@ -83,14 +78,13 @@ fread(buf, size, count, fp)
|
|||
resid -= r;
|
||||
if (__srefill(fp)) {
|
||||
/* no more input: return partial result */
|
||||
FUNLOCKFILE(fp);
|
||||
return ((total - resid) / size);
|
||||
}
|
||||
}
|
||||
(void)memcpy((void *)p, (void *)fp->_p, resid);
|
||||
fp->_r -= resid;
|
||||
fp->_p += resid;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (count);
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
static char sccsid[] = "@(#)fscanf.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: fscanf.c,v 1.5 1997/02/22 15:02:04 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
|
@ -48,10 +48,7 @@ static const char rcsid[] =
|
|||
#else
|
||||
#include <varargs.h>
|
||||
#endif
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
#if __STDC__
|
||||
int
|
||||
|
@ -72,13 +69,9 @@ fscanf(fp, fmt, va_alist)
|
|||
|
||||
va_start(ap);
|
||||
#endif
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
ret = __svfscanf(fp, fmt, ap);
|
||||
va_end(ap);
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (ret);
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
static char sccsid[] = "@(#)fseek.c 8.3 (Berkeley) 1/2/94";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: fseek.c,v 1.6 1997/02/22 15:02:05 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
|
@ -49,10 +49,7 @@ static const char rcsid[] =
|
|||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include "local.h"
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
#define POS_ERR (-(fpos_t)1)
|
||||
|
||||
|
@ -76,14 +73,13 @@ fseek(fp, offset, whence)
|
|||
if (!__sdidinit)
|
||||
__sinit();
|
||||
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
/*
|
||||
* Have to be able to seek.
|
||||
*/
|
||||
if ((seekfn = fp->_seek) == NULL) {
|
||||
errno = ESPIPE; /* historic practice */
|
||||
FUNLOCKFILE(fp);
|
||||
return (EOF);
|
||||
}
|
||||
|
||||
|
@ -104,9 +100,7 @@ fseek(fp, offset, whence)
|
|||
else {
|
||||
curoff = (*seekfn)(fp->_cookie, (fpos_t)0, SEEK_CUR);
|
||||
if (curoff == -1) {
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (EOF);
|
||||
}
|
||||
}
|
||||
|
@ -130,9 +124,7 @@ fseek(fp, offset, whence)
|
|||
|
||||
default:
|
||||
errno = EINVAL;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (EOF);
|
||||
}
|
||||
|
||||
|
@ -216,9 +208,7 @@ fseek(fp, offset, whence)
|
|||
if (HASUB(fp))
|
||||
FREEUB(fp);
|
||||
fp->_flags &= ~__SEOF;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
@ -245,9 +235,7 @@ fseek(fp, offset, whence)
|
|||
fp->_p += n;
|
||||
fp->_r -= n;
|
||||
}
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (0);
|
||||
|
||||
/*
|
||||
|
@ -257,9 +245,7 @@ fseek(fp, offset, whence)
|
|||
dumb:
|
||||
if (__sflush(fp) ||
|
||||
(*seekfn)(fp->_cookie, (fpos_t)offset, whence) == POS_ERR) {
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (EOF);
|
||||
}
|
||||
/* success: clear EOF indicator and discard ungetc() data */
|
||||
|
@ -269,8 +255,6 @@ dumb:
|
|||
fp->_r = 0;
|
||||
/* fp->_w = 0; */ /* unnecessary (I think...) */
|
||||
fp->_flags &= ~__SEOF;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (0);
|
||||
}
|
||||
|
|
|
@ -39,16 +39,13 @@
|
|||
static char sccsid[] = "@(#)ftell.c 8.2 (Berkeley) 5/4/95";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id: ftell.c,v 1.7 1997/02/22 15:02:07 peter Exp $";
|
||||
"$Id: ftell.c,v 1.8 1997/03/11 11:40:40 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
#include "local.h"
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
/*
|
||||
* ftell: return current offset.
|
||||
|
@ -64,9 +61,7 @@ ftell(fp)
|
|||
return (-1L);
|
||||
}
|
||||
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp, __FILE__, __LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
/*
|
||||
* Find offset of underlying I/O object, then
|
||||
* adjust for buffered bytes.
|
||||
|
@ -76,9 +71,7 @@ ftell(fp)
|
|||
else {
|
||||
pos = (*fp->_seek)(fp->_cookie, (fpos_t)0, SEEK_CUR);
|
||||
if (pos == -1) {
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (pos);
|
||||
}
|
||||
}
|
||||
|
@ -99,8 +92,6 @@ ftell(fp)
|
|||
*/
|
||||
pos += fp->_p - fp->_bf._base;
|
||||
}
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (pos);
|
||||
}
|
||||
|
|
|
@ -39,16 +39,13 @@
|
|||
static char sccsid[] = "@(#)fwrite.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: fwrite.c,v 1.5 1997/02/22 15:02:10 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#include "local.h"
|
||||
#include "fvwrite.h"
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
/*
|
||||
* Write `count' objects (each size `size') from memory to the given file.
|
||||
|
@ -69,9 +66,7 @@ fwrite(buf, size, count, fp)
|
|||
uio.uio_iov = &iov;
|
||||
uio.uio_iovcnt = 1;
|
||||
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
/*
|
||||
* The usual case is success (__sfvwrite returns 0);
|
||||
* skip the divide if this happens, since divides are
|
||||
|
@ -79,8 +74,6 @@ fwrite(buf, size, count, fp)
|
|||
*/
|
||||
if (__sfvwrite(fp, &uio) != 0)
|
||||
count = (n - uio.uio_resid) / size;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (count);
|
||||
}
|
||||
|
|
|
@ -39,14 +39,11 @@
|
|||
static char sccsid[] = "@(#)getc.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: getc.c,v 1.5 1997/02/22 15:02:11 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
/*
|
||||
* A subroutine version of the macro getc.
|
||||
|
@ -58,12 +55,8 @@ getc(fp)
|
|||
register FILE *fp;
|
||||
{
|
||||
int retval;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
retval = __sgetc(fp);
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (retval);
|
||||
}
|
||||
|
|
|
@ -39,17 +39,14 @@
|
|||
static char sccsid[] = "@(#)getchar.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: getchar.c,v 1.5 1997/02/22 15:02:12 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
/*
|
||||
* A subroutine version of the macro getchar.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
#undef getchar
|
||||
|
||||
|
@ -57,12 +54,8 @@ int
|
|||
getchar()
|
||||
{
|
||||
int retval;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(stdin,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(stdin);
|
||||
retval = getc(stdin);
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(stdin);
|
||||
#endif
|
||||
FUNLOCKFILE(stdin);
|
||||
return (retval);
|
||||
}
|
||||
|
|
|
@ -39,14 +39,11 @@
|
|||
static char sccsid[] = "@(#)putc.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: putc.c,v 1.5 1997/02/22 15:02:17 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
/*
|
||||
* A subroutine version of the macro putc.
|
||||
|
@ -59,12 +56,8 @@ putc(c, fp)
|
|||
register FILE *fp;
|
||||
{
|
||||
int retval;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
retval = __sputc(c, fp);
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (retval);
|
||||
}
|
||||
|
|
|
@ -39,14 +39,11 @@
|
|||
static char sccsid[] = "@(#)putchar.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: putchar.c,v 1.5 1997/02/22 15:02:19 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
#undef putchar
|
||||
|
||||
|
@ -60,12 +57,8 @@ putchar(c)
|
|||
int retval;
|
||||
register FILE *so = stdout;
|
||||
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(so,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(so);
|
||||
retval = __sputc(c, so);
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(so);
|
||||
#endif
|
||||
FUNLOCKFILE(so);
|
||||
return (retval);
|
||||
}
|
||||
|
|
|
@ -39,16 +39,13 @@
|
|||
static char sccsid[] = "@(#)puts.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: puts.c,v 1.5 1997/02/22 15:02:20 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "fvwrite.h"
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
/*
|
||||
* Write the given string to stdout, appending a newline.
|
||||
|
@ -69,12 +66,8 @@ puts(s)
|
|||
uio.uio_resid = c + 1;
|
||||
uio.uio_iov = &iov[0];
|
||||
uio.uio_iovcnt = 2;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(stdout,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(stdout);
|
||||
retval = __sfvwrite(stdout, &uio) ? EOF : '\n';
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(stdout);
|
||||
#endif
|
||||
FUNLOCKFILE(stdout);
|
||||
return (retval);
|
||||
}
|
||||
|
|
|
@ -39,15 +39,12 @@
|
|||
static char sccsid[] = "@(#)putw.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: putw.c,v 1.5 1997/02/22 15:02:21 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#include "fvwrite.h"
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
int
|
||||
putw(w, fp)
|
||||
|
@ -62,12 +59,8 @@ putw(w, fp)
|
|||
iov.iov_len = uio.uio_resid = sizeof(w);
|
||||
uio.uio_iov = &iov;
|
||||
uio.uio_iovcnt = 1;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
retval = __sfvwrite(fp, &uio);
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (retval);
|
||||
}
|
||||
|
|
|
@ -39,27 +39,20 @@
|
|||
static char sccsid[] = "@(#)rewind.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: rewind.c,v 1.5 1997/02/22 15:02:24 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
void
|
||||
rewind(fp)
|
||||
register FILE *fp;
|
||||
{
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
(void) fseek(fp, 0L, SEEK_SET);
|
||||
clearerr(fp);
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
errno = 0; /* not required, but seems reasonable */
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
static char sccsid[] = "@(#)scanf.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: scanf.c,v 1.5 1997/02/22 15:02:25 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
|
@ -48,10 +48,7 @@ static const char rcsid[] =
|
|||
#else
|
||||
#include <varargs.h>
|
||||
#endif
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
#if __STDC__
|
||||
int
|
||||
|
@ -71,13 +68,9 @@ scanf(fmt, va_alist)
|
|||
#else
|
||||
va_start(ap);
|
||||
#endif
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(stdin,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(stdin);
|
||||
ret = __svfscanf(stdin, fmt, ap);
|
||||
FUNLOCKFILE(stdin);
|
||||
va_end(ap);
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(stdin);
|
||||
#endif
|
||||
return (ret);
|
||||
}
|
||||
|
|
|
@ -39,16 +39,13 @@
|
|||
static char sccsid[] = "@(#)setvbuf.c 8.2 (Berkeley) 11/16/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: setvbuf.c,v 1.5 1997/02/22 15:02:27 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "local.h"
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
/*
|
||||
* Set one of the three kinds of buffering, optionally including
|
||||
|
@ -74,9 +71,7 @@ setvbuf(fp, buf, mode, size)
|
|||
if ((mode != _IOFBF && mode != _IOLBF) || (int)size < 0)
|
||||
return (EOF);
|
||||
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
/*
|
||||
* Write current buffer, if any. Discard unread input (including
|
||||
* ungetc data), cancel line buffering, and free old buffer if
|
||||
|
@ -128,9 +123,7 @@ nbf:
|
|||
fp->_w = 0;
|
||||
fp->_bf._base = fp->_p = fp->_nbuf;
|
||||
fp->_bf._size = 1;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (ret);
|
||||
}
|
||||
flags |= __SMBF;
|
||||
|
@ -171,8 +164,6 @@ nbf:
|
|||
}
|
||||
__cleanup = _cleanup;
|
||||
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (ret);
|
||||
}
|
||||
|
|
|
@ -39,17 +39,14 @@
|
|||
static char sccsid[] = "@(#)ungetc.c 8.2 (Berkeley) 11/3/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: ungetc.c,v 1.5 1997/02/22 15:02:38 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "local.h"
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
static int __submore __P((FILE *));
|
||||
|
||||
|
@ -101,25 +98,19 @@ ungetc(c, fp)
|
|||
return (EOF);
|
||||
if (!__sdidinit)
|
||||
__sinit();
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
if ((fp->_flags & __SRD) == 0) {
|
||||
/*
|
||||
* Not already reading: no good unless reading-and-writing.
|
||||
* Otherwise, flush any current write stuff.
|
||||
*/
|
||||
if ((fp->_flags & __SRW) == 0) {
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (EOF);
|
||||
}
|
||||
if (fp->_flags & __SWR) {
|
||||
if (__sflush(fp)) {
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (EOF);
|
||||
}
|
||||
fp->_flags &= ~__SWR;
|
||||
|
@ -136,16 +127,12 @@ ungetc(c, fp)
|
|||
*/
|
||||
if (HASUB(fp)) {
|
||||
if (fp->_r >= fp->_ub._size && __submore(fp)) {
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (EOF);
|
||||
}
|
||||
*--fp->_p = c;
|
||||
fp->_r++;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (c);
|
||||
}
|
||||
fp->_flags &= ~__SEOF;
|
||||
|
@ -159,9 +146,7 @@ ungetc(c, fp)
|
|||
fp->_p[-1] == c) {
|
||||
fp->_p--;
|
||||
fp->_r++;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (c);
|
||||
}
|
||||
|
||||
|
@ -176,8 +161,6 @@ ungetc(c, fp)
|
|||
fp->_ubuf[sizeof(fp->_ubuf) - 1] = c;
|
||||
fp->_p = &fp->_ubuf[sizeof(fp->_ubuf) - 1];
|
||||
fp->_r = 1;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (c);
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
static char sccsid[] = "@(#)vfprintf.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id: vfprintf.c,v 1.16 1997/12/25 00:32:17 ache Exp $";
|
||||
"$Id: vfprintf.c,v 1.17 1998/01/04 22:28:47 ache Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
/*
|
||||
|
@ -63,10 +63,7 @@ static const char rcsid[] =
|
|||
|
||||
#include "local.h"
|
||||
#include "fvwrite.h"
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
/* Define FLOATING_POINT to get floating point. */
|
||||
#define FLOATING_POINT
|
||||
|
@ -421,23 +418,17 @@ vfprintf(fp, fmt0, ap)
|
|||
}
|
||||
|
||||
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(fp,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(fp);
|
||||
/* sorry, fprintf(read_only_file, "") returns EOF, not 0 */
|
||||
if (cantwrite(fp)) {
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (EOF);
|
||||
}
|
||||
|
||||
/* optimise fprintf(stderr) (and other unbuffered Unix files) */
|
||||
if ((fp->_flags & (__SNBF|__SWR|__SRW)) == (__SNBF|__SWR) &&
|
||||
fp->_file >= 0) {
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
return (__sbprintf(fp, fmt0, ap));
|
||||
}
|
||||
|
||||
|
@ -873,9 +864,7 @@ done:
|
|||
error:
|
||||
if (__sferror(fp))
|
||||
ret = EOF;
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(fp);
|
||||
#endif
|
||||
FUNLOCKFILE(fp);
|
||||
if ((argtable != NULL) && (argtable != statargtable))
|
||||
free (argtable);
|
||||
return (ret);
|
||||
|
|
|
@ -39,14 +39,11 @@
|
|||
static char sccsid[] = "@(#)vscanf.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
"$Id: vscanf.c,v 1.5 1997/02/22 15:02:43 peter Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#ifdef _THREAD_SAFE
|
||||
#include <pthread.h>
|
||||
#include "pthread_private.h"
|
||||
#endif
|
||||
#include "libc_private.h"
|
||||
|
||||
int
|
||||
vscanf(fmt, ap)
|
||||
|
@ -55,12 +52,8 @@ vscanf(fmt, ap)
|
|||
{
|
||||
int retval;
|
||||
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_flockfile(stdin,__FILE__,__LINE__);
|
||||
#endif
|
||||
FLOCKFILE(stdin);
|
||||
retval = __svfscanf(stdin, fmt, ap);
|
||||
#ifdef _THREAD_SAFE
|
||||
_thread_funlockfile(stdin);
|
||||
#endif
|
||||
FUNLOCKFILE(stdin);
|
||||
return (retval);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue