1998-07-20 17:09  Ulrich Drepper  <drepper@cygnus.com>

	* shlib-versions: Remove definition for libSegFault.

	* memory.texi: Comment out the relocating allocator description.
	* manual/signal.texi: Remove reference to relocating allocator.
	* manual/top-menu.texi: Regenerated.

	* posix/fnmatch.c: Implement [: :] and change to recognize
	^ as negation only when not _POSIXLY_CORRECT.

	* sysdeps/generic/glob.c: Add several optimizations.

	* posix/glob.h: Undefine __PMT to prevent warnings.
	Reported by Roland McGrath.

	* posix/regex.c: Define namespace macros only for _LIBC.

	* sysdeps/arm/dl-machine.h: Fix typo.

	* sysdeps/unix/sysv/sysv4/solaris2/sigpending.c: New file.
	* sysdeps/unix/sysv/sysv4/solaris2/sigstack.c: New file.
	* sysdeps/unix/sysv/sysv4/solaris2/sigwaitinfo.c: New file.
	* sysdeps/unix/sysv/sysv4/solaris2/syscalls.list: Add sigaltstack,
	sigpending, sigqueue, and sigtimedwait.
	* sysdeps/unix/sysv/sysv4/solaris2/sparc/sparc32/syscall.S: New file.

	* timezone/leapseconds: Update from tzdata1998f.

1998-07-18  Mark Kettenis  <kettenis@phys.uva.nl>

	* stdio/stdio.h [__USE_GNU]: Add prototype for fputs_unlocked.
	* stdio/Versions [GLIBC_2.1]: Add fputs_unlocked.
	* libio/stdio.h: Fix typo.

1998-07-19  Roland McGrath  <roland@baalperazim.frob.com>

	* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_start): #if 0 out the
	magic memobj port arg parsing stuff.  Fix it someday when we are ready
	to really use it.
	(_dl_sysdep_output): New function, modified from _dl_sysdep_error.
	(_dl_sysdep_error, _dl_sysdep_message, _dl_sysdep_fatal): Removed.

1998-07-19  Roland McGrath  <roland@baalperazim.frob.com>

	* stdio/fputs.c: Add fputs_unlocked as weak alias for fputs.

1998-07-19  Roland McGrath  <roland@baalperazim.frob.com>

	* sysdeps/posix/sigsuspend.c: Define __sigsuspend with sigsuspend as
	a weak alias.
	* sysdeps/mach/hurd/sigsuspend.c: Likewise.
	* sysdeps/generic/sigsuspend.c: Likewise.

1998-07-19  Roland McGrath  <roland@baalperazim.frob.com>

	* sysdeps/mach/hurd/i386/sigcontextinfo.h: New file.

1998-07-19  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makerules (map-file): Don't use $(wildcard) to find the
	generated version script, instead look in $(version-maps).
	($(common-objpfx)libc.so): Only depend on libc.map if versioning
	is used.
	* extra-lib.mk ($(objpfx)$(lib).so): Only depend on version script
	if versioning is used.  Don't use $(wildcard) to find the
	generated version script, instead look in $(verson-maps).

1998-07-17  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/generic/segfault.c: Rename GET_EIP to GET_PC.  Remove
	unused function handle.
	* sysdeps/generic/sigcontextinfo.h: Rename GET_EIP to GET_PC.
	* sysdeps/unix/sysv/linux/i386/sigcontextinfo.h: Likewise.
	* debug/catchsegv.sh: Fix argument processing, quoting and various
	typos.  Put the crash info always in the current directory.  Find
	program in $PATH if it contains no directory component.
	* Makerules (install-lib.so-versioned,
	install-lib.so-unversioned): New variables.
	(install-lib-nosubdir): Depend on unversioned libs in
	slibdir, not libdir.

1998-07-19  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Make-dist (+tsrcs): Remove references to %-map variables and
	*.map files.  Add Versions in subdirs.
	* Makerules (distinfo-vars): Don't write out %-map variables.

1998-07-20 13:55  Ulrich Drepper  <drepper@cygnus.com>

	* inet/protocols/rwhod.h: Remove definition of _PATH_RWHODIR.
	Include <paths.h> instead.
	* sysdeps/generic/paths.h: Define _PATH_RWHODIR.
	* sysdeps/unix/sysv/linux/paths.h: Likewise.
	Reported by Dale Scheetz <dwarf@polaris.net>.

1998-07-17 21:44  Ulrich Drepper  <drepper@cygnus.com>

	* catgets/open_catalog.c: Strictly check whether catalog file is
	larger enough for the data.  Reported by Andries.Brouwer@cwi.nl.
This commit is contained in:
Ulrich Drepper 1998-07-20 17:25:48 +00:00
parent 8f1c9b09f9
commit a9ddb79305
36 changed files with 556 additions and 234 deletions

101
ChangeLog
View File

