aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog101
-rw-r--r--FAQ.in2
-rw-r--r--Make-dist5
-rw-r--r--Makerules31
-rwxr-xr-xdebug/catchsegv.sh51
-rw-r--r--extra-lib.mk7
-rw-r--r--inet/protocols/rwhod.h3
-rw-r--r--libio/stdio.h3
-rw-r--r--manual/memory.texi20
-rw-r--r--manual/signal.texi3
-rw-r--r--manual/top-menu.texi7
-rw-r--r--posix/fnmatch.c183
-rw-r--r--posix/glob.h2
-rw-r--r--posix/regex.c2
-rw-r--r--shlib-versions3
-rw-r--r--stdio/Versions3
-rw-r--r--stdio/fputs.c3
-rw-r--r--stdio/stdio.h7
-rw-r--r--sysdeps/arm/dl-machine.h2
-rw-r--r--sysdeps/generic/glob.c190
-rw-r--r--sysdeps/generic/paths.h1
-rw-r--r--sysdeps/generic/segfault.c8
-rw-r--r--sysdeps/generic/sigcontextinfo.h2
-rw-r--r--sysdeps/generic/sigsuspend.c7
-rw-r--r--sysdeps/mach/hurd/dl-sysdep.c53
-rw-r--r--sysdeps/mach/hurd/i386/sigcontextinfo.h22
-rw-r--r--sysdeps/mach/hurd/sigsuspend.c6
-rw-r--r--sysdeps/posix/sigsuspend.c5
-rw-r--r--sysdeps/unix/sysv/linux/i386/sigcontextinfo.h2
-rw-r--r--sysdeps/unix/sysv/linux/paths.h1
-rw-r--r--sysdeps/unix/sysv/sysv4/solaris2/sigpending.c37
-rw-r--r--sysdeps/unix/sysv/sysv4/solaris2/sigstack.c3
-rw-r--r--sysdeps/unix/sysv/sysv4/solaris2/sigwaitinfo.c2
-rw-r--r--sysdeps/unix/sysv/sysv4/solaris2/sparc/sparc32/syscall.S2
-rw-r--r--sysdeps/unix/sysv/sysv4/solaris2/syscalls.list4
-rw-r--r--timezone/leapseconds3
36 files changed, 554 insertions, 232 deletions
diff --git a/ChangeLog b/ChangeLog
index fe9d421..c6b8fbd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/FAQ.in b/FAQ.in
index 3f6aa3a..eeeb2f5 100644
--- a/FAQ.in
+++ b/FAQ.in
@@ -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
diff --git a/Make-dist b/Make-dist
index 9f9531d..ed1dec4 100644
--- a/Make-dist
+++ b/Make-dist
@@ -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)))
diff --git a/Makerules b/Makerules
index 9bf62c6..ec6b12c 100644
--- a/Makerules
+++ b/Makerules
@@ -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)/%)
+ifeq (yes,$(build-shared))
# 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))')
diff --git a/debug/catchsegv.sh b/debug/catchsegv.sh
index 26407a7..48c447b 100755
--- a/debug/catchsegv.sh
+++ b/debug/catchsegv.sh
@@ -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
diff --git a/extra-lib.mk b/extra-lib.mk
index 0b79d4a..87d4fa3 100644
--- a/extra-lib.mk
+++ b/extra-lib.mk
@@ -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
diff --git a/inet/protocols/rwhod.h b/inet/protocols/rwhod.h
index e5d9f99..ad790fc 100644
--- a/inet/protocols/rwhod.h
+++ b/inet/protocols/rwhod.h
@@ -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 */
diff --git a/libio/stdio.h b/libio/stdio.h
index 87ca35b..a3ae40b 100644
--- a/libio/stdio.h
+++ b/libio/stdio.h
@@ -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));
diff --git a/manual/memory.texi b/manual/memory.texi
index b87bc3f..a3cf372 100644
--- a/manual/memory.texi
+++ b/manual/memory.texi
@@ -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...
diff --git a/manual/signal.texi b/manual/signal.texi
index 029485c..b3f67b6 100644
--- a/manual/signal.texi
+++ b/manual/signal.texi
@@ -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
diff --git a/manual/top-menu.texi b/manual/top-menu.texi
index 6ff8bd6..05a8ed6 100644
--- a/manual/top-menu.texi
+++ b/manual/top-menu.texi
@@ -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
diff --git a/posix/fnmatch.c b/posix/fnmatch.c
index e143743..4f5c667 100644
--- a/posix/fnmatch.c
+++ b/posix/fnmatch.c
@@ -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;
+
+ 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 (c == '\0')
+ 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;
diff --git a/posix/glob.h b/posix/glob.h
index 5a8e48c..91d9549 100644
--- a/posix/glob.h
+++ b/posix/glob.h
@@ -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
diff --git a/posix/regex.c b/posix/regex.c
index 3868da3..62c41c1 100644
--- a/posix/regex.c
+++ b/posix/regex.c
@@ -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)
diff --git a/shlib-versions b/shlib-versions
index eccb027..2745152 100644
--- a/shlib-versions
+++ b/shlib-versions
@@ -82,6 +82,3 @@ alpha.*-.*-linux.* libBrokenLocale=1.1
# The real-time library from POSIX.1b.
.*-.*-.* librt=1
-
-# Preloading modules.
-.*-.*-.* libSegFault=1
diff --git a/stdio/Versions b/stdio/Versions
index e3df076..9700ba6 100644
--- a/stdio/Versions
+++ b/stdio/Versions
@@ -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;
diff --git a/stdio/fputs.c b/stdio/fputs.c
index 16406bb..8e5e725 100644
--- a/stdio/fputs.c
+++ b/stdio/fputs.c
@@ -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)
diff --git a/stdio/stdio.h b/stdio/stdio.h
index eac8bd4..7594f13 100644
--- a/stdio/stdio.h
+++ b/stdio/stdio.h
@@ -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));
diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h
index e6a686e..7612285 100644
--- a/sysdeps/arm/dl-machine.h
+++ b/sysdeps/arm/dl-machine.h
@@ -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
diff --git a/sysdeps/generic/glob.c b/sysdeps/generic/glob.c
index 70d125c..9182c05 100644
--- a/sysdeps/generic/glob.c
+++ b/sysdeps/generic/glob.c
@@ -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;
diff --git a/sysdeps/generic/paths.h b/sysdeps/generic/paths.h
index 3e6053a..59e00c8 100644
--- a/sysdeps/generic/paths.h
+++ b/sysdeps/generic/paths.h
@@ -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"
diff --git a/sysdeps/generic/segfault.c b/sysdeps/generic/segfault.c
index 868ff1d..6504123 100644
--- a/sysdeps/generic/segfault.c
+++ b/sysdeps/generic/segfault.c
@@ -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;
diff --git a/sysdeps/generic/sigcontextinfo.h b/sysdeps/generic/sigcontextinfo.h
index 014db66..9623599 100644
--- a/sysdeps/generic/sigcontextinfo.h
+++ b/sysdeps/generic/sigcontextinfo.h
@@ -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)
diff --git a/sysdeps/generic/sigsuspend.c b/sysdeps/generic/sigsuspend.c
index 15166acf..17650c7 100644
--- a/sysdeps/generic/sigsuspend.c
+++ b/sysdeps/generic/sigsuspend.c
@@ -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>
diff --git a/sysdeps/mach/hurd/dl-sysdep.c b/sysdeps/mach/hurd/dl-sysdep.c
index 44049ce..8edde69 100644
--- a/sysdeps/mach/hurd/dl-sysdep.c
+++ b/sysdeps/mach/hurd/dl-sysdep.c
@@ -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,58 +645,13 @@ _dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz,
return result;
}
-void weak_function
-_dl_sysdep_fatal (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);
-
- _exit (127);
-}
-
void weak_function
-_dl_sysdep_error (const char *msg, ...)
+_dl_sysdep_output (int fd, 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;
+ assert(fd < _hurd_init_dtablesize);
va_start (ap, msg);
do
@@ -703,7 +660,7 @@ _dl_sysdep_message (const char *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;
diff --git a/sysdeps/mach/hurd/i386/sigcontextinfo.h b/sysdeps/mach/hurd/i386/sigcontextinfo.h
new file mode 100644
index 0000000..6dd80f2
--- /dev/null
+++ b/sysdeps/mach/hurd/i386/sigcontextinfo.h
@@ -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)
diff --git a/sysdeps/mach/hurd/sigsuspend.c b/sysdeps/mach/hurd/sigsuspend.c
index ec78495..58f1417 100644
--- a/sysdeps/mach/hurd/sigsuspend.c
+++ b/sysdeps/mach/hurd/sigsuspend.c
@@ -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)
diff --git a/sysdeps/posix/sigsuspend.c b/sysdeps/posix/sigsuspend.c
index db7899b..914340d 100644
--- a/sysdeps/posix/sigsuspend.c
+++ b/sysdeps/posix/sigsuspend.c
@@ -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)
diff --git a/sysdeps/unix/sysv/linux/i386/sigcontextinfo.h b/sysdeps/unix/sysv/linux/i386/sigcontextinfo.h
index b9913a4..6560b94 100644
--- a/sysdeps/unix/sysv/linux/i386/sigcontextinfo.h
+++ b/sysdeps/unix/sysv/linux/i386/sigcontextinfo.h
@@ -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)
diff --git a/sysdeps/unix/sysv/linux/paths.h b/sysdeps/unix/sysv/linux/paths.h
index cb5b571..c0a4940 100644
--- a/sysdeps/unix/sysv/linux/paths.h
+++ b/sysdeps/unix/sysv/linux/paths.h
@@ -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"
diff --git a/sysdeps/unix/sysv/sysv4/solaris2/sigpending.c b/sysdeps/unix/sysv/sysv4/solaris2/sigpending.c
new file mode 100644
index 0000000..4e1ce0e
--- /dev/null
+++ b/sysdeps/unix/sysv/sysv4/solaris2/sigpending.c
@@ -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);
+}
diff --git a/sysdeps/unix/sysv/sysv4/solaris2/sigstack.c b/sysdeps/unix/sysv/sysv4/solaris2/sigstack.c
new file mode 100644
index 0000000..5aa73c8
--- /dev/null
+++ b/sysdeps/unix/sysv/sysv4/solaris2/sigstack.c
@@ -0,0 +1,3 @@
+/* We can reuse the Linux implementation with some tricks. */
+#define __NR_sigaltstack 1
+#include <sysdeps/unix/sysv/linux/sigstack.c>
diff --git a/sysdeps/unix/sysv/sysv4/solaris2/sigwaitinfo.c b/sysdeps/unix/sysv/sysv4/solaris2/sigwaitinfo.c
new file mode 100644
index 0000000..026e611
--- /dev/null
+++ b/sysdeps/unix/sysv/sysv4/solaris2/sigwaitinfo.c
@@ -0,0 +1,2 @@
+/* We can reuse the Linux implementation. */
+#include <sysdeps/unix/sysv/linux/sigwaitinfo.h>
diff --git a/sysdeps/unix/sysv/sysv4/solaris2/sparc/sparc32/syscall.S b/sysdeps/unix/sysv/sysv4/solaris2/sparc/sparc32/syscall.S
new file mode 100644
index 0000000..b9f2996
--- /dev/null
+++ b/sysdeps/unix/sysv/sysv4/solaris2/sparc/sparc32/syscall.S
@@ -0,0 +1,2 @@
+/* Bets are that the Linux code works... */
+#include <sysdeps/unix/sysv/linux/sparc/sparc32/syscall.S>
diff --git a/sysdeps/unix/sysv/sysv4/solaris2/syscalls.list b/sysdeps/unix/sysv/sysv4/solaris2/syscalls.list
index 5206363..092d869 100644
--- a/sysdeps/unix/sysv/sysv4/solaris2/syscalls.list
+++ b/sysdeps/unix/sysv/sysv4/solaris2/syscalls.list
@@ -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
diff --git a/timezone/leapseconds b/timezone/leapseconds
index 903da5a..1cd114b 100644
--- a/timezone/leapseconds
+++ b/timezone/leapseconds
@@ -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