mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 12:30:06 +00: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:
parent
474be527c8
commit
edf5b2d716
212
ChangeLog
212
ChangeLog
@ -1,3 +1,204 @@
|
||||
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.
|
||||
|
||||
Thu Sep 5 13:18:25 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
|
||||
|
||||
* sysdeps/mach/hurd/i386/init-first.c (__libc_argc, __libc_argv):
|
||||
@ -7,7 +208,7 @@ Thu Sep 5 13:18:25 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
|
||||
available, pass __libc_argv in call to __proc_set_arg_locations.
|
||||
|
||||
* gmon/gmon.c (write_hist): Call __profile_frequency instead of
|
||||
hertz.
|
||||
hertz.
|
||||
(hertz): Delete function.
|
||||
* gmon/Makefile (routines): Add `prof-freq'.
|
||||
* sysdeps/generic/prof-freq.c: New file.
|
||||
@ -22,10 +223,10 @@ Thu Sep 5 13:18:25 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
|
||||
* Rules (generated): Restore reference to $(generated).
|
||||
|
||||
* mach/Machrules (mig.uh, mig.__h): Don't include $(user-MIGFLAGS)
|
||||
here.
|
||||
here.
|
||||
|
||||
* malloc/free.c (free): __lib_malloc_lock -> __libc_malloc_lock.
|
||||
|
||||
|
||||
* malloc/free.c: Provide extern decl of __libc_malloc_lock.
|
||||
* malloc/realloc.c: Likewise.
|
||||
* malloc/malloc-find.c: Likewise.
|
||||
@ -162,6 +363,11 @@ Sat Aug 31 03:07:39 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||
* intl/l10nflist.c (_nl_normalize_codeset): We convert to lower
|
||||
case, so don't prepend uppercase `ISO' for only numeric arg.
|
||||
|
||||
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.
|
||||
|
||||
Tue Sep 3 11:16:07 1996 Thomas Bushnell/ n/BSG <thomas@gnu.ai.mit.edu>
|
||||
|
||||
* shadow/lckpwdf.c (__ulckpwdf): Don't take address of LOCK in
|
||||
|
26
Makeconfig
26
Makeconfig
@ -523,17 +523,23 @@ ifeq (yes, $(build-shared))
|
||||
# version numbers to use when we install shared objects on this system.
|
||||
-include $(common-objpfx)soversions.mk
|
||||
$(common-objpfx)soversions.mk: $(..)shlib-versions $(..)Makeconfig \
|
||||
$(wildcard $(patsubst %, $(..)%/shlib-versions,\
|
||||
$(add-ons))) \
|
||||
$(common-objpfx)config.make
|
||||
sed 's/#.*$$//' $< | while read conf versions; do \
|
||||
test -n "$$versions" || continue; \
|
||||
case '$(config-machine)-$(config-vendor)-$(config-os)' in $$conf)\
|
||||
for v in $$versions; do \
|
||||
lib=`echo $$v | sed 's/=.*$$//'`; \
|
||||
if eval "test -z \"\$$vers_lib$$lib\""; then \
|
||||
eval vers_lib$${lib}=yes; \
|
||||
echo $$v | sed "s/^.*=/$$lib.so-version=./"; \
|
||||
fi; \
|
||||
done ;; esac; done > $@T; exit 0
|
||||
(file="$(..)shlib-versions \
|
||||
$(wildcard $(patsubst %,$(..)%/shlib-versions,$(add-ons)))"; \
|
||||
for f in $$file; do \
|
||||
sed 's/#.*$$//' $$f | while read conf versions; do \
|
||||
test -n "$$versions" || continue; \
|
||||
case '$(config-machine)-$(config-vendor)-$(config-os)' in $$conf)\
|
||||
for v in $$versions; do \
|
||||
lib=`echo $$v | sed 's/=.*$$//'`; \
|
||||
if eval "test -z \"\$$vers_lib$$lib\""; then \
|
||||
eval vers_lib$${lib}=yes; \
|
||||
echo $$v | sed "s/^.*=/$$lib.so-version=./"; \
|
||||
fi; \
|
||||
done ;; esac; done; \
|
||||
done;) > $@T; exit 0
|
||||
mv -f $@T $@
|
||||
|
||||
# Get $(version) defined with the release version number.
|
||||
|
8
Makefile
8
Makefile
@ -26,7 +26,7 @@ endif
|
||||
|
||||
# This is the default target; it makes everything except the tests.
|
||||
.PHONY: all
|
||||
all: lib extra_solibs others
|
||||
all: lib others
|
||||
|
||||
define autoconf-it
|
||||
@-rm -f $@.new
|
||||
@ -73,9 +73,9 @@ subdirs := $(filter mach,$(subdirs)) $(filter hurd,$(subdirs)) \
|
||||
|
||||
|
||||
# These are the targets that are made by making them in each subdirectory.
|
||||
+subdir_targets := subdir_lib extra_solibs objects objs others \
|
||||
subdir_mostlyclean subdir_clean subdir_distclean \
|
||||
subdir_realclean tests subdir_lint.out \
|
||||
+subdir_targets := subdir_lib objects objs others subdir_mostlyclean \
|
||||
subdir_clean subdir_distclean subdir_realclean \
|
||||
tests subdir_lint.out \
|
||||
subdir_distinfo \
|
||||
subdir_echo-headers subdir_echo-distinfo \
|
||||
subdir_install \
|
||||
|
3
Rules
3
Rules
@ -107,14 +107,13 @@ $(objpfx)%.out: /dev/null $(objpfx)% # Make it 2nd arg for canned sequence.
|
||||
endif # tests
|
||||
|
||||
.PHONY: distclean realclean subdir_distclean subdir_realclean \
|
||||
subdir_clean subdir_mostlyclean extra_solibs
|
||||
subdir_clean subdir_mostlyclean
|
||||
subdir_mostlyclean: mostlyclean
|
||||
subdir_clean: clean
|
||||
subdir_distclean: distclean
|
||||
subdir_realclean: realclean
|
||||
realclean: distclean
|
||||
distclean: clean
|
||||
extra_solibs:
|
||||
|
||||
.PHONY: subdir_echo-headers
|
||||
subdir_echo-headers: echo-headers
|
||||
|
@ -13,7 +13,7 @@ config-vendor = @host_vendor@
|
||||
config-os = @host_os@
|
||||
config-sysdirs = @sysnames@
|
||||
|
||||
config-defines = @DEFS@
|
||||
defines = @DEFINES@
|
||||
|
||||
elf = @elf@
|
||||
have-initfini = @libc_cv_have_initfini@
|
||||
|
3
configure
vendored
3
configure
vendored
@ -1754,6 +1754,8 @@ fi
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if test "`(cd $srcdir; pwd)`" = "`pwd`"; then
|
||||
config_makefile=
|
||||
else
|
||||
@ -1912,6 +1914,7 @@ s%@elf@%$elf%g
|
||||
s%@shared@%$shared%g
|
||||
s%@profile@%$profile%g
|
||||
s%@omitfp@%$omitfp%g
|
||||
s%@DEFINES@%$DEFINES%g
|
||||
|
||||
CEOF
|
||||
EOF
|
||||
|
@ -668,6 +668,8 @@ fi
|
||||
AC_SUBST(profile)
|
||||
AC_SUBST(omitfp)
|
||||
|
||||
AC_SUBST(DEFINES)
|
||||
|
||||
if test "`(cd $srcdir; pwd)`" = "`pwd`"; then
|
||||
config_makefile=
|
||||
else
|
||||
|
@ -39,4 +39,8 @@ CFLAGS-hash_func.c := -Wno-unused
|
||||
# The db code outsmarts the compiler frequently.
|
||||
override CFLAGS += -Wno-uninitialized
|
||||
|
||||
LDLIBS-makedb := db/libdb
|
||||
ifeq ($(build_shared),yes)
|
||||
$(objpfx)makedb: $(objpfx)libdb.so$(libdb.so-version)
|
||||
else
|
||||
$(objpfx)makedb: $(objpfx)libdb.a
|
||||
endif
|
||||
|
@ -28,7 +28,7 @@ alltypes-$(lib) := $(foreach o,$(object-suffixes-$(lib)),\
|
||||
ifeq (,$(filter $(lib),$(extra-libs-others)))
|
||||
lib-noranlib: $(alltypes-$(lib))
|
||||
ifeq (yes,$(build-shared))
|
||||
extra_solibs: $(objpfx)$(lib).so$($(lib).so-version)
|
||||
lib-noranlib: $(objpfx)$(lib).so$($(lib).so-version)
|
||||
endif
|
||||
else
|
||||
others: $(alltypes-$(lib))
|
||||
@ -37,7 +37,7 @@ endif
|
||||
# The linked shared library is never a dependent of lib-noranlib,
|
||||
# because linking it will depend on libc.so already being built.
|
||||
ifneq (,$(filter .so,$(object-suffixes-$(lib))))
|
||||
extra_solibs: $(objpfx)$(lib).so
|
||||
others: $(objpfx)$(lib).so
|
||||
endif
|
||||
|
||||
|
||||
|
@ -160,7 +160,9 @@ Cambridge, MA 02139, USA. */
|
||||
|
||||
|
||||
/* This is here only because every header file already includes this one. */
|
||||
#ifndef __ASSEMBLER__
|
||||
#include <sys/cdefs.h>
|
||||
#endif
|
||||
|
||||
/* This is here only because every header file already includes this one. */
|
||||
#ifndef _LIBC
|
||||
|
@ -16,7 +16,19 @@ 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 <features.h>
|
||||
|
||||
/* We need to have the error status variable of the resolver
|
||||
accessible in the libc. */
|
||||
int h_errno;
|
||||
int __h_errno;
|
||||
strong_alias (__h_errno, h_errno)
|
||||
|
||||
/* When threaded, h_errno may be a per-process variable. */
|
||||
#ifdef __USE_REENTRANT
|
||||
int
|
||||
weak_const_function
|
||||
__h_errno_location (void)
|
||||
{
|
||||
return &__h_errno;
|
||||
}
|
||||
#endif
|
||||
|
@ -202,6 +202,7 @@ extern const char _libc_intl_domainname[];
|
||||
/* This comes between the return type and function name in
|
||||
a function definition to make that definition weak. */
|
||||
#define weak_function __attribute__ ((weak))
|
||||
#define weak_const_function __attribute__ ((weak, __const__))
|
||||
|
||||
#endif /* HAVE_WEAK_SYMBOLS. */
|
||||
#endif /* Not ASSEMBLER, and GCC 2.7 or later. */
|
||||
@ -213,6 +214,7 @@ extern const char _libc_intl_domainname[];
|
||||
directive for the function symbol, and a `.weak' directive in addition
|
||||
will produce an error from the assembler. */
|
||||
#define weak_function /* empty */
|
||||
#define weak_const_function /* empty */
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -35,4 +35,4 @@ __getc_unlocked (fp)
|
||||
return _IO_getc_unlocked (fp);
|
||||
}
|
||||
|
||||
weak_alias (getc_unlocked, __getc_unlocked)
|
||||
weak_alias (__getc_unlocked, getc_unlocked)
|
||||
|
@ -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
|
||||
|
@ -33,4 +33,4 @@ __getchar_unlocked ()
|
||||
return _IO_getc_unlocked (stdin);
|
||||
}
|
||||
|
||||
weak_alias (getchar_unlocked, __getchar_unlocked)
|
||||
weak_alias (__getchar_unlocked, getchar_unlocked)
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
43
libio/ioflockfile.c
Normal file
43
libio/ioflockfile.c
Normal file
@ -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)
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -155,7 +155,7 @@ subdir_%: ;
|
||||
# ../Rules defines them for code subdirectories; for us, they are no-ops.
|
||||
# None of these should be `subdir_TARGET'; those targets are transformed
|
||||
# by the implicit rule above into `TARGET' deps.
|
||||
glibc-targets := lib extra_solibs objects objs others tests lint.out \
|
||||
glibc-targets := lib objects objs others tests lint.out \
|
||||
echo-headers echo-distinfo stubs
|
||||
.PHONY: $(glibc-targets)
|
||||
$(glibc-targets):
|
||||
|
@ -114,12 +114,6 @@ typedef int register_t __attribute__ ((__mode__ (__word__)));
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __USE_SVID
|
||||
/* Data type for key value used in System V IPC functions. */
|
||||
typedef long int key_t;
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __USE_BSD
|
||||
/* In BSD <sys/types.h> is expected to define BYTE_ORDER. */
|
||||
#include <endian.h>
|
||||
|
@ -43,6 +43,17 @@ __BEGIN_DECLS
|
||||
/* Error status for non-reentrant lookup functions. */
|
||||
extern int h_errno;
|
||||
|
||||
#if defined __USE_REENTRANT && (!defined _LIBC || defined _LIBC_REENTRANT)
|
||||
/* Function to access thread specific `h_errno' variable. */
|
||||
extern int *__h_errno_location __P ((void)) __attribute__ ((__const__));
|
||||
|
||||
/* An alias name for above variable. */
|
||||
extern int __h_errno;
|
||||
|
||||
/* Use a macro to access always the thread specific `h_errno' variable. */
|
||||
#define h_errno (*__h_errno_location ())
|
||||
#endif
|
||||
|
||||
/* Possible values left in `h_errno'. */
|
||||
#define NETDB_INTERNAL -1 /* See errno. */
|
||||
#define NETDB_SUCCESS 0 /* No problem. */
|
||||
|
@ -87,7 +87,7 @@ static char rcsid[] = "$Id$";
|
||||
#endif
|
||||
|
||||
char *__hostalias __P((const char *));
|
||||
int h_errno;
|
||||
|
||||
|
||||
/*
|
||||
* Formulate a normal query, send, and await answer.
|
||||
|
@ -11,7 +11,7 @@ Source: glibc-@VERSION@.tar.gz
|
||||
|
||||
%build
|
||||
configure --prefix=@prefix@
|
||||
if test x@prefix@ = /usr; then
|
||||
if test x@prefix@ = x/usr; then
|
||||
cat >configparms <<EOF
|
||||
slibdir=/lib
|
||||
sysconfdir=/etc
|
||||
|
@ -101,6 +101,9 @@ ssize_t __wprintf_pad __P ((FILE *, wchar_t pad, size_t n));
|
||||
} \
|
||||
} while (0)
|
||||
# define UNBUFFERED_P(S) ((S)->_IO_file_flags & _IO_UNBUFFERED)
|
||||
# define flockfile(S) _IO_flockfile (S)
|
||||
/* This macro must be without parameter! Don't change it. */
|
||||
# define funlockfile _IO_funlockfile
|
||||
#else /* ! USE_IN_LIBIO */
|
||||
/* This code is for use in the GNU C library. */
|
||||
# include <stdio.h>
|
||||
@ -398,7 +401,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
|
||||
|
||||
|
||||
#define process_arg(fspec) \
|
||||
/* Start real work. We know about all flag and modifiers and \
|
||||
/* Start real work. We know about all flags and modifiers and \
|
||||
now process the wanted format specifier. */ \
|
||||
LABEL (form_percent): \
|
||||
/* Write a literal "%". */ \
|
||||
@ -846,6 +849,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
|
||||
f = lead_str_end = find_spec (format, &mbstate);
|
||||
|
||||
/* Lock stream. */
|
||||
__libc_cleanup_region_start ((void (*) (void *)) &funlockfile, s);
|
||||
flockfile (s);
|
||||
|
||||
/* Write the literal text before the first format. */
|
||||
@ -854,10 +858,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
|
||||
|
||||
/* If we only have to print a simple string, return now. */
|
||||
if (*f == L_('\0'))
|
||||
{
|
||||
funlockfile (s);
|
||||
return done;
|
||||
}
|
||||
goto all_done;
|
||||
|
||||
/* Process whole format string. */
|
||||
do
|
||||
@ -1025,8 +1026,8 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
|
||||
if (spec == L_('\0'))
|
||||
{
|
||||
/* The format string ended before the specifier is complete. */
|
||||
funlockfile (s);
|
||||
return -1;
|
||||
done = -1;
|
||||
goto all_done;
|
||||
}
|
||||
|
||||
/* If we are in the fast loop force entering the complicated
|
||||
@ -1042,11 +1043,8 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
|
||||
}
|
||||
while (*f != L_('\0'));
|
||||
|
||||
/* Unlock stream. */
|
||||
funlockfile (s);
|
||||
|
||||
/* We processed the whole format without any positional parameters. */
|
||||
return done;
|
||||
/* Unlock stream and return. */
|
||||
goto all_done;
|
||||
|
||||
/* Here starts the more complex loop to handle positional parameters. */
|
||||
do_positional:
|
||||
@ -1289,8 +1287,8 @@ do_positional:
|
||||
of chars. */
|
||||
if (function_done < 0)
|
||||
{
|
||||
funlockfile (s);
|
||||
return -1;
|
||||
done = -1;
|
||||
goto all_done;
|
||||
}
|
||||
|
||||
done += function_done;
|
||||
@ -1305,8 +1303,9 @@ do_positional:
|
||||
}
|
||||
}
|
||||
|
||||
all_done:
|
||||
/* Unlock the stream. */
|
||||
funlockfile (s);
|
||||
__libc_cleanup_region_end (1);
|
||||
|
||||
return done;
|
||||
}
|
||||
|
@ -79,6 +79,10 @@ Cambridge, MA 02139, USA. */
|
||||
return EOF; \
|
||||
} \
|
||||
} while (0)
|
||||
# define LOCK_STREAM(S) \
|
||||
__libc_cleanup_region_start ((void (*) (void *)) &_IO_funlockfile, (S)); \
|
||||
_IO_flockfile (S)
|
||||
# define UNLOCK_STREAM __libc_cleanup_region_end (1)
|
||||
#else
|
||||
# define ungetc(c, s) (--read_in, ungetc (c, s))
|
||||
# define inchar() ((c = getc (s)), (void) ++read_in, c)
|
||||
@ -105,8 +109,18 @@ Cambridge, MA 02139, USA. */
|
||||
return EOF; \
|
||||
} \
|
||||
} while (0)
|
||||
#if 1
|
||||
/* XXX For now !!! */
|
||||
# define flockfile(S) /* nothing */
|
||||
# define funlockfile(S) /* nothing */
|
||||
# define LOCK_STREAM(S)
|
||||
# define UNLOCK_STREAM
|
||||
#else
|
||||
# define LOCK_STREAM(S) \
|
||||
__libc_cleanup_region_start (&__funlockfile, (S)); \
|
||||
__flockfile (S)
|
||||
# define UNLOCK_STREAM __libc_cleanup_region_start (1)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
@ -194,7 +208,7 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
|
||||
thousands = (wchar_t) *_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
|
||||
|
||||
/* Lock the stream. */
|
||||
flockfile (s);
|
||||
LOCK_STREAM (s);
|
||||
|
||||
/* Run through the format string. */
|
||||
while (*f != '\0')
|
||||
@ -441,6 +455,10 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
|
||||
else
|
||||
while (--width > 0 && inchar () != EOF);
|
||||
|
||||
if (width > 0)
|
||||
/* I.e., EOF was read. */
|
||||
--read_in;
|
||||
|
||||
if (!(flags & SUPPRESS))
|
||||
++done;
|
||||
|
||||
@ -842,7 +860,7 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
|
||||
}
|
||||
|
||||
/* Unlock stream. */
|
||||
funlockfile (s);
|
||||
UNLOCK_STREAM;
|
||||
|
||||
return done;
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ Cambridge, MA 02139, USA. */
|
||||
|
||||
.text
|
||||
.align 3
|
||||
.globl _start
|
||||
.ent _start, 0
|
||||
_start:
|
||||
.frame fp, 0, zero
|
||||
|
@ -83,5 +83,8 @@ typedef unsigned long __fd_mask;
|
||||
#define __FD_CLR(d, set) ((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d))
|
||||
#define __FD_ISSET(d, set) ((set)->fds_bits[__FDELT(d)] & __FDMASK(d))
|
||||
|
||||
#ifdef __USE_SVID
|
||||
typedef long int key_t;
|
||||
#endif
|
||||
|
||||
#endif /* gnu/types.h */
|
||||
|
@ -55,5 +55,62 @@ __profile_frequency ()
|
||||
return 0;
|
||||
return (1000000 / tim.it_interval.tv_usec);
|
||||
}
|
||||
/* Return frequency of ticks reported by profil. Generic version. */
|
||||
/*-
|
||||
* Copyright (c) 1983, 1992, 1993
|
||||
* The Regents of the University of California. 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 the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS 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.
|
||||
*/
|
||||
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
int
|
||||
__profile_frequency ()
|
||||
{
|
||||
/*
|
||||
* Discover the tick frequency of the machine if something goes wrong,
|
||||
* we return 0, an impossible hertz.
|
||||
*/
|
||||
struct itimerval tim;
|
||||
|
||||
tim.it_interval.tv_sec = 0;
|
||||
tim.it_interval.tv_usec = 1;
|
||||
tim.it_value.tv_sec = 0;
|
||||
tim.it_value.tv_usec = 0;
|
||||
setitimer(ITIMER_REAL, &tim, 0);
|
||||
setitimer(ITIMER_REAL, 0, &tim);
|
||||
if (tim.it_interval.tv_usec < 2)
|
||||
return 0;
|
||||
return (1000000 / tim.it_interval.tv_usec);
|
||||
}
|
||||
|
||||
|
||||
|
@ -133,7 +133,7 @@ _dl_start_user:\n\
|
||||
# See if we were run as a command with the executable file\n\
|
||||
# name as an extra leading argument.\n\
|
||||
movl _dl_skip_args@GOT(%ebx), %eax\n\
|
||||
movl (%eax),%eax\n\
|
||||
movl (%eax), %eax\n\
|
||||
# Pop the original argument count.\n\
|
||||
popl %ecx\n\
|
||||
# Subtract _dl_skip_args from it.\n\
|
||||
@ -151,7 +151,7 @@ _dl_start_user:\n\
|
||||
call _dl_init_next@PLT\n\
|
||||
addl $4, %esp # Pop argument.\n\
|
||||
# Check for zero return, when out of initializers.\n\
|
||||
testl %eax,%eax\n\
|
||||
testl %eax, %eax\n\
|
||||
jz 1f\n\
|
||||
# Call the shared object initializer function.\n\
|
||||
# NOTE: We depend only on the registers (%ebx, %esi and %edi)\n\
|
||||
@ -164,7 +164,8 @@ _dl_start_user:\n\
|
||||
# Loop to call _dl_init_next for the next initializer.\n\
|
||||
jmp 0b\n\
|
||||
1: # Clear the startup flag.\n\
|
||||
movl $0, _dl_starting_up@GOT(%ebx)\n\
|
||||
movl _dl_starting_up@GOT(%ebx), %eax\n\
|
||||
movl $0, (%eax)\n\
|
||||
# Pass our finalizer function to the user in %edx, as per ELF ABI.\n\
|
||||
movl _dl_fini@GOT(%ebx), %edx\n\
|
||||
# Jump to the user's entry point.\n\
|
||||
|
@ -1,2 +1,4 @@
|
||||
/* __profile_frequency is in sysdeps/mach/hurd/profil.c. This file
|
||||
is here as a place-holder to prevent the use of sysdeps/generic/prof-freq.c. */
|
||||
/* __profile_frequency is in sysdeps/mach/hurd/profil.c. This file
|
||||
is here as a place-holder to prevent the use of sysdeps/generic/prof-freq.c. */
|
||||
|
@ -527,8 +527,8 @@ __sysconf (name)
|
||||
#endif
|
||||
|
||||
case _SC_THREAD_DESTRUCTOR_ITERATIONS:
|
||||
#ifdef PTHREAD_DESTRUCTOR_ITERATIONS
|
||||
return PTHREAD_DESTRUCTOR_ITERATIONS;
|
||||
#ifdef _POSIX_THREAD_DESTRUCTOR_ITERATIONS
|
||||
return _POSIX_THREAD_DESTRUCTOR_ITERATIONS;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
|
@ -48,5 +48,11 @@ Cambridge, MA 02139, USA. */
|
||||
/* Unlock the named lock variable. */
|
||||
#define __libc_lock_unlock(NAME)
|
||||
|
||||
/* Start critical region with cleanup. */
|
||||
#define __libc_cleanup_region_start(FCT, ARG)
|
||||
|
||||
/* End critical region with cleanup. */
|
||||
#define __libc_cleanup_region_end(DOIT)
|
||||
|
||||
|
||||
#endif /* libc-lock.h */
|
||||
|
@ -17,8 +17,7 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#define _ERRNO_H
|
||||
#include <errnos.h>
|
||||
#include <features.h>
|
||||
|
||||
.section .bss
|
||||
.globl errno
|
||||
@ -30,15 +29,60 @@ errno: .space 4
|
||||
#endif
|
||||
|
||||
.text
|
||||
LEAF(__syscall_error, 0)
|
||||
.align 2
|
||||
|
||||
#ifdef _LIBC_REENTRANT
|
||||
|
||||
.globl __syscall_error
|
||||
.ent __syscall_error
|
||||
__syscall_error:
|
||||
ldgp gp, 0(t12)
|
||||
lda sp, -16(sp)
|
||||
.frame sp, 16, ra, 0
|
||||
stq ra, 0(sp)
|
||||
stq v0, 8(sp)
|
||||
.mask 0x4000001, -16
|
||||
.prologue 1
|
||||
|
||||
/* Find our pre-thread errno address */
|
||||
jsr ra, __errno_location
|
||||
|
||||
/* Store the error value. */
|
||||
ldl t0, 8(sp)
|
||||
stl t0, 0(v0)
|
||||
|
||||
/* And kick back a -1. */
|
||||
ldi v0, -1
|
||||
|
||||
ldq ra, 0(sp)
|
||||
lda sp, 16(sp)
|
||||
ret
|
||||
.end __syscall_error
|
||||
|
||||
/* A default non-threaded version of __errno_location that just returns
|
||||
the address of errno. */
|
||||
|
||||
.weak __errno_location
|
||||
.ent __errno_location
|
||||
__errno_location:
|
||||
.frame sp, 0, ra
|
||||
ldgp gp, 0(t12)
|
||||
.mask 0, 0
|
||||
.prologue 1
|
||||
|
||||
lda v0, errno
|
||||
ret
|
||||
.end __errno_location
|
||||
|
||||
#else
|
||||
|
||||
ENTRY(__syscall_error)
|
||||
ldgp gp, 0(t12)
|
||||
.prologue 1
|
||||
|
||||
/* Store return value in errno... */
|
||||
stl v0, errno
|
||||
|
||||
/* And just kick back a -1. */
|
||||
ldi v0, -1
|
||||
lda v0, -1
|
||||
ret
|
||||
|
||||
END(__syscall_error)
|
||||
|
||||
#endif /* _LIBC_REENTRANT */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -36,17 +36,40 @@ syscall_error:
|
||||
cmpl $EWOULDBLOCK_sys, %eax /* Is it the old EWOULDBLOCK? */
|
||||
jne notb /* Branch if not. */
|
||||
movl $EAGAIN, %eax /* Yes; translate it to EAGAIN. */
|
||||
#endif
|
||||
notb:
|
||||
#endif
|
||||
#ifndef PIC
|
||||
movl %eax, C_SYMBOL_NAME(errno)
|
||||
#ifdef _LIBC_REENTRANT
|
||||
pushl %eax
|
||||
call __errno_location
|
||||
popl %ecx
|
||||
movl %ecx, (%eax)
|
||||
#endif
|
||||
#else
|
||||
/* The caller has pushed %ebx and then set it up to
|
||||
point to the GOT before calling us through the PLT. */
|
||||
movl C_SYMBOL_NAME(errno@GOT)(%ebx), %ecx
|
||||
|
||||
#ifndef _LIBC_REENTRANT
|
||||
/* Pop %ebx value saved before jumping here. */
|
||||
popl %ebx
|
||||
movl %eax, (%ecx)
|
||||
#else
|
||||
movl %eax, (%ecx)
|
||||
pushl %eax
|
||||
call C_SYMBOL_NAME(__errno_location@PLT)
|
||||
popl %ecx
|
||||
/* Pop %ebx value saved before jumping here. */
|
||||
popl %ebx
|
||||
movl %ecx, (%eax)
|
||||
#endif
|
||||
#endif
|
||||
movl $-1, %eax
|
||||
ret
|
||||
|
||||
#ifdef __ELF__
|
||||
#undef __syscall_error
|
||||
.Lfe2:
|
||||
.size __syscall_error, .Lfe2-__syscall_error
|
||||
#endif
|
||||
|
@ -91,7 +91,7 @@ __opendir (const char *name)
|
||||
|
||||
dirp->fd = fd;
|
||||
|
||||
__libc_lock_init (dirp->lock);
|
||||
__libc_lock_init (dirp->lock)
|
||||
|
||||
return dirp;
|
||||
}
|
||||
|
@ -1 +1,33 @@
|
||||
/* errnos.h - error constants. Linux specific version.
|
||||
Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
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 <linux/errno.h>
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
#if defined __USE_REENTRANT && (!defined _LIBC || defined _LIBC_REENTRANT)
|
||||
/* Declare alias of `errno' variable so it is accessible even if macro
|
||||
with name `errno' is defined. */
|
||||
extern int __errno;
|
||||
|
||||
/* When using threads, errno is a per-thread value. */
|
||||
extern int *__errno_location __P ((void)) __attribute__ ((__const__));
|
||||
#define errno (*__errno_location ())
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
@ -70,4 +70,8 @@ typedef __kernel_clock_t __clock_t;
|
||||
XPG4 seems to require `unsigned long'. */
|
||||
typedef unsigned long __fd_mask;
|
||||
|
||||
#ifdef __USE_SVID
|
||||
typedef int key_t;
|
||||
#endif
|
||||
|
||||
#endif /* gnu/types.h */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -27,26 +27,46 @@ Cambridge, MA 02139, USA. */
|
||||
.globl errno
|
||||
.type errno,@object
|
||||
.size errno,4
|
||||
errno: .space 4
|
||||
errno: .zero 4
|
||||
.globl _errno
|
||||
.type _errno,@object
|
||||
_errno = errno /* This name is expected by hj libc.so.5 startup code. */
|
||||
.text
|
||||
|
||||
/* The following code is not used at all in the shared library.
|
||||
The PIC system call stubs set errno themselves. */
|
||||
/* The following code is only used in the shared library when we
|
||||
compile the reentrant version. Otherwise each system call defines
|
||||
each own version. */
|
||||
|
||||
#ifndef PIC
|
||||
#ifndef PIC
|
||||
|
||||
/* The syscall stubs jump here when they detect an error.
|
||||
The code for Linux is almost identical to the canonical Unix/i386
|
||||
code, except that the error number in %eax is negated. */
|
||||
|
||||
.globl __syscall_error
|
||||
.globl __syscall_error
|
||||
.type __syscall_error,@function
|
||||
__syscall_error:
|
||||
negl %eax
|
||||
|
||||
#define __syscall_error __syscall_error_1
|
||||
#include <sysdeps/unix/i386/sysdep.S>
|
||||
|
||||
#endif /* !PIC */
|
||||
|
||||
|
||||
#ifdef _LIBC_REENTRANT
|
||||
.globl __errno_location
|
||||
.type __errno_location,@function
|
||||
__errno_location:
|
||||
#ifdef PIC
|
||||
call .L2
|
||||
.L2: popl %ecx
|
||||
addl $_GLOBAL_OFFSET_TABLE_+[.-.L2], %ecx
|
||||
movl errno@GOT(%ecx), %eax
|
||||
#else
|
||||
movl $errno, %eax
|
||||
#endif
|
||||
ret
|
||||
.Lfe1:
|
||||
.size __errno_location, .Lfe1-__errno_location
|
||||
#endif
|
||||
|
@ -45,21 +45,44 @@ Cambridge, MA 02139, USA. */
|
||||
testl %eax, %eax; \
|
||||
jl syscall_error;
|
||||
|
||||
#ifndef PIC
|
||||
#ifndef PIC
|
||||
#define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */
|
||||
#else
|
||||
/* Store (- %eax) into errno through the GOT. */
|
||||
#ifdef _LIBC_REENTRANT
|
||||
#define SYSCALL_ERROR_HANDLER \
|
||||
.type syscall_error,@function; \
|
||||
syscall_error: \
|
||||
pushl %ebx; \
|
||||
call 0f; \
|
||||
0:popl %ebx; \
|
||||
xorl %edx, %edx; \
|
||||
addl $_GLOBAL_OFFSET_TABLE_+[.-0b], %ebx; \
|
||||
subl %eax, %edx; \
|
||||
movl errno@GOT(%ebx), %ecx; \
|
||||
movl %edx, (%ecx); \
|
||||
pushl %edx; \
|
||||
call __errno_location@PLT; \
|
||||
popl %ecx; \
|
||||
popl %ebx; \
|
||||
movl %ecx, (%eax); \
|
||||
movl $-1, %eax; \
|
||||
ret;
|
||||
#else
|
||||
#define SYSCALL_ERROR_HANDLER \
|
||||
.type syscall_error,@function; \
|
||||
syscall_error: \
|
||||
call 0f; \
|
||||
0:popl %ecx; \
|
||||
negl %eax; \
|
||||
xorl %edx, %edx; \
|
||||
addl $_GLOBAL_OFFSET_TABLE_+[.-0b], %ecx; \
|
||||
subl %eax, %edx; \
|
||||
movl errno@GOT(%ecx), %ecx; \
|
||||
movl %eax, (%ecx); \
|
||||
movl %edx, (%ecx); \
|
||||
movl $-1, %eax; \
|
||||
ret;
|
||||
#endif
|
||||
#endif /* _LIBC_REENTRANT */
|
||||
#endif /* PIC */
|
||||
|
||||
/* Linux takes system call arguments in registers:
|
||||
|
||||
|
51
sysdeps/unix/sysv/linux/schedbits.h
Normal file
51
sysdeps/unix/sysv/linux/schedbits.h
Normal file
@ -0,0 +1,51 @@
|
||||
/* Definitions of constants and data structure for POSIX 1003.1b-1993
|
||||
scheduling interface.
|
||||
Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
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. */
|
||||
|
||||
#ifndef _SCHEDBITS_H
|
||||
#define _SCHEDBITS_H 1
|
||||
|
||||
/* Scheduling algorithms. */
|
||||
#define SCHED_OTHER 0
|
||||
#define SCHED_FIFO 1
|
||||
#define SCHED_RR 2
|
||||
|
||||
/* Data structure to describe a process' schedulability. */
|
||||
struct sched_params
|
||||
{
|
||||
int sched_priority;
|
||||
};
|
||||
|
||||
/* Cloning flags. */
|
||||
#define CSIGNAL 0x000000ff /* Signal mask to be sent at exit. */
|
||||
#define CLONE_VM 0x00000100 /* Set if VM shared between processes. */
|
||||
#define CLONE_FS 0x00000200 /* Set if fs info shared between processes.*/
|
||||
#define CLONE_FILES 0x00000400 /* Set if open files shared between processes*/
|
||||
#define CLONE_SIGHAND 0x00000800 /* Set if signal handlers shared. */
|
||||
#define CLONE_PID 0x00001000 /* Set if pid shared. */
|
||||
|
||||
|
||||
/* Clone current process. The parameter list of FN is not for true. Only
|
||||
dots is not allowed by ISO C and without argument the compiler would
|
||||
complain about a missing parameter list. */
|
||||
extern int clone __P ((int (*__fn) (void *, ...), void *__child_stack,
|
||||
int __flags, int __nargs, ...));
|
||||
|
||||
|
||||
#endif /* schedbits.h */
|
30
sysdeps/unix/sysv/linux/waitflags.h
Normal file
30
sysdeps/unix/sysv/linux/waitflags.h
Normal file
@ -0,0 +1,30 @@
|
||||
/* Definitions of flag bits for `waitpid' et al.
|
||||
Copyright (C) 1992, 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#ifndef _WAITFLAGS_H
|
||||
|
||||
#define _WAITFLAGS_H 1
|
||||
|
||||
/* Bits in the third argument to `waitpid'. */
|
||||
#define WNOHANG 1 /* Don't block waiting. */
|
||||
#define WUNTRACED 2 /* Report status of stopped children. */
|
||||
|
||||
#define __WCLONE 0x80000000 /* Wait for cloned process. */
|
||||
|
||||
#endif /* waitflags.h */
|
Loading…
Reference in New Issue
Block a user