@ -1,3 +1,104 @@
1998-07-20 17:09 Ulrich Drepper <drepper@cygnus.com>
* shlib-versions: Remove definition for libSegFault.
* memory.texi: Comment out the relocating allocator description.
* manual/signal.texi: Remove reference to relocating allocator.
* manual/top-menu.texi: Regenerated.
* posix/fnmatch.c: Implement [: :] and change to recognize
^ as negation only when not _POSIXLY_CORRECT.
* sysdeps/generic/glob.c: Add several optimizations.
* posix/glob.h: Undefine __PMT to prevent warnings.
Reported by Roland McGrath.
* posix/regex.c: Define namespace macros only for _LIBC.
* sysdeps/arm/dl-machine.h: Fix typo.
* sysdeps/unix/sysv/sysv4/solaris2/sigpending.c: New file.
* sysdeps/unix/sysv/sysv4/solaris2/sigstack.c: New file.
* sysdeps/unix/sysv/sysv4/solaris2/sigwaitinfo.c: New file.
* sysdeps/unix/sysv/sysv4/solaris2/syscalls.list: Add sigaltstack,
sigpending, sigqueue, and sigtimedwait.
* sysdeps/unix/sysv/sysv4/solaris2/sparc/sparc32/syscall.S: New file.
* timezone/leapseconds: Update from tzdata1998f.
1998-07-18 Mark Kettenis <kettenis@phys.uva.nl>
* stdio/stdio.h [__USE_GNU]: Add prototype for fputs_unlocked.
* stdio/Versions [GLIBC_2.1]: Add fputs_unlocked.
* libio/stdio.h: Fix typo.
1998-07-19 Roland McGrath <roland@baalperazim.frob.com>
* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_start): #if 0 out the
magic memobj port arg parsing stuff. Fix it someday when we are ready
to really use it.
(_dl_sysdep_output): New function, modified from _dl_sysdep_error.
(_dl_sysdep_error, _dl_sysdep_message, _dl_sysdep_fatal): Removed.
1998-07-19 Roland McGrath <roland@baalperazim.frob.com>
* stdio/fputs.c: Add fputs_unlocked as weak alias for fputs.
1998-07-19 Roland McGrath <roland@baalperazim.frob.com>
* sysdeps/posix/sigsuspend.c: Define __sigsuspend with sigsuspend as
a weak alias.
* sysdeps/mach/hurd/sigsuspend.c: Likewise.
* sysdeps/generic/sigsuspend.c: Likewise.
1998-07-19 Roland McGrath <roland@baalperazim.frob.com>
* sysdeps/mach/hurd/i386/sigcontextinfo.h: New file.
1998-07-19 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Makerules (map-file): Don't use $(wildcard) to find the
generated version script, instead look in $(version-maps).
($(common-objpfx)libc.so): Only depend on libc.map if versioning
is used.
* extra-lib.mk ($(objpfx)$(lib).so): Only depend on version script
if versioning is used. Don't use $(wildcard) to find the
generated version script, instead look in $(verson-maps).
1998-07-17 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/generic/segfault.c: Rename GET_EIP to GET_PC. Remove
unused function handle.
* sysdeps/generic/sigcontextinfo.h: Rename GET_EIP to GET_PC.
* sysdeps/unix/sysv/linux/i386/sigcontextinfo.h: Likewise.
* debug/catchsegv.sh: Fix argument processing, quoting and various
typos. Put the crash info always in the current directory. Find
program in $PATH if it contains no directory component.
* Makerules (install-lib.so-versioned,
install-lib.so-unversioned): New variables.
(install-lib-nosubdir): Depend on unversioned libs in
slibdir, not libdir.
1998-07-19 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Make-dist (+tsrcs): Remove references to %-map variables and
*.map files. Add Versions in subdirs.
* Makerules (distinfo-vars): Don't write out %-map variables.
1998-07-20 13:55 Ulrich Drepper <drepper@cygnus.com>
* inet/protocols/rwhod.h: Remove definition of _PATH_RWHODIR.
Include <paths.h> instead.
* sysdeps/generic/paths.h: Define _PATH_RWHODIR.
* sysdeps/unix/sysv/linux/paths.h: Likewise.
Reported by Dale Scheetz <dwarf@polaris.net>.
1998-07-17 21:44 Ulrich Drepper <drepper@cygnus.com>
* catgets/open_catalog.c: Strictly check whether catalog file is
larger enough for the data. Reported by Andries.Brouwer@cwi.nl.
1998-07-17 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/m68k/sigcontextinfo.h: New file.

2
FAQ.in
View File

@ -826,7 +826,7 @@ new type.
{UD,AJ} On Linux, the use of kernel headers is reduced to the minimum. This
gives Linus the ability to change the headers more freely. Also, user
programs are not insulated from changes in the size of kernel data
programs are now insulated from changes in the size of kernel data
structures.
For example, the sigset_t type is 32 or 64 bits wide in the kernel. In

View File

@ -122,8 +122,7 @@ sources := $(filter-out $(addsuffix .c,$(basename $(.S.s))),$(sources)) $(.S.s)
$(+subdir-nodist) $(dont_distribute)
foo:=$(shell echo '+out=$(+out)' >&2; echo foofoo >&2)
+tsrcs := $(filter-out $(+out), $(sources) $(all-headers) $(distribute)) \
$(foreach l,$(extra-libs),$($l-map)) \
$(wildcard $(addsuffix .map,$(extra-libs))) $(+sysdeps)
$(+sysdeps)
foo:=$(shell echo 'made +tsrcs=$(+tsrcs)'>&2)
foo:=$(shell echo generated='$(generated)' >&2)
#generated := $(sort $(generated) $(generated:.S=.c) $(generated:.s=.c))
@ -149,7 +148,7 @@ ifdef subdir
foo:=$(shell echo subdir foo >&2)
+tsrcs := Makefile $(+tsrcs) \
+tsrcs := Makefile $(wildcard Versions) $(+tsrcs) \
$(addsuffix .c,$(others) $(tests) $(tests-static) $(test-srcs)) \
$(wildcard $(addsuffix .input,$(tests) (tests-static) $(test-srcs)) \
$(addsuffix .args,$(tests) $(tests-static) $(test-srcs)))

View File

