mirror of
git://sourceware.org/git/glibc.git
synced 2026-10-20 11:52:27 +08:00
update from main archive 960906
Sat Sep 7 05:15:45 1996 Ulrich Drepper <drepper@cygnus.com> * libio/iofdopen: Initialize _lock field only if _IO_MTSAFE_IO. * libio/iofopen: Likewise. * libio/iofopncook.c: Likewise. * libio/iopopen.c: Likewise. * libio/iovsprintf.c: Likewise. * libio/iovsscanf.c: Likewise. * libio/memstream.c: Likewise. * libio/vasprintf.c: Likewise. * libio/vdprintf.c: Likewise. * libio/vsnprintf.c: Likewise. Sat Sep 7 03:55:47 1996 Ulrich Drepper <drepper@cygnus.com> * Makeconfig (soversions.mk): Also use shlib-versions files in add-on directories. * config.make.in (config-defines): Remove. Not used anymore. (defines): New variable. Initiliazed by @DEFINES@. * configure.in: Add AC_SUBST(DEFINES). * libio/Makefile (routines): When compiling reentrant libc add clearerr_u, feof_u, ferror_u, fputc_u, getc_u, getchar_u, iofflush_u, putc_u, putchar_u, ioflockfile. (CPPFLAGS): Add -D_IO_MTSAFE_IO for reentrant libc. * sysdeps/stub/libc-lock.h: Add stubs for __libc_cleanup_region_start and __libc_cleanup_region_end. * sysdeps/unix/i386/sysdep.S [_LIBC_REENTRANT]: Set errno using __errno_location function. * sysdeps/unix/sysv/linux/i386/sysdep.S [_LIBC_REENTRANT]: Set errno using __errno_location function. (__errno_location): New function. * sysdeps/unix/sysv/linux/i386/sysdep.h [PIC]: Add second syscall_error handler for reentrant libc. * sysdeps/unix/opendir.c: Remove unneeded `;'. * libio.h [_IO_MTSAFE_IO]: Include <pthread.h>. [!_IO_MTSAFE_IO]: Define _IO_flockfile and _IO_funlockfile as empty macros. * libioP.h: Include <libc-lock.h>. * libio/stdio.h: Add prototypes for *_locked and *_unlocked functions. * libio/clearerr.c: Use _IO_ protected versions of flockfile and funlockfile to be namespace clean. * libio/genops.c: Use __libc_lock_* macros for handling lock. * libio/iofdopen: Add initialization of _lock in _IO_FILE. * libio/iofopen: Likewise. * libio/iofopncook.c: Likewise. * libio/iopopen.c: Likewise. * libio/iovsprintf.c: Likewise. * libio/iovsscanf.c: Likewise. * libio/memstream.c: Likewise. * libio/vasprintf.c: Likewise. * libio/vdprintf.c: Likewise. * libio/vsnprintf.c: Likewise. * libio/fgetc.c: Use __libc_cleanup_region_* macros instead of flockfile etc. * libio/fputc.c: Likewise. * libio/freopen.c: Likewise. * libio/fseek.c: Likewise. * libio/getc.c: Likewise. * libio/getchar.c: Likewise. * libio/iofclose.c: Likewise. * libio/iofflush.c: Likewise. * libio/iofgetpos.c: Likewise. * libio/iofgets.c: Likewise. * libio/iofputs.c: Likewise. * libio/iofread.c: Likewise. * libio/iofsetpos.c: Likewise. * libio/ioftell.c: Likewise. * libio/iofwrite.c: Likewise. * libio/iogetdelim.c: Likewise. * libio/iogets.c: Likewise. * libio/ioputs.c: Likewise. * libio/iosetbuffer.c: Likewise. * libio/iosetvbuf.c: Likewise. * libio/ioungetc.c: Likewise. * libio/putc.c: Likewise. * libio/putchar.c: Likewise. * libio/rewind.c: Likewise. * stdio-common/vfprintf.c: Likewise. * stdio-common/vfscanf.c: Likewise. * libio/clearerr_u.c: Correct alias name. * libio/ferror_u.c: Likewise. * libio/fileno.c: Likewise. * libio/fputc_u.c: Likewise. * libio/getc.c: Likewise. * libio/getc_u.c: Likewise. * libio/getchar.c: Likewise. * libio/getchar_u.c: Likewise. * libio/putc.c: Likewise. * libio/putchar.c: Likewise. * libio/feof_u.c: Undefine macro with name of function before definition of function itself. * libio/ioflockfile.c: New file. Implementation of flockfile and funlockfile. * libio/putchar_u.c: Fix typo. Use stdout instead of fp. * malloc/malloc.h: Don't include <libc-lock.h> and don't declare _malloc_loc. * malloc/free.c: Include <libc-lock.h>. * malloc/realloc.c: Likewise. * malloc/malloc-find.c: Likewise. * malloc/malloc-size.c: Likewise. * malloc/malloc-walk.c: Likewise. * malloc/memalign.c: Likewise. * malloc/malloc.c: Likewise. * sysdeps/i386/dl-machine.h: Correct clearing of _dl_starting_up. Fri Sep 6 19:38:49 1996 Ulrich Drepper <drepper@cygnus.com> * sysdeps/stub/libc-lock.h: Define __libc_lock_critical_start and __libc_lock_critical_end as empty macros. * malloc/malloc.h: Don't include <libc-lock.h> and don't declare __libc_malloc_lock. * malloc/free.c: Include <libc-lock.h>. * malloc/malloc-find.c: Likewise. * malloc/malloc-size.c: Likewise. * malloc/malloc-walk.c: Likewise. * malloc/malloc.c: Likewise. * malloc/memalign.c: Likewise. * malloc/realloc.c: Likewise. * Makefile: Undo change from Mon Sep 2 22:15:14 1996. No more extra_solibs pass. * Rules: Likewise. * extra-lib.mk: Likewise. * manual/Makefile: Likewise. * db/Makefile (makedb): Choose dependecies based on build-shared. Patch by Andres Schwab. * sysdeps/posix/sysconf.c: Don't use PTHREAD_DESTRUCTOR_ITERATIONS but _POSIX_THREAD_DESTRUCTOR_ITERATIONS. * sysdeps/unix/sysv/linux/errnos.h: New file. * sysdeps/unix/sysv/linux/schedbits.h: New file. * sysdeps/unix/sysv/linux/waitflags.h: New file. * sysdeps/unix/sysv/linux/gnu/types.h: Add definition of `key_t'. Fri Sep 6 08:26:31 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * rpm/template: Fix typo in %build section. Fri Sep 6 03:31:07 1996 Ulrich Drepper <drepper@cygnus.com> * sysdeps/unix/sysv/linux/errnos.h: Don't define errno macro when building libc without thread support. * resolv/netdb.h: Likewise for h_errno macro. Thu Sep 5 23:01:48 1996 Ulrich Drepper <drepper@cygnus.com> * libc-symbols.h: Add new macro weak_const_function. It's like weak_function, but the function is additionally marked as const. * features.h: Only include <sys/cdefs.h> if !__ASSEMBLER__. Thu Sep 5 22:55:49 1996 Richard Henderson <rth@tamu.edu> * inet/herrno.c (__h_errno_location): New function. (h_errno): Make strong_alias __h_errno so that we can access the variable even if `h_errno' is a macro. * resolv/netdb.h: Define macro h_errno to access thread specific version of h_errno variable. Declare alias __h_errno for h_errno. * resolv/res_query (h_errno): Remove definition. * sysdeps/unix/sysv/linux/errnos.h [!__ASSEMBLER__ && __USE_REENTRANT]: Add macro `errno' to get thread specific variable. * sysdeps/unix/alpha/sysdep.S [_LIBC_REENTRANT]: Set errno using __errno_location function. (__errno_location): New function. Thu Sep 5 21:08:44 1996 Ulrich Drepper <drepper@cygnus.com> * posix/gnu/types.h: Remove definition of key_t. * sysdeps/generic/gnu/types.h: Move it to here. * sysdeps/unix/sysv/linux/gnu/types.h: Add Linux specific definition of key_t. * sysdeps/unix/sysv/linux/waitflags.h: New file. Linux specific definitions. * sysdeps/unix/sysv/linux/schedbits.h: New file. Include clone prototypes and associated flags. Thu Sep 5 08:58:47 1996 Richard Henderson <rth@tamu.edu> * sysdeps/alpha/elf/start.S: Make _start global again. hertz. here. Wed Sep 4 16:16:13 1996 Ulrich Drepper <drepper@cygnus.com> * sysdeps/mach/hurd/send.c (__send): De-ANSI-fy. * sysdeps/mach/hurd/sendto.c (sendto): Likewise.
This commit is contained in:
@@ -36,6 +36,15 @@ routines := \
|
||||
\
|
||||
libc_fatal
|
||||
|
||||
include ../Makeconfig
|
||||
|
||||
ifneq (,$(filter %REENTRANT, $(defines)))
|
||||
routines += clearerr_u feof_u ferror_u fputc_u getc_u getchar_u \
|
||||
iofflush_u putc_u putchar_u ioflockfile
|
||||
|
||||
CPPFLAGS += -D_IO_MTSAFE_IO
|
||||
endif
|
||||
|
||||
aux := \
|
||||
cleanup fileops genops stdfiles stdio strops
|
||||
|
||||
|
||||
+2
-2
@@ -24,9 +24,9 @@ clearerr (fp)
|
||||
FILE *fp;
|
||||
{
|
||||
CHECK_FILE (fp, /*nothing*/);
|
||||
flockfile (fp);
|
||||
_IO_flockfile (fp);
|
||||
_IO_clearerr (fp);
|
||||
funlockfile (fp);
|
||||
_IO_funlockfile (fp);
|
||||
}
|
||||
|
||||
#ifdef _IO_MTSAFE_IO
|
||||
|
||||
+1
-1
@@ -27,4 +27,4 @@ __clearerr_unlocked (fp)
|
||||
_IO_clearerr (fp);
|
||||
}
|
||||
|
||||
weak_alias (clearerr_unlocked, __clearerr_unlocked)
|
||||
weak_alias (__clearerr_unlocked, clearerr_unlocked)
|
||||
|
||||
@@ -24,6 +24,8 @@ the executable file might be covered by the GNU General Public License. */
|
||||
#include "libioP.h"
|
||||
#include "stdio.h"
|
||||
|
||||
#undef feof_unlocked
|
||||
|
||||
int
|
||||
feof_unlocked (fp)
|
||||
_IO_FILE* fp;
|
||||
|
||||
@@ -24,6 +24,8 @@ the executable file might be covered by the GNU General Public License. */
|
||||
#include "libioP.h"
|
||||
#include "stdio.h"
|
||||
|
||||
#undef ferror_unlocked
|
||||
|
||||
int
|
||||
ferror_unlocked (fp)
|
||||
_IO_FILE* fp;
|
||||
|
||||
+3
-2
@@ -31,8 +31,9 @@ fgetc (fp)
|
||||
{
|
||||
int result;
|
||||
CHECK_FILE (fp, EOF);
|
||||
flockfile (fp);
|
||||
__libc_cleanup_region_start (_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
result = _IO_getc_unlocked (fp);
|
||||
funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
return result;
|
||||
}
|
||||
|
||||
+2
-2
@@ -42,6 +42,6 @@ fileno (fp)
|
||||
it only accesses once a single variable and this is already atomic
|
||||
(at least at thread level). */
|
||||
|
||||
weak_alias (fileno_unlocked, fileno)
|
||||
weak_alias (fileno_locked, fileno)
|
||||
weak_alias (fileno, fileno_unlocked)
|
||||
weak_alias (fileno, fileno_locked)
|
||||
#endif
|
||||
|
||||
+4
-1
@@ -32,8 +32,11 @@ fputc (c, fp)
|
||||
{
|
||||
int result;
|
||||
CHECK_FILE (fp, EOF);
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
result = _IO_putc_unlocked (c, fp);
|
||||
_IO_funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
return result;
|
||||
}
|
||||
|
||||
weak_alias (fputc, fputc_locked)
|
||||
|
||||
+1
-1
@@ -36,4 +36,4 @@ __fputc_unlocked (c, fp)
|
||||
return _IO_putc_unlocked (c, fp);
|
||||
}
|
||||
|
||||
weak_alias (fputc_unlocked, __fputc_unlocked)
|
||||
weak_alias (__fputc_unlocked, fputc_unlocked)
|
||||
|
||||
+3
-2
@@ -35,8 +35,9 @@ freopen (filename, mode, fp)
|
||||
CHECK_FILE (fp, NULL);
|
||||
if (!(fp->_flags & _IO_IS_FILEBUF))
|
||||
return NULL;
|
||||
flockfile (fp);
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
result = _IO_freopen (filename, mode, fp);
|
||||
funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
return result;
|
||||
}
|
||||
|
||||
+5
-4
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright (C) 1993, 1995 Free Software Foundation
|
||||
Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU IO Library. This library is free
|
||||
software; you can redistribute it and/or modify it under the
|
||||
@@ -22,8 +22,8 @@ the resulting executable to be covered by the GNU General Public License.
|
||||
This exception does not however invalidate any other reasons why
|
||||
the executable file might be covered by the GNU General Public License. */
|
||||
|
||||
#include "stdio.h"
|
||||
#include "libioP.h"
|
||||
#include "stdio.h"
|
||||
|
||||
int
|
||||
fseek (fp, offset, whence)
|
||||
@@ -33,8 +33,9 @@ fseek (fp, offset, whence)
|
||||
{
|
||||
int result;
|
||||
CHECK_FILE (fp, -1);
|
||||
flockfile (fp);
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
result = _IO_fseek (fp, offset, whence);
|
||||
funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
return result;
|
||||
}
|
||||
|
||||
+2
-2
@@ -466,7 +466,7 @@ DEFUN(_IO_init, (fp, flags),
|
||||
fp->_markers = NULL;
|
||||
fp->_cur_column = 0;
|
||||
#ifdef _IO_MTSAFE_IO
|
||||
_IO_mutex_init (fp->_lock);
|
||||
__libc_lock_init (fp->_lock);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -501,7 +501,7 @@ DEFUN(_IO_default_finish, (fp),
|
||||
}
|
||||
|
||||
#ifdef _IO_MTSAFE_IO
|
||||
_IO_mutex_destroy (fp->_lock);
|
||||
__libc_lock_fini (fp->_lock);
|
||||
#endif
|
||||
|
||||
_IO_un_link(fp);
|
||||
|
||||
+3
-2
@@ -33,14 +33,15 @@ getc (fp)
|
||||
{
|
||||
int result;
|
||||
CHECK_FILE (fp, EOF);
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
result = _IO_getc_unlocked (fp);
|
||||
_IO_funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
return result;
|
||||
}
|
||||
|
||||
#ifdef _IO_MTSAFE_IO
|
||||
# undef getc_locked
|
||||
|
||||
weak_alias (getc_locked, getc)
|
||||
weak_alias (getc, getc_locked)
|
||||
#endif
|
||||
|
||||
+1
-1
@@ -35,4 +35,4 @@ __getc_unlocked (fp)
|
||||
return _IO_getc_unlocked (fp);
|
||||
}
|
||||
|
||||
weak_alias (getc_unlocked, __getc_unlocked)
|
||||
weak_alias (__getc_unlocked, getc_unlocked)
|
||||
|
||||
+3
-2
@@ -31,14 +31,15 @@ int
|
||||
getchar ()
|
||||
{
|
||||
int result;
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, stdin);
|
||||
_IO_flockfile (stdin);
|
||||
result = _IO_getc_unlocked (stdin);
|
||||
_IO_funlockfile (stdin);
|
||||
__libc_cleanup_region_end (1);
|
||||
return result;
|
||||
}
|
||||
|
||||
#ifdef _IO_MTSAFE_IO
|
||||
# undef getchar_locked
|
||||
|
||||
weak_alias (getchar_locked, getchar)
|
||||
weak_alias (getchar, getchar_locked)
|
||||
#endif
|
||||
|
||||
+1
-1
@@ -33,4 +33,4 @@ __getchar_unlocked ()
|
||||
return _IO_getc_unlocked (stdin);
|
||||
}
|
||||
|
||||
weak_alias (getchar_unlocked, __getchar_unlocked)
|
||||
weak_alias (__getchar_unlocked, getchar_unlocked)
|
||||
|
||||
+2
-1
@@ -35,6 +35,7 @@ _IO_fclose (fp)
|
||||
|
||||
CHECK_FILE(fp, EOF);
|
||||
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
if (fp->_IO_file_flags & _IO_IS_FILEBUF)
|
||||
status = _IO_file_close_it (fp);
|
||||
@@ -46,7 +47,7 @@ _IO_fclose (fp)
|
||||
fp->_IO_file_flags = 0;
|
||||
free(fp);
|
||||
}
|
||||
_IO_funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
+19
-14
@@ -39,7 +39,11 @@ _IO_fdopen (fd, mode)
|
||||
{
|
||||
int read_write;
|
||||
int posix_mode = 0;
|
||||
struct _IO_FILE_plus *fp;
|
||||
struct locked_FILE
|
||||
{
|
||||
struct _IO_FILE_plus fp;
|
||||
_IO_lock_t lock;
|
||||
} *new_f;
|
||||
int fd_flags;
|
||||
|
||||
switch (*mode++)
|
||||
@@ -97,28 +101,29 @@ _IO_fdopen (fd, mode)
|
||||
}
|
||||
#endif
|
||||
|
||||
fp = (struct _IO_FILE_plus *) malloc (sizeof (struct _IO_FILE_plus));
|
||||
if (fp == NULL)
|
||||
new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE));
|
||||
if (new_f == NULL)
|
||||
return NULL;
|
||||
_IO_init (&fp->file, 0);
|
||||
_IO_JUMPS (&fp->file) = &_IO_file_jumps;
|
||||
_IO_file_init (&fp->file);
|
||||
new_f->fp.file._lock = &new_f->lock;
|
||||
_IO_init (&new_f->fp.file, 0);
|
||||
_IO_JUMPS (&new_f->fp.file) = &_IO_file_jumps;
|
||||
_IO_file_init (&new_f->fp.file);
|
||||
#if !_IO_UNIFIED_JUMPTABLES
|
||||
fp->vtable = NULL;
|
||||
new_f->fp.vtable = NULL;
|
||||
#endif
|
||||
if (_IO_file_attach (&fp->file, fd) == NULL)
|
||||
if (_IO_file_attach (&new_f->fp.file, fd) == NULL)
|
||||
{
|
||||
_IO_un_link (&fp->file);
|
||||
free (fp);
|
||||
_IO_un_link (&new_f->fp.file);
|
||||
free (new_f);
|
||||
return NULL;
|
||||
}
|
||||
fp->file._flags &= ~_IO_DELETE_DONT_CLOSE;
|
||||
new_f->fp.file._flags &= ~_IO_DELETE_DONT_CLOSE;
|
||||
|
||||
fp->file._IO_file_flags =
|
||||
_IO_mask_flags (&fp->file, read_write,
|
||||
new_f->fp.file._IO_file_flags =
|
||||
_IO_mask_flags (&new_f->fp.file, read_write,
|
||||
_IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
|
||||
|
||||
return (_IO_FILE *) fp;
|
||||
return (_IO_FILE *) &new_f->fp;
|
||||
}
|
||||
|
||||
weak_alias (_IO_fdopen, fdopen)
|
||||
|
||||
+4
-3
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright (C) 1993, 1995 Free Software Foundation
|
||||
Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU IO Library. This library is free
|
||||
software; you can redistribute it and/or modify it under the
|
||||
@@ -33,10 +33,11 @@ _IO_fflush (fp)
|
||||
else
|
||||
{
|
||||
int result;
|
||||
_IO_flockfile (fp);
|
||||
CHECK_FILE (fp, EOF);
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
result = _IO_SYNC (fp) ? EOF : 0;
|
||||
_IO_funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright (C) 1993, 1995 Free Software Foundation
|
||||
Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU IO Library. This library is free
|
||||
software; you can redistribute it and/or modify it under the
|
||||
@@ -33,9 +33,10 @@ _IO_fgetpos (fp, posp)
|
||||
{
|
||||
_IO_fpos_t pos;
|
||||
CHECK_FILE (fp, EOF);
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
pos = _IO_seekoff (fp, 0, _IO_seek_cur, 0);
|
||||
_IO_funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
if (pos == _IO_pos_BAD)
|
||||
{
|
||||
#ifdef EIO
|
||||
|
||||
+2
-1
@@ -35,6 +35,7 @@ _IO_fgets (buf, n, fp)
|
||||
CHECK_FILE (fp, NULL);
|
||||
if (n <= 0)
|
||||
return NULL;
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
count = _IO_getline (fp, buf, n - 1, '\n', 1);
|
||||
if (count == 0 || (fp->_IO_file_flags & _IO_ERR_SEEN))
|
||||
@@ -44,7 +45,7 @@ _IO_fgets (buf, n, fp)
|
||||
buf[count] = '\0';
|
||||
result = buf;
|
||||
}
|
||||
_IO_funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
Copyright (C) 1996 Free Software Foundation
|
||||
|
||||
This file is part of the GNU IO Library. This library is free
|
||||
software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this library; see the file COPYING. If not, write to the Free
|
||||
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
As a special exception, if you link this library with files
|
||||
compiled with a GNU compiler to produce an executable, this does not cause
|
||||
the resulting executable to be covered by the GNU General Public License.
|
||||
This exception does not however invalidate any other reasons why
|
||||
the executable file might be covered by the GNU General Public License. */
|
||||
|
||||
#include "libioP.h"
|
||||
#include <libc-lock.h>
|
||||
|
||||
void
|
||||
_IO_flockfile (s)
|
||||
_IO_FILE *s;
|
||||
{
|
||||
__libc_lock_lock (s->_lock);
|
||||
}
|
||||
weak_alias (_IO_flockfile, flockfile)
|
||||
|
||||
|
||||
void
|
||||
_IO_funlockfile (s)
|
||||
_IO_FILE *s;
|
||||
{
|
||||
__libc_lock_unlock (s->_lock);
|
||||
}
|
||||
weak_alias (_IO_funlockfile, funlockfile)
|
||||
+16
-11
@@ -32,20 +32,25 @@ _IO_fopen (filename, mode)
|
||||
const char *filename;
|
||||
const char *mode;
|
||||
{
|
||||
struct _IO_FILE_plus *fp =
|
||||
(struct _IO_FILE_plus *) malloc (sizeof (struct _IO_FILE_plus));
|
||||
if (fp == NULL)
|
||||
struct locked_FILE
|
||||
{
|
||||
struct _IO_FILE_plus fp;
|
||||
_IO_lock_t lock;
|
||||
} *new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE));
|
||||
|
||||
if (new_f == NULL)
|
||||
return NULL;
|
||||
_IO_init (&fp->file, 0);
|
||||
_IO_JUMPS (&fp->file) = &_IO_file_jumps;
|
||||
_IO_file_init (&fp->file);
|
||||
new_f->fp.file._lock = &new_f->lock;
|
||||
_IO_init (&new_f->fp.file, 0);
|
||||
_IO_JUMPS (&new_f->fp.file) = &_IO_file_jumps;
|
||||
_IO_file_init (&new_f->fp.file);
|
||||
#if !_IO_UNIFIED_JUMPTABLES
|
||||
fp->vtable = NULL;
|
||||
new_f->fp.vtable = NULL;
|
||||
#endif
|
||||
if (_IO_file_fopen (&fp->file, filename, mode) != NULL)
|
||||
return (_IO_FILE *) fp;
|
||||
_IO_un_link (&fp->file);
|
||||
free (fp);
|
||||
if (_IO_file_fopen (&new_f->fp.file, filename, mode) != NULL)
|
||||
return (_IO_FILE *) &new_f->fp;
|
||||
_IO_un_link (&new_f->fp.file);
|
||||
free (new_f);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
+16
-12
@@ -128,7 +128,11 @@ fopencookie (cookie, mode, io_functions)
|
||||
_IO_cookie_io_functions_t io_functions;
|
||||
{
|
||||
int read_write;
|
||||
struct _IO_cookie_file *cfile;
|
||||
struct locked_FILE
|
||||
{
|
||||
struct _IO_cookie_file cfile;
|
||||
_IO_lock_t lock;
|
||||
} *new_f;
|
||||
|
||||
switch (*mode++)
|
||||
{
|
||||
@@ -147,21 +151,21 @@ fopencookie (cookie, mode, io_functions)
|
||||
if (mode[0] == '+' || (mode[0] == 'b' && mode[1] == '+'))
|
||||
read_write &= _IO_IS_APPENDING;
|
||||
|
||||
cfile = (struct _IO_cookie_file *) malloc (sizeof (struct _IO_cookie_file));
|
||||
if (cfile == NULL)
|
||||
new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE));
|
||||
if (new_f == NULL)
|
||||
return NULL;
|
||||
new_f->cfile.file._lock = &new_f->lock;
|
||||
|
||||
_IO_init (&cfile->file, 0);
|
||||
_IO_JUMPS (&cfile->file) = &_IO_cookie_jumps;
|
||||
cfile->cookie = cookie;
|
||||
cfile->io_functions = io_functions;
|
||||
_IO_init (&new_f->cfile.file, 0);
|
||||
_IO_JUMPS (&new_f->cfile.file) = &_IO_cookie_jumps;
|
||||
new_f->cfile.cookie = cookie;
|
||||
new_f->cfile.io_functions = io_functions;
|
||||
|
||||
_IO_file_init(&cfile->file);
|
||||
_IO_file_init(&new_f->cfile.file);
|
||||
|
||||
cfile->file._IO_file_flags =
|
||||
_IO_mask_flags (&cfile->file, read_write,
|
||||
new_f->cfile.file._IO_file_flags =
|
||||
_IO_mask_flags (&new_f->cfile.file, read_write,
|
||||
_IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
|
||||
|
||||
return &cfile->file;
|
||||
return &new_f->cfile.file;
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -33,12 +33,13 @@ _IO_fputs (str, fp)
|
||||
_IO_size_t len = strlen (str);
|
||||
int result;
|
||||
CHECK_FILE (fp, EOF);
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
if (_IO_sputn (fp, str, len) != len)
|
||||
result = EOF;
|
||||
else
|
||||
result = 1;
|
||||
_IO_funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -36,9 +36,10 @@ _IO_fread (buf, size, count, fp)
|
||||
CHECK_FILE (fp, 0);
|
||||
if (bytes_requested == 0)
|
||||
return 0;
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
bytes_read = _IO_sgetn (fp, (char *) buf, bytes_requested);
|
||||
_IO_funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
return bytes_requested == bytes_read ? count : bytes_read / size;
|
||||
}
|
||||
weak_alias (_IO_fread, fread)
|
||||
|
||||
+2
-1
@@ -32,6 +32,7 @@ _IO_fsetpos (fp, posp)
|
||||
{
|
||||
int result;
|
||||
CHECK_FILE (fp, EOF);
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
if (_IO_seekpos (fp, *posp, _IOS_INPUT|_IOS_OUTPUT) == _IO_pos_BAD)
|
||||
{
|
||||
@@ -44,7 +45,7 @@ _IO_fsetpos (fp, posp)
|
||||
}
|
||||
else
|
||||
result = 0;
|
||||
_IO_funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright (C) 1993, 1995 Free Software Foundation
|
||||
Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU IO Library. This library is free
|
||||
software; you can redistribute it and/or modify it under the
|
||||
@@ -32,9 +32,10 @@ _IO_ftell (fp)
|
||||
{
|
||||
_IO_pos_t pos;
|
||||
CHECK_FILE (fp, -1L);
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
pos = _IO_seekoff (fp, 0, _IO_seek_cur, 0);
|
||||
_IO_funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
if (pos == _IO_pos_BAD)
|
||||
{
|
||||
#ifdef EIO
|
||||
|
||||
+3
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright (C) 1993 Free Software Foundation
|
||||
Copyright (C) 1993, 1996 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU IO Library. This library is free
|
||||
software; you can redistribute it and/or modify it under the
|
||||
@@ -36,9 +36,10 @@ _IO_fwrite (buf, size, count, fp)
|
||||
CHECK_FILE (fp, 0);
|
||||
if (request == 0)
|
||||
return 0;
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
written = _IO_sputn (fp, (const char *) buf, request);
|
||||
_IO_funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
/* Many traditional implementations return 0 if size==0 && count > 0,
|
||||
but ANSI seems to require us to return count in this case. */
|
||||
if (written == request)
|
||||
|
||||
+3
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright (C) 1994 Free Software Foundation
|
||||
Copyright (C) 1994, 1996 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU IO Library. This library is free
|
||||
software; you can redistribute it and/or modify it under the
|
||||
@@ -54,6 +54,7 @@ _IO_getdelim (lineptr, n, delimiter, fp)
|
||||
return -1;
|
||||
}
|
||||
CHECK_FILE (fp, -1);
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
if (_IO_ferror_unlocked (fp))
|
||||
{
|
||||
@@ -115,7 +116,7 @@ _IO_getdelim (lineptr, n, delimiter, fp)
|
||||
result = cur_len;
|
||||
|
||||
unlock_return:
|
||||
_IO_funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright (C) 1993 Free Software Foundation
|
||||
Copyright (C) 1993, 1996 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU IO Library. This library is free
|
||||
software; you can redistribute it and/or modify it under the
|
||||
@@ -32,6 +32,7 @@ _IO_gets (buf)
|
||||
_IO_size_t count;
|
||||
int ch;
|
||||
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, _IO_stdin);
|
||||
_IO_flockfile (_IO_stdin);
|
||||
ch = _IO_getc_unlocked (_IO_stdin);
|
||||
if (ch == EOF)
|
||||
@@ -45,7 +46,7 @@ _IO_gets (buf)
|
||||
if (_IO_stdin->_IO_file_flags & _IO_ERR_SEEN)
|
||||
return NULL;
|
||||
}
|
||||
_IO_funlockfile (_IO_stdin);
|
||||
__libc_cleanup_region_end (1);
|
||||
buf[count] = 0;
|
||||
return buf;
|
||||
}
|
||||
|
||||
+12
-4
@@ -149,10 +149,18 @@ _IO_FILE *
|
||||
DEFUN(_IO_popen, (command, mode),
|
||||
const char *command AND const char *mode)
|
||||
{
|
||||
_IO_proc_file *fpx = (_IO_proc_file*)malloc(sizeof(_IO_proc_file));
|
||||
_IO_FILE *fp = (_IO_FILE*)fpx;
|
||||
if (fp == NULL)
|
||||
struct locked_FILE
|
||||
{
|
||||
struct _IO_proc_file fpx;
|
||||
_IO_lock_t lock;
|
||||
} *new_f;
|
||||
_IO_FILE *fp;
|
||||
|
||||
new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE));
|
||||
if (new_f == NULL)
|
||||
return NULL;
|
||||
new_f->fpx.file.file._lock = &new_f->lock;
|
||||
fp = (_IO_FILE*)&new_f->fpx;
|
||||
_IO_init(fp, 0);
|
||||
_IO_JUMPS(fp) = &_IO_proc_jumps;
|
||||
_IO_file_init(fp);
|
||||
@@ -161,7 +169,7 @@ DEFUN(_IO_popen, (command, mode),
|
||||
#endif
|
||||
if (_IO_proc_open (fp, command, mode) != NULL)
|
||||
return fp;
|
||||
free (fpx);
|
||||
free (new_f);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -30,13 +30,14 @@ _IO_puts (str)
|
||||
{
|
||||
int result;
|
||||
_IO_size_t len = strlen (str);
|
||||
_IO_flockfile (fp);
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, _IO_stdout);
|
||||
_IO_flockfile (_IO_stdout);
|
||||
if (_IO_sputn (_IO_stdout, str, len) == len
|
||||
&& _IO_putc_unlocked ('\n', _IO_stdout) != EOF)
|
||||
result = len + 1;
|
||||
else
|
||||
result = EOF;
|
||||
_IO_funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
return result;
|
||||
}
|
||||
weak_alias (_IO_puts, puts)
|
||||
|
||||
+2
-1
@@ -31,12 +31,13 @@ _IO_setbuffer (fp, buf, size)
|
||||
_IO_size_t size;
|
||||
{
|
||||
CHECK_FILE (fp, );
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
fp->_flags &= ~_IO_LINE_BUF;
|
||||
if (!buf)
|
||||
size = 0;
|
||||
(void) _IO_SETBUF (fp, buf, size);
|
||||
_IO_funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
}
|
||||
|
||||
weak_alias (_IO_setbuffer, setbuffer)
|
||||
|
||||
+3
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright (C) 1993 Free Software Foundation
|
||||
Copyright (C) 1993, 1996 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU IO Library. This library is free
|
||||
software; you can redistribute it and/or modify it under the
|
||||
@@ -37,6 +37,7 @@ _IO_setvbuf (fp, buf, mode, size)
|
||||
{
|
||||
int result;
|
||||
CHECK_FILE (fp, EOF);
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
switch (mode)
|
||||
{
|
||||
@@ -88,7 +89,7 @@ _IO_setvbuf (fp, buf, mode, size)
|
||||
}
|
||||
result = _IO_SETBUF (fp, buf, size) == NULL ? EOF : 0;
|
||||
unlock_return:
|
||||
_IO_funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -33,9 +33,10 @@ _IO_ungetc (c, fp)
|
||||
CHECK_FILE (fp, EOF);
|
||||
if (c == EOF)
|
||||
return EOF;
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
result = _IO_sputbackc (fp, (unsigned char) c);
|
||||
_IO_funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -32,7 +32,10 @@ _IO_vsprintf (string, format, args)
|
||||
_IO_va_list args;
|
||||
{
|
||||
_IO_strfile sf;
|
||||
_IO_lock_t lock;
|
||||
int ret;
|
||||
|
||||
sf._f._lock = &lock;
|
||||
_IO_init ((_IO_FILE *) &sf, 0);
|
||||
_IO_JUMPS ((_IO_FILE *) &sf) = &_IO_str_jumps;
|
||||
_IO_str_init_static ((_IO_FILE *) &sf, string, -1, string);
|
||||
|
||||
@@ -30,6 +30,8 @@ DEFUN(_IO_vsscanf, (string, format, args),
|
||||
const char *string AND const char *format AND _IO_va_list args)
|
||||
{
|
||||
_IO_strfile sf;
|
||||
_IO_lock_t lock;
|
||||
sf._f._lock = &lock;
|
||||
_IO_init((_IO_FILE*)&sf, 0);
|
||||
_IO_JUMPS((_IO_FILE*)&sf) = &_IO_str_jumps;
|
||||
_IO_str_init_static ((_IO_FILE*)&sf, (char*)string, 0, NULL);
|
||||
|
||||
+3
-2
@@ -150,6 +150,7 @@ typedef struct
|
||||
|
||||
/* Handle lock. */
|
||||
#ifdef _IO_MTSAFE_IO
|
||||
#include <pthread.h>
|
||||
typedef pthread_mutex_t _IO_lock_t;
|
||||
#else
|
||||
typedef void _IO_lock_t;
|
||||
@@ -272,10 +273,10 @@ extern int _IO_putc_locked __P ((int, _IO_FILE *));
|
||||
extern void _IO_flockfile __P ((_IO_FILE *));
|
||||
extern void _IO_funlockfile __P ((_IO_FILE *));
|
||||
|
||||
#if !defined(_REENTRANT) && !defined(_THREAD_SAFE)
|
||||
#ifndef _IO_MTSAFE_IO
|
||||
# define _IO_flockfile(FILE) /**/
|
||||
# define _IO_funlockfile(FILE) /**/
|
||||
#endif /* _REENTRANT || _THREAD_SAFE */
|
||||
#endif /* !_IO_MTSAFE_IO */
|
||||
|
||||
|
||||
extern int _IO_vfscanf __P((_IO_FILE*, const char*, _IO_va_list, int*));
|
||||
|
||||
@@ -26,6 +26,7 @@ the executable file might be covered by the GNU General Public License. */
|
||||
#ifndef errno
|
||||
extern int errno;
|
||||
#endif
|
||||
#include <libc-lock.h>
|
||||
|
||||
#include "iolibio.h"
|
||||
|
||||
|
||||
+18
-14
@@ -16,8 +16,8 @@ License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "strfile.h"
|
||||
#include "libioP.h"
|
||||
#include "strfile.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -64,26 +64,30 @@ open_memstream (bufloc, sizeloc)
|
||||
char **bufloc;
|
||||
_IO_size_t *sizeloc;
|
||||
{
|
||||
struct _IO_FILE_memstream *fp;
|
||||
struct locked_FILE
|
||||
{
|
||||
struct _IO_FILE_memstream fp;
|
||||
_IO_lock_t lock;
|
||||
} *new_f;
|
||||
char *buf;
|
||||
|
||||
fp = (struct _IO_FILE_memstream *)
|
||||
malloc (sizeof (struct _IO_FILE_memstream));
|
||||
if (fp == NULL)
|
||||
new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE));
|
||||
if (new_f == NULL)
|
||||
return NULL;
|
||||
new_f->fp._sf._f._lock = &new_f->lock;
|
||||
|
||||
buf = ALLOC_BUF (_IO_BUFSIZ);
|
||||
_IO_init (&fp->_sf._f, 0);
|
||||
_IO_JUMPS (&fp->_sf._f) = &_IO_mem_jumps;
|
||||
_IO_str_init_static (&fp->_sf._f, buf, _IO_BUFSIZ, buf);
|
||||
fp->_sf._f._flags &= ~_IO_USER_BUF;
|
||||
fp->_sf._s._allocate_buffer = (_IO_alloc_type) malloc;
|
||||
fp->_sf._s._free_buffer = (_IO_free_type) free;
|
||||
_IO_init (&new_f->fp._sf._f, 0);
|
||||
_IO_JUMPS (&new_f->fp._sf._f) = &_IO_mem_jumps;
|
||||
_IO_str_init_static (&new_f->fp._sf._f, buf, _IO_BUFSIZ, buf);
|
||||
new_f->fp._sf._f._flags &= ~_IO_USER_BUF;
|
||||
new_f->fp._sf._s._allocate_buffer = (_IO_alloc_type) malloc;
|
||||
new_f->fp._sf._s._free_buffer = (_IO_free_type) free;
|
||||
|
||||
fp->bufloc = bufloc;
|
||||
fp->sizeloc = sizeloc;
|
||||
new_f->fp.bufloc = bufloc;
|
||||
new_f->fp.sizeloc = sizeloc;
|
||||
|
||||
return &fp->_sf._f;
|
||||
return &new_f->fp._sf._f;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+3
-2
@@ -28,14 +28,15 @@ putc (c, fp)
|
||||
{
|
||||
int result;
|
||||
CHECK_FILE (fp, EOF);
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
result = _IO_putc_unlocked (c, fp);
|
||||
_IO_funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
return result;
|
||||
}
|
||||
|
||||
#ifdef _IO_MTSAFE_IO
|
||||
# undef putc_locked
|
||||
|
||||
weak_alias (putc_locked, putc)
|
||||
weak_alias (putc, putc_locked)
|
||||
#endif
|
||||
|
||||
+3
-2
@@ -26,14 +26,15 @@ putchar (c)
|
||||
int c;
|
||||
{
|
||||
int result;
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, _IO_stdout);
|
||||
_IO_flockfile (_IO_stdout);
|
||||
result = _IO_putc_unlocked (c, _IO_stdout);
|
||||
_IO_funlockfile (_IO_stdout);
|
||||
__libc_cleanup_region_end (1);
|
||||
return result;
|
||||
}
|
||||
|
||||
#ifdef _IO_MTSAFE_IO
|
||||
# undef putchar_locked
|
||||
|
||||
weak_alias (putchar_locked, putchar)
|
||||
weak_alias (putchar, putchar_locked)
|
||||
#endif
|
||||
|
||||
+2
-2
@@ -25,6 +25,6 @@ int
|
||||
putchar_unlocked (c)
|
||||
int c;
|
||||
{
|
||||
CHECK_FILE (fp, EOF);
|
||||
return _IO_putc_unlocked (c, fp);
|
||||
CHECK_FILE (stdout, EOF);
|
||||
return _IO_putc_unlocked (c, stdout);
|
||||
}
|
||||
|
||||
+3
-2
@@ -21,15 +21,16 @@ the resulting executable to be covered by the GNU General Public License.
|
||||
This exception does not however invalidate any other reasons why
|
||||
the executable file might be covered by the GNU General Public License. */
|
||||
|
||||
#include "stdio.h"
|
||||
#include "libioP.h"
|
||||
#include "stdio.h"
|
||||
|
||||
void
|
||||
rewind (fp)
|
||||
_IO_FILE* fp;
|
||||
{
|
||||
CHECK_FILE (fp, );
|
||||
__libc_cleanup_region_start (&_IO_funlockfile, fp);
|
||||
_IO_flockfile (fp);
|
||||
_IO_rewind (fp);
|
||||
_IO_funlockfile (fp);
|
||||
__libc_cleanup_region_end (1);
|
||||
}
|
||||
|
||||
+24
-12
@@ -206,39 +206,51 @@ extern const char *const _sys_errlist[];
|
||||
#endif
|
||||
|
||||
/* Handle locking of streams. */
|
||||
#if defined(_REENTRANT) || defined(_THREAD_SAFE)
|
||||
#ifdef __USE_REENTRANT
|
||||
extern void clearerr_locked __P ((FILE *));
|
||||
extern void clearerr_unlocked __P ((FILE *));
|
||||
extern void fileno_unlocked __P ((FILE *));
|
||||
extern int feof_locked __P ((FILE *));
|
||||
extern int feof_unlocked __P ((FILE *));
|
||||
extern int ferror_locked __P ((FILE*));
|
||||
extern int ferror_unlocked __P ((FILE*));
|
||||
extern int fileno_locked __P ((FILE *));
|
||||
extern int fileno_unlocked __P ((FILE *));
|
||||
extern void flockfile __P ((FILE *));
|
||||
extern void funlockfile __P ((FILE *));
|
||||
extern int fclose_unlocked __P ((FILE *));
|
||||
extern int fflush_locked __P ((FILE *));
|
||||
extern int fflush_unlocked __P ((FILE *));
|
||||
extern size_t fread_unlocked __P ((void *, size_t, size_t, FILE *));
|
||||
extern size_t fwrite_unlocked __P ((const void *, size_t, size_t, FILE *));
|
||||
|
||||
extern int fputc_locked __P ((int, FILE*));
|
||||
extern int fputc_unlocked __P ((int, FILE*));
|
||||
extern int getc_locked __P ((FILE *));
|
||||
extern int getc_unlocked __P ((FILE *));
|
||||
extern int getchar_locked __P ((void));
|
||||
extern int getchar_unlocked __P ((void));
|
||||
extern int putc_locked __P ((int, FILE *));
|
||||
extern int putc_unlocked __P ((int, FILE *));
|
||||
extern int putchar_locked __P ((int));
|
||||
extern int putchar_unlocked __P ((int));
|
||||
|
||||
# define getc_unlocked(fp) _IO_getc_unlocked (fp)
|
||||
# define getc_locked(fp) _IO_fgetc (fp)
|
||||
# define getc_locked(fp) fgetc (fp)
|
||||
# define getchar_unlocked() getc_unlocked (stdin)
|
||||
# define getchar_locked() getc_locked (stdin)
|
||||
# define getc(fp) getc_locked (fp)
|
||||
|
||||
# define putc_unlocked(c, fp) _IO_putc_unlocked (c, fp)
|
||||
# define putc_locked(c, fp) _IO_putc_locked (c, fp)
|
||||
# define putc_unlocked(c, fp) putc_unlocked (c, fp)
|
||||
# define putc_locked(c, fp) putc_locked (c, fp)
|
||||
# define putchar_unlocked(c) putc_unlocked (c, stdout)
|
||||
# define putchar_locked(c) putc_locked (c, stdout)
|
||||
# define putc(c, fp) putc_locked (c, fp)
|
||||
|
||||
# define feof_unlocked(fp) _IO_feof_unlocked (fp)
|
||||
# define ferror_unlocked(fp) _IO_ferror_unlocked (fp)
|
||||
|
||||
#else
|
||||
# define getc(fp) _IO_getc_unlocked (fp)
|
||||
# define putc(c, fp) _IO_putc_unlocked (c, fp)
|
||||
|
||||
#endif /* _REENTRANT || _THREAD_SAFE */
|
||||
|
||||
#define flockfile(FILE) _IO_flockfile (FILE)
|
||||
#define funlockfile(FILE) _IO_funlockfile (FILE)
|
||||
#endif /* __USE_REENTRANT */
|
||||
|
||||
#define putchar(c) putc (c, stdout)
|
||||
#define getchar() getc (stdin)
|
||||
|
||||
@@ -38,10 +38,12 @@ _IO_vasprintf (result_ptr, format, args)
|
||||
const _IO_size_t init_string_size = 100;
|
||||
char *string;
|
||||
_IO_strfile sf;
|
||||
_IO_lock_t lock;
|
||||
int ret;
|
||||
string = ALLOC_BUF(init_string_size);
|
||||
if (string == NULL)
|
||||
return -1;
|
||||
sf._f._lock = &lock;
|
||||
_IO_init((_IO_FILE*)&sf, 0);
|
||||
_IO_JUMPS((_IO_FILE*)&sf) = &_IO_str_jumps;
|
||||
_IO_str_init_static ((_IO_FILE*)&sf, string, init_string_size, string);
|
||||
|
||||
@@ -32,8 +32,10 @@ _IO_vdprintf (d, format, arg)
|
||||
_IO_va_list arg;
|
||||
{
|
||||
struct _IO_FILE_plus tmpfil;
|
||||
_IO_lock_t lock;
|
||||
int done;
|
||||
|
||||
tmpfil.file._lock = &lock;
|
||||
_IO_init (&tmpfil.file, 0);
|
||||
_IO_JUMPS (&tmpfil.file) = &_IO_file_jumps;
|
||||
_IO_file_init (&tmpfil.file);
|
||||
|
||||
@@ -33,7 +33,9 @@ _IO_vsnprintf (string, maxlen, format, args)
|
||||
_IO_va_list args;
|
||||
{
|
||||
_IO_strfile sf;
|
||||
_IO_lock_t lock;
|
||||
int ret;
|
||||
sf._f._lock = &lock;
|
||||
_IO_init ((_IO_FILE *) &sf, 0);
|
||||
_IO_JUMPS ((_IO_FILE *) &sf) = &_IO_str_jumps;
|
||||
_IO_str_init_static ((_IO_FILE *) &sf, string, maxlen - 1, string);
|
||||
|
||||
Reference in New Issue
Block a user