@ -350,8 +350,9 @@ ifeq (yes,$(build-shared))
# Reference map file only when versioning is selected and a map file name
# is given.
ifeq ($(versioning),yes)
map-file = $(firstword $(wildcard $($(@F:.so=-map)) \
$(common-objpfx)$(@F:.so=.map)))
map-file = $(firstword $($(@F:.so=-map)) \
$(addprefix $(common-objpfx), \
$(filter $(@F:.so=.map),$(version-maps))))
load-map-file = $(map-file:%=-Wl,--version-script=%)
endif
@ -370,8 +371,7 @@ $(LINK.o) -shared -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS) \
$(LDFLAGS.so) $(LDFLAGS-$(@F:lib%.so=%).so) \
-L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
-Wl,--whole-archive \
$(filter-out $(map-file) $(common-objpfx)$(@F:.so=.map) \
$(+preinit) $(+postinit),$^) \
$(filter-out $(map-file) $(+preinit) $(+postinit),$^) \
$(no-whole-archive) $(LDLIBS-$(@F:lib%.so=%).so)
endef
@ -411,9 +411,11 @@ $(common-objpfx)libc_pic.os: $(common-objpfx)libc_pic.a
$(common-objpfx)libc.so: $(elfobjdir)/soinit.os \
$(common-objpfx)libc_pic.os \
$(elfobjdir)/sofini.os \
$(elfobjdir)/interp.os $(elfobjdir)/ld.so \
$(common-objpfx)libc.map
$(elfobjdir)/interp.os $(elfobjdir)/ld.so
$(build-shlib)
ifeq ($(versioning),yes)
$(common-objpfx)libc.so: $(common-objpfx)libc.map
endif
common-generated += libc.so libc_pic.os
ifdef libc.so-version
$(common-objpfx)libc.so$(libc.so-version): $(common-objpfx)libc.so
@ -615,17 +617,22 @@ endef
install-lib.so := $(filter %.so,$(install-lib:%_pic.a=%.so))
install-lib := $(filter-out %.so %_pic.a,$(install-lib))
ifeq (yes,$(build-shared))
install-lib-nosubdir: $(install-lib.so:%=$(inst_libdir)/%)
# Find which .so's have versions.
versioned := $(strip $(foreach so,$(install-lib.so),\
$(patsubst %,$(so),$($(so)-version))))
install-lib.so-versioned := $(filter $(versioned), $(install-lib.so))
install-lib.so-unversioned := $(filter-out $(versioned), $(install-lib.so))
install-lib-nosubdir: $(install-lib.so-versioned:%=$(inst_libdir)/%) \
$(install-lib.so-unversioned:%=$(inst_slibdir)/%)
# Install all the unversioned shared libraries.
$(addprefix $(inst_slibdir)/, $(filter-out $(versioned),$(install-lib.so))): \
$(inst_slibdir)/%.so: $(objpfx)%.so $(+force); $(do-install-program)
$(install-lib.so-unversioned:%=$(inst_slibdir)/%): $(inst_slibdir)/%.so: \
$(objpfx)%.so $(+force)
$(do-install-program)
ifneq ($(findstring -s,$(LN_S)),)
define make-link
@ -954,7 +961,7 @@ echo > $@.new 'subdir := $(subdir)'
$(foreach var,subdir-dirs sources elided-routines sysdep_routines \
headers sysdep_headers distribute dont_distribute generated \
others tests test-srcs extra-libs $(extra-libs:%=%-routines) \
tests-static $(extra-libs:%=%-map) versioned \
tests-static versioned \
$(addprefix install-,lib lib.so data bin sbin others),
echo >> $@.new '$(subdir)-$(var) := $($(var))'
echo >> $@.new '$(var) = $$($(subdir)-$(var))')

View File

@ -19,9 +19,14 @@
# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
if test $# -eq 0; then
echo "$0: missing programm name" >&2
echo "Try \`$0 --help' for more information." >&2
exit 1
fi
prog="$1"
shift
args="$*"
if test $# -eq 0; then
case "$prog" in
@ -45,31 +50,43 @@ Written by Ulrich Drepper.'
esac
fi
LD_PRELOAD="${LD_PRELOAD:+${LD_PRELOAD}:}@SLIB@/libSegFault.so@SOVER@"
export LD_PRELOAD
SEGFAULT_USE_ALTSTACK=1
export SEGFAULT_USE_ALTSTACK
SEGFAULT_OUTPUT_NAME="${TMPDIR:-/tmp}/`basename $prog`.segv.$$"
export SEGFAULT_OUTPUT_NAME
segv_output=`basename "$prog"`.segv.$$
$prog $args
LD_PRELOAD=${LD_PRELOAD:+${LD_PRELOAD}:}@SLIB@/libSegFault.so \
SEGFAULT_USE_ALTSTACK=1 \
SEGFAULT_OUTPUT_NAME=$segv_output \
"$prog" ${1+"$@"}
exval=$?
unset LD_PRELOAD
# Check for an segmentation error.
if test $exval -eq 139; then
# Check for a segmentation error.
if test $exval -eq 139 && test -f "$segv_output"; then
# We caught a segmentation error. The output is in the file with the
# name we have in SEGFAULT_OUTPUT_NAME. In the output the names of
# functions in shared objects are available, but names in the static
# part of the program are not. We use addr2line to get this information.
case $prog in
*/*) ;;
*)
old_IFS=$IFS
IFS=:
for p in $PATH; do
test -n "$p" || p=.
if test -f "$p/$prog"; then
prog=$p/$prog
break
fi
done
IFS=$old_IFS
;;
esac
(read line; echo "$line"
read line; echo "$line"
while read line; do
case "$line" in
[*) addr="`echo $line | sed 's/^\[\(.*\)\]$/\1/'`"
complete="`addr2line -f -e $prog $addr 2>/dev/null`"
if test $? -eq 0; then
echo "`echo $complete|sed 's/\(.*\) \(.*\)/\2(\1)/;'`$line"
[*) addr=`echo $line | sed 's/^\[\(.*\)\]$/\1/'`
complete=`addr2line -f -e "$prog" $addr 2>/dev/null`
if test $? -eq 0; then
echo "`echo "$complete"|sed 'N;s/\(.*\)\n\(.*\)/\2(\1)/;'`$line"
else
echo "$line"
fi
@ -77,8 +94,8 @@ if test $exval -eq 139; then
*) echo "$line"
;;
esac
done) < $SEGFAULT_OUTPUT_NAME
rm $SEGFAULT_OUTPUT_NAME
done) < "$segv_output"
rm -f "$segv_output"
fi
exit $exval

View File

@ -49,7 +49,12 @@ endef
object-suffixes-left = $(object-suffixes-$(lib))
include $(patsubst %,$(..)o-iterator.mk,$(object-suffixes-$(lib)))
ifeq ($(versioning),yes)
# Add the version script to the dependencies of the shared library.
$(objpfx)$(lib).so: $(firstword $(wildcard $($(lib)-map) $(lib).map $(..)$(lib).map))
$(objpfx)$(lib).so: $(firstword $($(lib)-map) \
$(addprefix $(common-objpfx), \
$(filter $(lib).map, \
$(version-maps))))
endif
endif

View File

@ -65,6 +65,7 @@ struct whod {
#define WHODVERSION 1
#define WHODTYPE_STATUS 1 /* host status */
#define _PATH_RWHODIR "/var/rwho"
/* We used to define _PATH_RWHOD here but it's now in <paths.h>. */
#include <paths.h>
#endif /* protocols/rwhod.h */

View File

@ -518,10 +518,11 @@ extern int fputs __P ((__const char *__restrict __s,
FILE *__restrict __stream));
#ifdef __USE_GNU
/* This function does the same as `fgets' but does not lock the stream. */
/* This function does the same as `fputs' but does not lock the stream. */
extern int fputs_unlocked __P ((__const char *__restrict __s,
FILE *__restrict __stream));
#endif
/* Write a string, followed by a newline, to stdout. */
extern int puts __P ((__const char *__s));

View File

@ -38,8 +38,6 @@ will be freed automatically. @xref{Variable Size Automatic}.
* Variable Size Automatic:: Allocation of variable-sized blocks
of automatic storage that are freed when the
calling function returns.
* Relocating Allocator:: Waste less memory, if you can tolerate
automatic relocation of the blocks you get.
@end menu
@node Memory Concepts
@ -2030,7 +2028,8 @@ within one function, exiting a scope in which a variable-sized array was
declared frees all blocks allocated with @code{alloca} during the
execution of that scope.
@ignore
@c This was never actually implemented. -zw
@node Relocating Allocator
@section Relocating Allocator
@ -2040,10 +2039,10 @@ space it uses is more than the amount the program asks for. The
@dfn{relocating memory allocator} achieves very low overhead by moving
blocks in memory as necessary, on its own initiative.
@menu
* Relocator Concepts:: How to understand relocating allocation.
* Using Relocator:: Functions for relocating allocation.
@end menu
@c @menu
@c * Relocator Concepts:: How to understand relocating allocation.
@c * Using Relocator:: Functions for relocating allocation.
@c @end menu
@node Relocator Concepts
@subsection Concepts of Relocating Allocation
@ -2085,7 +2084,7 @@ extensions.
@comment malloc.h
@comment GNU
@deftypefun {void *} r_alloc (void **@var{handleptr}, size_t @var{size})
@c @deftypefun {void *} r_alloc (void **@var{handleptr}, size_t @var{size})
This function allocates a relocatable block of size @var{size}. It
stores the block's address in @code{*@var{handleptr}} and returns
a non-null pointer to indicate success.
@ -2096,7 +2095,7 @@ in @code{*@var{handleptr}}, and returns a null pointer.
@comment malloc.h
@comment GNU
@deftypefun void r_alloc_free (void **@var{handleptr})
@c @deftypefun void r_alloc_free (void **@var{handleptr})
This function is the way to free a relocatable block. It frees the
block that @code{*@var{handleptr}} points to, and stores a null pointer
in @code{*@var{handleptr}} to show it doesn't point to an allocated
@ -2105,7 +2104,7 @@ block any more.
@comment malloc.h
@comment GNU
@deftypefun {void *} r_re_alloc (void **@var{handleptr}, size_t @var{size})
@c @deftypefun {void *} r_re_alloc (void **@var{handleptr}, size_t @var{size})
The function @code{r_re_alloc} adjusts the size of the block that
@code{*@var{handleptr}} points to, making it @var{size} bytes long. It
stores the address of the resized block in @code{*@var{handleptr}} and
@ -2114,6 +2113,7 @@ returns a non-null pointer to indicate success.
If enough memory is not available, this function returns a null pointer
and does not modify @code{*@var{handleptr}}.
@end deftypefun
@end ignore
@ignore
@comment No longer available...

View File

@ -1900,8 +1900,11 @@ handlers. The obstack allocation functions are safe as long as you
don't use the same obstack both inside and outside of a signal handler.
@end ignore
@ignore
@comment Once we have r_alloc again add this paragraph.
The relocating allocation functions (@pxref{Relocating Allocator})
are certainly not safe to use in a signal handler.
@end ignore
@item
Any function that modifies @code{errno} is non-reentrant, but you can

View File

@ -116,8 +116,6 @@ Memory Allocation
* Variable Size Automatic:: Allocation of variable-sized blocks
of automatic storage that are freed when the
calling function returns.
* Relocating Allocator:: Waste less memory, if you can tolerate
automatic relocation of the blocks you get.
Unconstrained Allocation
@ -176,11 +174,6 @@ Variable Size Automatic
method of allocating dynamically and
freeing automatically.
Relocating Allocator
* Relocator Concepts:: How to understand relocating allocation.
* Using Relocator:: Functions for relocating allocation.
Character Handling
* Classification of Characters:: Testing whether characters are

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992, 1993, 1996, 1997 Free Software Foundation, Inc.
/* Copyright (C) 1991, 92, 93, 96, 97, 98 Free Software Foundation, Inc.
This file is part of the GNU C Library.
This library is free software; you can redistribute it and/or
@ -29,6 +29,23 @@
#include <fnmatch.h>
#include <ctype.h>
#if HAVE_STRING_H
# include <string.h>
#else
# include <strings.h>
#endif
#ifdef STDC_HEADERS
# include <stdlib.h>
#endif
/* For platform which support the ISO C amendement 1 functionality we
support user defined character classes. */
#if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
# include <wchar.h>
# include <wctype.h>
#endif
/* Comment out all this code if we are using the GNU C Library, and are not
actually compiling the library itself. This code is part of the GNU C
@ -47,8 +64,64 @@
# define ISASCII(c) isascii(c)
# endif
# define ISUPPER(c) (ISASCII (c) && isupper (c))
#ifdef isblank
# define ISBLANK(c) (ISASCII (c) && isblank (c))
#else
# define ISBLANK(c) ((c) == ' ' || (c) == '\t')
#endif
#ifdef isgraph
# define ISGRAPH(c) (ISASCII (c) && isgraph (c))
#else
# define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
#endif
#define ISPRINT(c) (ISASCII (c) && isprint (c))
#define ISDIGIT(c) (ISASCII (c) && isdigit (c))
#define ISALNUM(c) (ISASCII (c) && isalnum (c))
#define ISALPHA(c) (ISASCII (c) && isalpha (c))
#define ISCNTRL(c) (ISASCII (c) && iscntrl (c))
#define ISLOWER(c) (ISASCII (c) && islower (c))
#define ISPUNCT(c) (ISASCII (c) && ispunct (c))
#define ISSPACE(c) (ISASCII (c) && isspace (c))
#define ISUPPER(c) (ISASCII (c) && isupper (c))
#define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))
# define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
/* The GNU C library provides support for user-defined character classes
and the functions from ISO C amendement 1. */
# ifdef CHARCLASS_NAME_MAX
# define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
# else
/* This shouldn't happen but some implementation might still have this
problem. Use a reasonable default value. */
# define CHAR_CLASS_MAX_LENGTH 256
# endif
# ifdef _LIBC
# define IS_CHAR_CLASS(string) __wctype (string)
# else
# define IS_CHAR_CLASS(string) wctype (string)
# endif
# else
# define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */
# define IS_CHAR_CLASS(string) \
(STREQ (string, "alpha") || STREQ (string, "upper") \
|| STREQ (string, "lower") || STREQ (string, "digit") \
|| STREQ (string, "alnum") || STREQ (string, "xdigit") \
|| STREQ (string, "space") || STREQ (string, "print") \
|| STREQ (string, "punct") || STREQ (string, "graph") \
|| STREQ (string, "cntrl") || STREQ (string, "blank"))
# endif
/* Avoid depending on library functions or files
whose names are inconsistent. */
# if !defined _LIBC && !defined getenv
extern char *getenv ();
# endif
# ifndef errno
extern int errno;
@ -66,7 +139,11 @@ fnmatch (pattern, string, flags)
register char c;
/* Note that this evaluates C many times. */
# define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER (c) ? tolower (c) : (c))
# ifdef _LIBC
# define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c))
# else
# define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER (c) ? tolower (c) : (c))
# endif
while ((c = *p++) != '\0')
{
@ -137,67 +214,104 @@ fnmatch (pattern, string, flags)
case '[':
{
/* Nonzero if the sense of the character class is inverted. */
static int posixly_correct;
register int not;
if (posixly_correct == 0)
posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1;
if (*n == '\0')
return FNM_NOMATCH;
if ((flags & FNM_PERIOD) && *n == '.' &&
if (*n == '.' && (flags & FNM_PERIOD) &&
(n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/')))
return FNM_NOMATCH;
not = (*p == '!' || *p == '^');
not = (*p == '!' || (posixly_correct < 0 && *p == '^'));
if (not)
++p;
c = *p++;
for (;;)
{
register char cstart = c, cend = c;
int fn = FOLD (*n);
if (!(flags & FNM_NOESCAPE) && c == '\\')
{
if (*p == '\0')
return FNM_NOMATCH;
cstart = cend = *p++;
c = FOLD (*p++);
if (c == fn)
goto matched;
}
else if (c == '[' && *p == ':')
{
/* Leave room for the null. */
char str[CHAR_CLASS_MAX_LENGTH + 1];
size_t c1 = 0;
# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
wctype_t wt;
# endif
cstart = cend = FOLD (cstart);
for (;;)
{
if (c1 == CHAR_CLASS_MAX_LENGTH)
/* The name is too long and therefore the pattern
is ill-formed. */
return FNM_NOMATCH;
if (c == '\0')
c = *++p;
if (c == ':' && p[1] == ']')
{
p += 2;
break;
}
str[c1++] = 'c';
}
str[c1] = '\0';
# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
wt = IS_CHAR_CLASS (str);
if (wt == 0)
/* Invalid character class name. */
return FNM_NOMATCH;
if (__iswctype (__btowc (*n), wt))
goto matched;
# else
if ((STREQ (str, "alnum") && ISALNUM (*n))
|| (STREQ (str, "alpha") && ISALPHA (*n))
|| (STREQ (str, "blank") && ISBLANK (*n))
|| (STREQ (str, "cntrl") && ISCNTRL (*n))
|| (STREQ (str, "digit") && ISDIGIT (*n))
|| (STREQ (str, "graph") && ISGRAPH (*n))
|| (STREQ (str, "lower") && ISLOWER (*n))
|| (STREQ (str, "print") && ISPRINT (*n))
|| (STREQ (str, "punct") && ISPUNCT (*n))
|| (STREQ (str, "space") && ISSPACE (*n))
|| (STREQ (str, "upper") && ISUPPER (*n))
|| (STREQ (str, "xdigit") && ISXDIGIT (*n)))
goto matched;
# endif
}
else if (c == '\0')
/* [ (unterminated) loses. */
return FNM_NOMATCH;
else if (FOLD (c) == fn)
goto matched;
c = *p++;
c = FOLD (c);
if ((flags & FNM_FILE_NAME) && c == '/')
/* [/] can never match. */
return FNM_NOMATCH;
if (c == '-' && *p != ']')
{
cend = *p++;
if (!(flags & FNM_NOESCAPE) && cend == '\\')
cend = *p++;
if (cend == '\0')
return FNM_NOMATCH;
cend = FOLD (cend);
c = *p++;
}
if (FOLD (*n) >= cstart && FOLD (*n) <= cend)
goto matched;
if (c == ']')
break;
}
if (!not)
return FNM_NOMATCH;
break;
matched:;
matched:
/* Skip the rest of the [...] that already matched. */
while (c != ']')
{
@ -213,6 +327,15 @@ fnmatch (pattern, string, flags)
/* XXX 1003.2d11 is unclear if this is right. */
++p;
}
else if (c == '[' && *p == ':')
{
do
if (*++p == '\0')
return FNM_NOMATCH;
while (*p != ':' || p[1] == ']');
p += 2;
c = *p;
}
}
if (not)
return FNM_NOMATCH;

View File

@ -25,6 +25,7 @@ extern "C" {
#undef __ptr_t
#if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32
# undef __P
# undef __PMT
# define __P(protos) protos
# define __PMT(protos) protos
# define __ptr_t void *
@ -34,6 +35,7 @@ extern "C" {
# endif
#else /* Not C++ or ANSI C. */
# undef __P
# undef __PMT
# define __P(protos) ()
# define __PMT(protos) ()
# undef __const

View File

@ -52,7 +52,9 @@
/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
# include <wchar.h>
# include <wctype.h>
#endif
#ifdef _LIBC
/* We have to keep the namespace clean. */
# define regfree(preg) __regfree (preg)
# define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef)

View File

@ -82,6 +82,3 @@ alpha.*-.*-linux.* libBrokenLocale=1.1
# The real-time library from POSIX.1b.
.*-.*-.* librt=1
# Preloading modules.
.*-.*-.* libSegFault=1

View File

@ -53,7 +53,8 @@ libc {
# f*
feof_unlocked; ferror_unlocked; fflush_unlocked; fgets_unlocked;
fileno_unlocked; fputc_unlocked; fread_unlocked; fwrite_unlocked;
fileno_unlocked; fputc_unlocked; fputs_unlocked;
fread_unlocked; fwrite_unlocked;
# g*
getc_unlocked; getchar_unlocked;

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992, 1997 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1992, 1997, 1998 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
@ -32,3 +32,4 @@ fputs (const char *s, FILE *stream)
return EOF;
return 0;
}
weak_alias (fputs, fputs_unlocked)

View File

@ -684,6 +684,13 @@ getline (char **__lineptr, size_t *__n, FILE *__stream)
/* Write a string to STREAM. */
extern int fputs __P ((__const char *__restrict __s,
FILE *__restrict __stream));
#ifdef __USE_GNU
/* This function does the same as `fputs' but does not lock the stream. */
extern int fputs_unlocked __P ((__const char *__restrict __s,
FILE *__restrict __stream));
#endif
/* Write a string, followed by a newline, to stdout. */
extern int puts __P ((__const char *__s));

View File

@ -313,7 +313,7 @@ _dl_start_user:
/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */
#define ELF_MACHINE_JMP_SLOT R_ARM_JUMP_SLOT
/* The i386 never uses Elf32_Rela relocations. */
/* The ARM never uses Elf32_Rela relocations. */
#define ELF_MACHINE_NO_RELA 1
/* We define an initialization functions. This is called very early in

View File

@ -797,10 +797,10 @@ glob (pattern, flags, errfunc, pglob)
int i;
struct stat st;
for (i = oldcount; i < pglob->gl_pathc; ++i)
if (((flags & GLOB_ALTDIRFUNC) ?
(*pglob->gl_stat) (pglob->gl_pathv[i], &st) :
__stat (pglob->gl_pathv[i], &st)) == 0 &&
S_ISDIR (st.st_mode))
if (((flags & GLOB_ALTDIRFUNC)
? (*pglob->gl_stat) (pglob->gl_pathv[i], &st)
: __stat (pglob->gl_pathv[i], &st)) == 0
&& S_ISDIR (st.st_mode))
{
size_t len = strlen (pglob->gl_pathv[i]) + 2;
char *new = realloc (pglob->gl_pathv[i], len);
@ -958,7 +958,7 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob)
int (*errfunc) __P ((const char *, int));
glob_t *pglob;
{
__ptr_t stream;
__ptr_t stream = NULL;
struct globlink
{
@ -970,92 +970,127 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob)
int meta;
int save;
stream = ((flags & GLOB_ALTDIRFUNC) ?
(*pglob->gl_opendir) (directory) :
(__ptr_t) opendir (directory));
if (stream == NULL)
meta = __glob_pattern_p (pattern, !(flags & GLOB_NOESCAPE));
if (meta == 0)
{
if ((errfunc != NULL && (*errfunc) (directory, errno)) ||
(flags & GLOB_ERR))
return GLOB_ABORTED;
if (flags & (GLOB_NOCHECK|GLOB_NOMAGIC))
/* We need not do any tests. The PATTERN contains no meta
characters and we must not return an error therefore the
result will always contain exactly the one name. */
flags |= GLOB_NOCHECK;
else
{
/* Since we use the normal file functions we can also use stat()
to verify the file is there. */
struct stat st;
size_t patlen = strlen (pattern);
size_t dirlen = strlen (directory);
char *fullname = __alloca (dirlen + 1 + patlen + 1);
# ifdef HAVE_MEMPCPY
mempcpy (mempcpy (mempcpy (fullname, directory, dirlen),
"/", 1),
pattern, patlen + 1);
# else
memcpy (fullname, directory, dirlen);
fullname[dirlen] = '/';
memcpy (&fullname[dirlen + 1], pattern, patlen + 1);
# endif
if (((flags & GLOB_ALTDIRFUNC)
? (*pglob->gl_stat) (fullname, &st)
: __stat (fullname, &st)) == 0)
/* We found this file to be existing. No tell the rest
of the function to copy this name into the result. */
flags |= GLOB_NOCHECK;
}
nfound = 0;
meta = 0;
}
else if (pattern[0] == '\0')
{
/* This is a special case for matching directories like in
"*a/". */
names = (struct globlink *) __alloca (sizeof (struct globlink));
names->name = (char *) malloc (1);
if (names->name == NULL)
goto memory_error;
names->name[0] = '\0';
names->next = NULL;
nfound = 1;
meta = 0;
}
else
{
nfound = 0;
meta = __glob_pattern_p (pattern, !(flags & GLOB_NOESCAPE));
if(meta)
flags |= GLOB_MAGCHAR;
while (1)
if (pattern[0] == '\0')
{
const char *name;
size_t len;
struct dirent *d = ((flags & GLOB_ALTDIRFUNC) ?
(*pglob->gl_readdir) (stream) :
readdir ((DIR *) stream));
if (d == NULL)
break;
if (! REAL_DIR_ENTRY (d))
continue;
/* This is a special case for matching directories like in
"*a/". */
names = (struct globlink *) __alloca (sizeof (struct globlink));
names->name = (char *) malloc (1);
if (names->name == NULL)
goto memory_error;
names->name[0] = '\0';
names->next = NULL;
nfound = 1;
meta = 0;
}
else
{
stream = ((flags & GLOB_ALTDIRFUNC)
? (*pglob->gl_opendir) (directory)
: (__ptr_t) opendir (directory));
if (stream == NULL)
{
if ((errfunc != NULL && (*errfunc) (directory, errno))
|| (flags & GLOB_ERR))
return GLOB_ABORTED;
nfound = 0;
meta = 0;
}
else
{
int fnm_flags = ((!(flags & GLOB_PERIOD) ? FNM_PERIOD : 0)
| ((flags & GLOB_NOESCAPE) ? FNM_NOESCAPE : 0)
#if defined _AMIGA || defined VMS
| FNM_CASEFOLD
#endif
);
nfound = 0;
flags |= GLOB_MAGCHAR;
while (1)
{
const char *name;
size_t len;
struct dirent *d = ((flags & GLOB_ALTDIRFUNC)
? (*pglob->gl_readdir) (stream)
: readdir ((DIR *) stream));
if (d == NULL)
break;
if (! REAL_DIR_ENTRY (d))
continue;
#ifdef HAVE_D_TYPE
/* If we shall match only directories use the information
provided by the dirent call if possible. */
if ((flags & GLOB_ONLYDIR)
&& d->d_type != DT_UNKNOWN && d->d_type != DT_DIR)
continue;
/* If we shall match only directories use the information
provided by the dirent call if possible. */
if ((flags & GLOB_ONLYDIR)
&& d->d_type != DT_UNKNOWN && d->d_type != DT_DIR)
continue;
#endif
name = d->d_name;
name = d->d_name;
if ((!meta && strcmp (pattern, name) == 0)
|| fnmatch (pattern, name,
(!(flags & GLOB_PERIOD) ? FNM_PERIOD : 0) |
((flags & GLOB_NOESCAPE) ? FNM_NOESCAPE : 0)
#if defined _AMIGA || defined VMS
| FNM_CASEFOLD
#endif
) == 0)
{
struct globlink *new
= (struct globlink *) __alloca (sizeof (struct globlink));
len = NAMLEN (d);
new->name = (char *) malloc (len + 1);
if (new->name == NULL)
goto memory_error;
if (fnmatch (pattern, name, fnm_flags) == 0)
{
struct globlink *new = (struct globlink *)
__alloca (sizeof (struct globlink));
len = NAMLEN (d);
new->name = (char *) malloc (len + 1);
if (new->name == NULL)
goto memory_error;
#ifdef HAVE_MEMPCPY
*((char *) mempcpy ((__ptr_t) new->name, name, len)) = '\0';
*((char *) mempcpy ((__ptr_t) new->name, name, len))
= '\0';
#else
memcpy ((__ptr_t) new->name, name, len);
new->name[len] = '\0';
memcpy ((__ptr_t) new->name, name, len);
new->name[len] = '\0';
#endif
new->next = names;
names = new;
++nfound;
if (!meta)
break;
new->next = names;
names = new;
++nfound;
}
}
}
}
}
if (nfound == 0 && (flags & GLOB_NOMAGIC) && !meta)
flags |= GLOB_NOCHECK;
if (nfound == 0 && (flags & GLOB_NOCHECK))
{
size_t len = strlen (pattern);
@ -1096,10 +1131,11 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob)
}
save = errno;
if (flags & GLOB_ALTDIRFUNC)
(*pglob->gl_closedir) (stream);
else
closedir ((DIR *) stream);
if (stream != NULL)
if (flags & GLOB_ALTDIRFUNC)
(*pglob->gl_closedir) (stream);
else
closedir ((DIR *) stream);
__set_errno (save);
return nfound == 0 ? GLOB_NOMATCH : 0;

View File

@ -57,6 +57,7 @@
#define _PATH_MOUNTED "/var/run/mtab"
#define _PATH_NOLOGIN "/etc/nologin"
#define _PATH_PRESERVE "/var/preserve"
#define _PATH_RWHODIR "/var/rwho"
#define _PATH_SENDMAIL "/usr/sbin/sendmail"
#define _PATH_SHADOW "/etc/shadow"
#define _PATH_SHELLS "/etc/shells"

View File

@ -63,12 +63,6 @@ struct layout
};
static void
handle (int fd, void *addr)
{
}
/* This function is called when a segmentation fault is caught. The system
is in an instable state now. This means especially that malloc() might
not work anymore. */
@ -115,7 +109,7 @@ catch_segfault (int signal, SIGCONTEXT ctx)
arr = alloca (cnt * sizeof (void *));
/* First handle the program counter from the structure. */
arr[0] = GET_EIP (ctx);
arr[0] = GET_PC (ctx);
current = (struct layout *) top_frame;
cnt = 1;

View File

@ -19,6 +19,6 @@
/* In general we cannot provide any information. */
#define SIGCONTEXT struct sigcontext *
#define GET_EIP(ctx) ((void *) 0)
#define GET_PC(ctx) ((void *) 0)
#define GET_FRAME(ctx) ((void *) 0)
#define GET_STACK(ctx) ((void *) 0)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1995, 1996, 1997, 1998 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
@ -23,13 +23,14 @@
/* Change the set of blocked signals to SET,
wait until a signal arrives, and restore the set of blocked signals. */
int
sigsuspend (set)
__sigsuspend (set)
const sigset_t *set;
{
__set_errno (ENOSYS);
return -1;
}
weak_alias (__sigsuspend, sigsuspend)
stub_warning (sigsuspend)
stub_warning (__sigsuspend)
#include <stub-tag.h>

View File

@ -122,6 +122,7 @@ _dl_sysdep_start (void **start_argptr,
unfmh(); /* XXX */
#if 0 /* XXX make this work for real someday... */
if (_dl_hurd_data->user_entry == (vm_address_t) &ENTRY_POINT)
/* We were invoked as a command, not as the program interpreter.
The generic ld.so code supports this: it will parse the args
@ -166,6 +167,7 @@ unfmh(); /* XXX */
can be retrieved by the program later. */
l->l_info[DT_NULL] = (void *) memobj;
}
#endif
/* Call elf/rtld.c's main program. It will set everything
up and leave us to transfer control to USER_ENTRY. */
@ -643,11 +645,14 @@ _dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz,
return result;
}
void weak_function
_dl_sysdep_fatal (const char *msg, ...)
_dl_sysdep_output (int fd, const char *msg, ...)
{
va_list ap;
assert(fd < _hurd_init_dtablesize);
va_start (ap, msg);
do
{
@ -655,55 +660,7 @@ _dl_sysdep_fatal (const char *msg, ...)
mach_msg_type_number_t nwrote;
do
{
if (__io_write (_hurd_init_dtable[2], msg, len, -1, &nwrote))
break;
len -= nwrote;
msg += nwrote;
} while (nwrote > 0);
msg = va_arg (ap, const char *);
} while (msg);
va_end (ap);
_exit (127);
}
void weak_function
_dl_sysdep_error (const char *msg, ...)
{
va_list ap;
va_start (ap, msg);
do
{
size_t len = strlen (msg);
mach_msg_type_number_t nwrote;
do
{
if (__io_write (_hurd_init_dtable[2], msg, len, -1, &nwrote))
break;
len -= nwrote;
msg += nwrote;
} while (nwrote > 0);
msg = va_arg (ap, const char *);
} while (msg);
va_end (ap);
}
void weak_function
_dl_sysdep_message (const char *msg, ...)
{
va_list ap;
va_start (ap, msg);
do
{
size_t len = strlen (msg);
mach_msg_type_number_t nwrote;
do
{
if (__io_write (_hurd_init_dtable[1], msg, len, -1, &nwrote))
if (__io_write (_hurd_init_dtable[fd], msg, len, -1, &nwrote))
break;
len -= nwrote;
msg += nwrote;

View File

@ -0,0 +1,22 @@
/* Copyright (C) 1998 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. */
#define SIGCONTEXT struct sigcontext
#define GET_PC(ctx) ((void *) (ctx).sc_eip)
#define GET_FRAME(ctx) ((void *) (ctx).sc_ebp)
#define GET_STACK(ctx) ((void *) (ctx).sc_uesp)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 92, 93, 94, 95, 96, 97 Free Software Foundation, Inc.
/* Copyright (C) 1991,92,93,94,95,96,97,98 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
@ -23,9 +23,8 @@
/* Change the set of blocked signals to SET,
wait until a signal arrives, and restore the set of blocked signals. */
/* XXX should be __sigsuspend ? */
int
sigsuspend (set)
__sigsuspend (set)
const sigset_t *set;
{
struct hurd_sigstate *ss;
@ -80,3 +79,4 @@ sigsuspend (set)
errno = EINTR;
return -1;
}
weak_alias (__sigsuspend, sigsuspend)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1996, 1997 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1996, 1997, 1998 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
@ -25,7 +25,7 @@
/* Change the set of blocked signals to SET,
wait until a signal arrives, and restore the set of blocked signals. */
int
sigsuspend (set)
__sigsuspend (set)
const sigset_t *set;
{
sigset_t oset;
@ -49,3 +49,4 @@ sigsuspend (set)
__set_errno (save);
return -1;
}
weak_alias (__sigsuspend, sigsuspend)

View File

@ -18,6 +18,6 @@
Boston, MA 02111-1307, USA. */
#define SIGCONTEXT struct sigcontext
#define GET_EIP(ctx) ((void *) ctx.eip)
#define GET_PC(ctx) ((void *) ctx.eip)
#define GET_FRAME(ctx) ((void *) ctx.ebp)
#define GET_STACK(ctx) ((void *) ctx.esp_at_signal)

View File

@ -58,6 +58,7 @@
#define _PATH_MOUNTED "/etc/mtab"
#define _PATH_NOLOGIN "/etc/nologin"
#define _PATH_PRESERVE "/var/preserve"
#define _PATH_RWHODIR "/var/spool/rwho"
#define _PATH_SENDMAIL "/usr/sbin/sendmail"
#define _PATH_SHADOW "/etc/shadow"
#define _PATH_SHELLS "/etc/shells"

View File

@ -0,0 +1,37 @@
/* Copyright (C) 1998 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 <errno.h>
#include <stddef.h>
#include <signal.h>
extern int __syscall_sigpending (int subcode, sigset_t *set);
/* Store in SET all signals that are blocked and pending. */
int
sigpending (sigset_t *set)
{
if (set == NULL)
{
__set_errno (EINVAL);
return -1;
}
return __syscall_sigpending (1, set);
}

View File

@ -0,0 +1,3 @@
/* We can reuse the Linux implementation with some tricks. */
#define __NR_sigaltstack 1
#include <sysdeps/unix/sysv/linux/sigstack.c>

View File

@ -0,0 +1,2 @@
/* We can reuse the Linux implementation. */
#include <sysdeps/unix/sysv/linux/sigwaitinfo.h>

View File

@ -0,0 +1,2 @@
/* Bets are that the Linux code works... */
#include <sysdeps/unix/sysv/linux/sparc/sparc32/syscall.S>

View File

@ -1,3 +1,7 @@
# File name Caller Syscall name # args Strong name Weak names
sigaction - sigaction 3 __sigaction sigaction
sigaltstack - sigaltstack 2 sigaltstack
sigpending - sigpending 2 __syscall_sigpending
sigqueue - sigqueue 3 __sigqueue sigqueue
sigtimedwait - sigtimedwait 3 __sigtimedwait sigtime

View File

@ -1,4 +1,4 @@
# @(#)leapseconds 7.10
# @(#)leapseconds 7.11
# Allowance for leapseconds added to each timezone file.
@ -41,3 +41,4 @@ Leap 1993 Jun 30 23:59:60 + S
Leap 1994 Jun 30 23:59:60 + S
Leap 1995 Dec 31 23:59:60 + S
Leap 1997 Jun 30 23:59:60 + S
Leap 1998 Dec 31 23:59:60 + S