summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog111
-rw-r--r--Makefile3
-rw-r--r--Makerules2
-rw-r--r--PROJECTS4
-rw-r--r--aliases.h1
-rw-r--r--config.make.in1
-rwxr-xr-xconfigure150
-rw-r--r--configure.in10
-rw-r--r--inet/Makefile12
-rw-r--r--inet/aliases.h61
-rw-r--r--inet/getaliasent.c26
-rw-r--r--inet/getaliasent_r.c29
-rw-r--r--inet/getaliasname.c30
-rw-r--r--inet/getaliasname_r.c29
-rw-r--r--inet/getnetgrent_r.c4
-rw-r--r--locale/programs/ld-collate.c2
-rw-r--r--manual/arith.texi8
-rw-r--r--manual/creature.texi7
-rw-r--r--manual/users.texi28
-rw-r--r--nss/Makefile8
-rw-r--r--nss/alias-lookup.c22
-rw-r--r--nss/databases.def32
-rw-r--r--nss/getXXbyYY.c72
-rw-r--r--nss/getXXbyYY_r.c2
-rw-r--r--nss/getXXent.c71
-rw-r--r--nss/getXXent_r.c2
-rw-r--r--nss/nss_db/db-XXX.c32
-rw-r--r--nss/nss_db/db-alias.c235
-rw-r--r--nss/nss_files/files-XXX.c120
-rw-r--r--nss/nss_files/files-alias.c424
-rw-r--r--nss/nss_files/files-parse.c42
-rw-r--r--posix/unistd.h2
-rw-r--r--resolv/Banner2
-rw-r--r--resolv/inet_net_pton.c18
-rw-r--r--resolv/res_debug.c2
-rw-r--r--sysdeps/generic/sigset.h6
-rw-r--r--sysdeps/posix/Makefile2
-rw-r--r--sysdeps/stub/lockfile.c2
-rw-r--r--sysdeps/unix/Makefile3
-rw-r--r--sysdeps/unix/sysv/linux/m68k/syscall.S5
-rw-r--r--sysdeps/unix/sysv/linux/m68k/sysdep.h5
-rw-r--r--time/strftime.c28
42 files changed, 1397 insertions, 258 deletions
diff --git a/ChangeLog b/ChangeLog
index 03ce8f6a4e..224069f631 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,110 @@
+Thu Nov 14 02:00:33 1996 Ulrich Drepper <drepper@cygnus.com>
+
+ * inet/Makefile (headers): Add aliases.h.
+ (routines): Add getaliasent_r, getaliasent, getaliasname, and
+ getaliasname_r.
+ * aliases.h: New file.
+ * inet/aliases.h: New file.
+ * inet/getaliasent.c: New file.
+ * inet/getaliasent_r.c: New file.
+ * inet/getaliasname.c: New file.
+ * inet/getaliasname_r.c: New file.
+ * nss/Makefile (databases): Add alias.
+ * nss/alias-lookup.c: New file.
+ * nss/databases.def: Add aliases and publickey.
+ * nss/nss_db/db-alias.c: New file.
+ * nss/nss_files/files-alias.c: New file.
+
+ * inet/getnetgrent_r.c (__internal_getnetgrent): Buffer length
+ argument to lookup function is of type size_t.
+ (innetgr): Likewise.
+ * nss/getXXbyYY_r.c: Likewise.
+ * nss/getXXent_r.c: Likewise.
+ * nss/nss_db/db-XXX.c: Likewise.
+
+ * nss/getXXbyYY.c: Don't provide static buffer. Resize if call
+ failed because buffer was too small.
+ * nss/getXXent.c: Likewise.
+
+ * nss/nss_files/files-XXX.c: Correct handling of shared file. The
+ getXXent_r function now uses f[gs]etpos to get to the correct
+ position.
+
+ * nss/nss_files/files-parse.c: Indent lines for better readability.
+
+ * malloc/obstack.c: Add new variable obstack_alloc_failed_handler
+ and new function print_and_abort. Remove all references to
+ alloc_failed field.
+ Add new function _obstack_memory_used.
+ * malloc/obstack.h (struct obstack): Remove field alloc_field.
+ Remove all references to alloc_failed field.
+ Add prototype for _obstack_memory_used.
+
+ * posix/unistd.h: Correct typo.
+
+Wed Nov 13 03:09:16 1996 Ulrich Drepper <drepper@cygnus.com>
+
+ * configure.in: Require at least autoconf-2.10.2.
+
+Tue Nov 12 03:35:01 1996 Christian von Roques <roques@pond.sub.org>
+
+ * malloc/obstack.h: Add new macro `obstack_make_room'.
+ * malloc/obstack.c: Add function implementation for
+ `obstack_make_room'.
+
+Mon Nov 11 13:54:04 1996 Ulrich Drepper <drepper@cygnus.com>
+
+ Update to BIND-4.9.5-REL.
+ * resolv/Banner: Set to 4.9.5-REL.
+ * resolv/inet_net_pton.c: Was doing bad things to subnets and b'casts.
+ * resolv/res_debug.c (__fp_nquery): Could read past end of buffer.
+ (fix from BIND 8.1)
+
+ * config.make.in: Add definition for top_absdir.
+ * Makerules (make-link): Fix path to rellns-sh script.
+
+Sat Nov 9 02:15:24 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * posix/unistd.h: Fix comment.
+
+ * manual/arith.texi: Fix misspellings. Use `zero', not `null',
+ when talking about numbers.
+ * manual/users.texi: Likewise.
+ * manual/creature.texi: Likewise. Use @defvarx for a secondary
+ description header.
+
+Sat Nov 9 19:25:11 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * sysdeps/posix/Makefile ($(common-objpfx)mk-stdiolim): Depend on
+ the real posix1_lim.h file so that it works in all subdirs, not
+ only in posix.
+
+Sat Nov 9 02:08:34 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * Makefile ($(includedir)/gnu/lib-names.h): Quote arguments of tr.
+
+Sat Nov 9 02:06:17 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * sysdeps/unix/Makefile ($(common-objpfx)s-proto.d): Don't depend
+ on $(before-compile) which hasn't been properly setup yet at this
+ point.
+
+Sat Nov 9 02:02:48 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * sysdeps/generic/sigset.h: Don't use implicit int which will
+ probably require a diagnostic in the next revision of the C
+ standard.
+ * sysdeps/stub/lockfile.c: Likewise.
+
+Sat Nov 9 01:57:17 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * sysdeps/unix/sysv/linux/m68k/syscall.S: Correct last change.
+ * sysdeps/unix/sysv/linux/m68k/sysdep.h: Likewise.
+
+Mon Nov 11 02:53:14 1996 Ulrich Drepper <drepper@cygnus.com>
+
+ * time/strftime.c: Update copyright. Small cosmetic changes.
+
Sun Nov 10 23:28:16 1996 Ulrich Drepper <drepper@cygnus.com>
* inet/getprtname_r.c: Reformat copyright.
@@ -396,9 +503,9 @@ Sun Nov 3 17:29:06 1996 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/stub/mktemp.c: Likewise.
* sysvipc/sys/ipc.h: Prototypes of ftok have to be of types `const
- char *' and `int'.
+ char *' and `int'.
* sysvipc/ftok.c: Likewise. Make sure only lower 8 bits of
- PROJ_ID are used.
+ PROJ_ID are used.
Sun Nov 3 03:21:28 1996 Heiko Schroeder <Heiko.Schroeder@post.rwth-aachen.de>
diff --git a/Makefile b/Makefile
index ac32185440..4b9dac757f 100644
--- a/Makefile
+++ b/Makefile
@@ -188,7 +188,8 @@ $(includedir)/gnu/lib-names.h: $(common-objpfx)soversions.mk
echo; \
(libs='$(all-sonames)';\
for l in $$libs; do \
- upname=`echo $$l | sed 's/[.]so.*//' | tr [:lower:]- [:upper:]_`; \
+ upname=`echo $$l | sed 's/[.]so.*//' | \
+ tr '[:lower:]-' '[:upper:]_'`; \
echo "#define $${upname}_SO $$l"; \
done;) | sort; \
echo; \
diff --git a/Makerules b/Makerules
index b7c95526b3..d1ac04f2aa 100644
--- a/Makerules
+++ b/Makerules
@@ -605,7 +605,7 @@ rm -f $(@F).new; \
if test '$(@D)' = '$(<D)'; then \
$(LN_S) $(<F) $(@F).new; \
else \
- $(SHELL) $(common-objpfx)$(..)rellns-sh $< $(@F).new; \
+ $(SHELL) $(top_absdir)/rellns-sh $< $(@F).new; \
fi; \
mv -f $(@F).new $(@F)
endef
diff --git a/PROJECTS b/PROJECTS
index 9f9d3bed33..fb3897c7d3 100644
--- a/PROJECTS
+++ b/PROJECTS
@@ -87,8 +87,8 @@ contact <bug-glibc@prep.ai.mit.edu>
duplicated work.
-[11] Write access function for netmasks, bootparams, publickey, automount,
- and aliases databases for nss_files and nss_db module.
+[11] Write access function for netmasks, bootparams, and automount
+ databases for nss_files and nss_db module.
The functions should be embedded in the nss scheme. This is not
hard and not all services must be supported at once.
diff --git a/aliases.h b/aliases.h
new file mode 100644
index 0000000000..cfe459d02d
--- /dev/null
+++ b/aliases.h
@@ -0,0 +1 @@
+#include <inet/aliases.h>
diff --git a/config.make.in b/config.make.in
index c52910ea85..d457b802f9 100644
--- a/config.make.in
+++ b/config.make.in
@@ -3,6 +3,7 @@
# Don't edit this file. Put configuration parameters in configparms instead.
# Installation prefixes.
+top_absdir = @top_absdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
diff --git a/configure b/configure
index dcbdebcc52..14ca8e2c8e 100755
--- a/configure
+++ b/configure
@@ -2,7 +2,7 @@
# From configure.in CVSid
# Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.10
+# Generated automatically using autoconf version 2.10.3
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
#
# This configure script is free software; the Free Software Foundation
@@ -355,7 +355,7 @@ EOF
verbose=yes ;;
-version | --version | --versio | --versi | --vers)
- echo "configure generated by autoconf version 2.10"
+ echo "configure generated by autoconf version 2.10.3"
exit 0 ;;
-with-* | --with-*)
@@ -550,6 +550,10 @@ fi
# This will get text that should go into config.make.
config_vars=
+# We need a variable with the absolute path to the toplevel build directory.
+top_absdir=`cd $srcdir; pwd`
+
+
# Check for a --with-gmp argument and set gmp-srcdir in config.make.
# Check whether --with-gmp or --without-gmp was given.
if test "${with_gmp+set}" = set; then
@@ -682,7 +686,6 @@ done
if test -z "$ac_aux_dir"; then
{ echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
fi
-ac_config_mkinstalldirs=$ac_aux_dir/mkinstalldirs
ac_config_guess=$ac_aux_dir/config.guess
ac_config_sub=$ac_aux_dir/config.sub
ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
@@ -703,6 +706,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
+echo "configure:710: checking host system type" >&5
host_alias=$host
case "$host_alias" in
@@ -768,6 +772,7 @@ esac
# This can take a while to compute.
sysdep_dir=$srcdir/sysdeps
echo $ac_n "checking sysdep dirs""... $ac_c" 1>&6
+echo "configure:776: checking sysdep dirs" >&5
# Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1.
os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`"
@@ -968,6 +973,7 @@ echo "$ac_t""sysdeps/generic sysdeps/stub" 1>&6
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:977: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -1010,21 +1016,18 @@ fi
fi
echo "$ac_t""$INSTALL" 1>&6
-# The purpose of this command is only to make sure the auxiliary path
-# is set and that the symbol AC_REQUIRE_AC_PROG_MKINSTALLDIRS is set.
-
-
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-if test "$INSTALL" = "${srcdir}/install-sh"; then
+if test "$INSTALL" = "${srcdir}/install-sh -c"; then
# The makefiles need to use a different form to find it in $srcdir.
- INSTALL='$(..)./install-sh'
+ INSTALL="$top_absdir/install-sh -c"
fi
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
+echo "configure:1031: checking whether ln -s works" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1049,6 +1052,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1056: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_MSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1079,6 +1083,7 @@ test -n "$MSGFMT" || MSGFMT=":"
echo $ac_n "checking build system type""... $ac_c" 1>&6
+echo "configure:1087: checking build system type" >&5
build_alias=$build
case "$build_alias" in
@@ -1104,6 +1109,7 @@ fi
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1113: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1135,6 +1141,7 @@ if test $host != $build; then
# Extract the first word of "gcc cc", so it can be a program name with args.
set dummy gcc cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1145: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_BUILD_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1161,6 +1168,7 @@ fi
fi
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:1172: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -1175,33 +1183,37 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 1179 "configure"
+#line 1187 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1185: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1193: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
:
else
echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 1194 "configure"
+#line 1204 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1200: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1210: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
:
else
echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
rm -rf conftest*
CPP=/lib/cpp
fi
@@ -1219,6 +1231,7 @@ echo "$ac_t""$CPP" 1>&6
# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
set dummy ${ac_tool_prefix}ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1235: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1249,6 +1262,7 @@ fi
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1266: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1279,6 +1293,7 @@ if test -n "$ac_tool_prefix"; then
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1297: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1311,6 +1326,7 @@ fi
echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6
+echo "configure:1330: checking for signed size_t type" >&5
if eval "test \"`echo '$''{'libc_cv_signed_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1334,19 +1350,19 @@ EOF
fi
echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6
+echo "configure:1354: checking for libc-friendly stddef.h" >&5
if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1342 "configure"
+#line 1359 "configure"
#include "confdefs.h"
#define __need_size_t
#define __need_wchar_t
#include <stddef.h>
#define __need_NULL
#include <stddef.h>
-int main() { return 0; }
-int t() {
+int main() {
size_t size; wchar_t wchar;
#ifdef offsetof
#error stddef.h ignored __need_*
@@ -1354,10 +1370,12 @@ size_t size; wchar_t wchar;
if (&size == NULL || &wchar == NULL) abort ();
; return 0; }
EOF
-if { (eval echo configure:1358: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1374: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libc_cv_friendly_stddef=yes
else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
rm -rf conftest*
libc_cv_friendly_stddef=no
fi
@@ -1372,6 +1390,7 @@ override stddef.h = # The installed <stddef.h> seems to be libc-friendly."
fi
echo $ac_n "checking whether we need to use -P to assemble .S files""... $ac_c" 1>&6
+echo "configure:1394: checking whether we need to use -P to assemble .S files" >&5
if eval "test \"`echo '$''{'libc_cv_need_minus_P'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1394,6 +1413,7 @@ asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives."
fi
echo $ac_n "checking for assembler global-symbol directive""... $ac_c" 1>&6
+echo "configure:1417: checking for assembler global-symbol directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_global_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1423,6 +1443,7 @@ EOF
fi
echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6
+echo "configure:1447: checking for .set assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_set_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1457,24 +1478,26 @@ fi
if test $elf != yes; then
echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
+echo "configure:1482: checking for .init and .fini sections" >&5
if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1465 "configure"
+#line 1487 "configure"
#include "confdefs.h"
-int main() { return 0; }
-int t() {
+int main() {
asm (".section .init");
asm (".section .fini");
asm (".text");
; return 0; }
EOF
-if { (eval echo configure:1475: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1496: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libc_cv_have_initfini=yes
else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
rm -rf conftest*
libc_cv_have_initfini=no
fi
@@ -1495,22 +1518,24 @@ if test $elf = yes; then
libc_cv_asm_underscores=no
else
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
+echo "configure:1522: checking for _ prefix on C symbol names" >&5
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1503 "configure"
+#line 1527 "configure"
#include "confdefs.h"
asm ("_glibc_foobar:");
-int main() { return 0; }
-int t() {
+int main() {
glibc_foobar ();
; return 0; }
EOF
-if { (eval echo configure:1511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:1534: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
libc_cv_asm_underscores=yes
else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
rm -rf conftest*
libc_cv_asm_underscores=no
fi
@@ -1533,6 +1558,7 @@ if test $elf = yes; then
libc_cv_asm_weakext_directive=no
else
echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6
+echo "configure:1562: checking for assembler .weak directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1555,6 +1581,7 @@ echo "$ac_t""$libc_cv_asm_weak_directive" 1>&6
if test $libc_cv_asm_weak_directive = no; then
echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6
+echo "configure:1585: checking for assembler .weakext directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1591,6 +1618,7 @@ EOF
fi
echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
+echo "configure:1622: checking for ld --no-whole-archive" >&5
if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1601,7 +1629,7 @@ __throw () {}
EOF
if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -Wl,--no-whole-archive
- -o conftest conftest.c'; { (eval echo configure:1605: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+ -o conftest conftest.c'; { (eval echo configure:1633: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_ld_no_whole_archive=yes
else
libc_cv_ld_no_whole_archive=no
@@ -1612,6 +1640,7 @@ fi
echo "$ac_t""$libc_cv_ld_no_whole_archive" 1>&6
echo $ac_n "checking for gcc -fno-exceptions""... $ac_c" 1>&6
+echo "configure:1644: checking for gcc -fno-exceptions" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_no_exceptions'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1622,7 +1651,7 @@ __throw () {}
EOF
if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -fno-exceptions
- -o conftest conftest.c'; { (eval echo configure:1626: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+ -o conftest conftest.c'; { (eval echo configure:1655: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_no_exceptions=yes
else
libc_cv_gcc_no_exceptions=no
@@ -1674,6 +1703,7 @@ if test "$uname" = generic; then
fi
echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
+echo "configure:1707: checking OS release for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1695,6 +1725,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>&6
uname_release="$libc_cv_uname_release"
echo $ac_n "checking OS version for uname""... $ac_c" 1>&6
+echo "configure:1729: checking OS version for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1716,6 +1747,7 @@ else
fi
echo $ac_n "checking stdio selection""... $ac_c" 1>&6
+echo "configure:1751: checking stdio selection" >&5
case $stdio in
libio) cat >> confdefs.h <<\EOF
@@ -1782,8 +1814,9 @@ cat > confcache <<\EOF
EOF
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
+# HP-UX 10.01 sh prints single quotes around any value that contains spaces.
(set) 2>&1 |
- sed -n "s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=\${\1='\2'}/p" \
+sed -n "s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)='*\([^']*\)'*/\1=\${\1='\2'}/p"\
>> confcache
if cmp -s $cache_file confcache; then
:
@@ -1839,7 +1872,7 @@ do
echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-version | --version | --versio | --versi | --vers | --ver | --ve | --v)
- echo "$CONFIG_STATUS generated by autoconf version 2.10"
+ echo "$CONFIG_STATUS generated by autoconf version 2.10.3"
exit 0 ;;
-help | --help | --hel | --he | --h)
echo "\$ac_cs_usage"; exit 0 ;;
@@ -1880,6 +1913,7 @@ s%@includedir@%$includedir%g
s%@oldincludedir@%$oldincludedir%g
s%@infodir@%$infodir%g
s%@mandir@%$mandir%g
+s%@top_absdir@%$top_absdir%g
s%@subdirs@%$subdirs%g
s%@host@%$host%g
s%@host_alias@%$host_alias%g
@@ -1919,6 +1953,42 @@ s%@DEFINES@%$DEFINES%g
CEOF
EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_file=1 # Number of current file.
+ac_inc=90 # Lines per file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_inc # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+ else
+ sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+ fi
+ if test ! -s conftest.s$ac_file; then
+ ac_more_lines=false
+ rm -f conftest.s$ac_file
+ else
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f conftest.s$ac_file"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ fi
+ ac_file=`expr $ac_file + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_inc`
+ fi
+done
+if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+fi
+EOF
+
cat >> $CONFIG_STATUS <<EOF
CONFIG_FILES=\${CONFIG_FILES-"config.make ${config_makefile} ${config_uname}"}
@@ -1932,7 +2002,7 @@ for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
*) ac_file_in="${ac_file}.in" ;;
esac
- # Adjust relative srcdir, etc. for subdirectories.
+ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
# Remove last slash and all that follows it. Not all systems have dirname.
ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
@@ -1960,6 +2030,7 @@ for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
[/$]*) INSTALL="$ac_given_INSTALL" ;;
*) INSTALL="$ac_dots$ac_given_INSTALL" ;;
esac
+
echo creating "$ac_file"
rm -f "$ac_file"
configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
@@ -1973,9 +2044,9 @@ s%@configure_input@%$configure_input%g
s%@srcdir@%$srcdir%g
s%@top_srcdir@%$top_srcdir%g
s%@INSTALL@%$INSTALL%g
-" -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file
+" $ac_given_srcdir/$ac_file_in | eval "$ac_sed_cmds" > $ac_file
fi; done
-rm -f conftest.subs
+rm -f conftest.s*
# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
# NAME is the cpp macro being defined and VALUE is the value it is being given.
@@ -1996,7 +2067,13 @@ ac_eB='$%\1#\2define\3'
ac_eC=' '
ac_eD='%g'
-CONFIG_HEADERS=${CONFIG_HEADERS-"config.h"}
+if test -z "$CONFIG_HEADERS"; then
+EOF
+cat >> $CONFIG_STATUS <<EOF
+ CONFIG_HEADERS="config.h"
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+fi
for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
# Support "outfile[:infile]", defaulting infile="outfile.in".
case "$ac_file" in
@@ -2184,13 +2261,16 @@ if test "$no_recursion" != yes; then
ac_popdir=`pwd`
cd $ac_config_dir
+ # A "../" for each directory in /$ac_config_dir.
+ ac_dots=`echo $ac_config_dir|sed -e 's%^\./%%' -e 's%[^/]$%&/%' -e 's%[^/]*/%../%g'`
+
case "$srcdir" in
.) # No --srcdir option. We are building in place.
ac_sub_srcdir=$srcdir ;;
/*) # Absolute path.
ac_sub_srcdir=$srcdir/$ac_config_dir ;;
*) # Relative path.
- ac_sub_srcdir=../$srcdir/$ac_config_dir ;;
+ ac_sub_srcdir=$ac_dots$srcdir/$ac_config_dir ;;
esac
# Check for guested configure; otherwise get Cygnus style configure.
@@ -2207,8 +2287,6 @@ if test "$no_recursion" != yes; then
if test -n "$ac_sub_configure"; then
# Make the cache file name correct relative to the subdirectory.
- # A "../" for each directory in /$ac_config_dir.
- ac_dots=`echo $ac_config_dir|sed -e 's%^\./%%' -e 's%[^/]$%&/%' -e 's%[^/]*/%../%g'`
case "$cache_file" in
/*) ac_sub_cache_file=$cache_file ;;
*) # Relative path.
diff --git a/configure.in b/configure.in
index df0de5d648..aa272e41cd 100644
--- a/configure.in
+++ b/configure.in
@@ -1,12 +1,16 @@
Dnl Process this file with autoconf to produce a configure script.
AC_REVISION([$CVSid$])
-AC_PREREQ(2.10)dnl dnl Minimum Autoconf version required.
+AC_PREREQ(2.10.2)dnl dnl Minimum Autoconf version required.
AC_INIT(features.h)
AC_CONFIG_HEADER(config.h)
# This will get text that should go into config.make.
config_vars=
+# We need a variable with the absolute path to the toplevel build directory.
+top_absdir=`cd $srcdir; pwd`
+AC_SUBST(top_absdir)
+
# Check for a --with-gmp argument and set gmp-srcdir in config.make.
AC_ARG_WITH(gmp, dnl
--with-gmp=DIRECTORY find GMP source code in DIRECTORY (not needed),
@@ -330,9 +334,9 @@ AC_MSG_RESULT(sysdeps/generic sysdeps/stub)
### Locate tools.
AC_PROG_INSTALL
-if test "$INSTALL" = "${srcdir}/install-sh"; then
+if test "$INSTALL" = "${srcdir}/install-sh -c"; then
# The makefiles need to use a different form to find it in $srcdir.
- INSTALL='$(..)./install-sh'
+ INSTALL="$top_absdir/install-sh -c"
fi
AC_PROG_LN_S
AC_CHECK_PROGS(MSGFMT, msgfmt gmsgfmt, :)
diff --git a/inet/Makefile b/inet/Makefile
index c09db180f5..dd502110a8 100644
--- a/inet/Makefile
+++ b/inet/Makefile
@@ -12,9 +12,9 @@
# 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.
+# 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.
#
# Sub-makefile for inet portion of the library.
@@ -22,7 +22,8 @@
subdir := inet
headers := netinet/ether.h netinet/in.h netinet/if_ether.h \
- netinet/tcp.h $(wildcard arpa/*.h protocols/*.h)
+ netinet/tcp.h $(wildcard arpa/*.h protocols/*.h) \
+ aliases.h
distribute := netgroup.h
@@ -41,7 +42,8 @@ routines := ntohl ntohs htonl htons \
ether_aton ether_aton_r ether_hton ether_line \
ether_ntoa ether_ntoa_r ether_ntoh \
rcmd rexec ruserpass \
- getnetgrent_r getnetgrent
+ getnetgrent_r getnetgrent \
+ getaliasent_r getaliasent getaliasname getaliasname_r
# No warnings about losing BSD code.
override +gccwarn := -w
diff --git a/inet/aliases.h b/inet/aliases.h
new file mode 100644
index 0000000000..94895083b7
--- /dev/null
+++ b/inet/aliases.h
@@ -0,0 +1,61 @@
+/* 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 _ALIASES_H
+
+#define _ALIASES_H 1
+#include <features.h>
+
+#include <sys/types.h>
+
+
+/* Structure to represent one entry of the alias data base. */
+struct aliasent
+{
+ char *alias_name;
+ size_t alias_members_len;
+ char **alias_members;
+ int alias_local;
+};
+
+
+/* Open alias data base files. */
+extern void setaliasent __P ((void));
+
+/* Close alias data base files. */
+extern void endaliasent __P ((void));
+
+/* Get the next entry from the alias data base. */
+extern struct aliasent *getaliasent __P ((void));
+
+/* Get alias entry corresponding to NAME. */
+extern struct aliasent *getaliasbyname __P ((__const char *__name));
+
+#ifdef __USE_REENTRANT
+/* Reentrant versions of some of the functions above. */
+extern int getaliasent_r __P ((struct aliasent *__result_buf, char *__buffer,
+ size_t __buflen, struct aliasent **__result));
+
+extern int getaliasbyname_r __P ((__const char *__name,
+ struct aliasent *__result_buf,
+ char *__buffer, size_t __buflen,
+ struct aliasent **__result));
+#endif /* reentrant */
+
+
+#endif /* aliases.h */
diff --git a/inet/getaliasent.c b/inet/getaliasent.c
new file mode 100644
index 0000000000..dfdec5900c
--- /dev/null
+++ b/inet/getaliasent.c
@@ -0,0 +1,26 @@
+/* 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 <aliases.h>
+
+
+#define LOOKUP_TYPE struct aliasent
+#define GETFUNC_NAME getaliasent
+#define BUFLEN 1024
+
+#include "../nss/getXXent.c"
diff --git a/inet/getaliasent_r.c b/inet/getaliasent_r.c
new file mode 100644
index 0000000000..d03ba57d99
--- /dev/null
+++ b/inet/getaliasent_r.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+ 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 <aliases.h>
+
+
+#define LOOKUP_TYPE struct aliasent
+#define SETFUNC_NAME setaliasent
+#define GETFUNC_NAME getaliasent
+#define ENDFUNC_NAME endaliasent
+#define DATABASE_NAME aliases
+
+#include "../nss/getXXent_r.c"
diff --git a/inet/getaliasname.c b/inet/getaliasname.c
new file mode 100644
index 0000000000..416b434d1a
--- /dev/null
+++ b/inet/getaliasname.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+ 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 <aliases.h>
+
+
+#define LOOKUP_TYPE struct aliasent
+#define FUNCTION_NAME getaliasbyname
+#define DATABASE_NAME aliases
+#define ADD_PARAMS const char *name
+#define ADD_VARIABLES name
+#define BUFLEN 1024
+
+#include "../nss/getXXbyYY.c"
diff --git a/inet/getaliasname_r.c b/inet/getaliasname_r.c
new file mode 100644
index 0000000000..a2d9474722
--- /dev/null
+++ b/inet/getaliasname_r.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+ 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 <aliases.h>
+
+
+#define LOOKUP_TYPE struct aliasent
+#define FUNCTION_NAME getaliasbyname
+#define DATABASE_NAME aliases
+#define ADD_PARAMS const char *name
+#define ADD_VARIABLES name
+
+#include "../nss/getXXbyYY_r.c"
diff --git a/inet/getnetgrent_r.c b/inet/getnetgrent_r.c
index 1848ad7f35..5600716d69 100644
--- a/inet/getnetgrent_r.c
+++ b/inet/getnetgrent_r.c
@@ -190,7 +190,7 @@ __internal_getnetgrent (char **hostp, char **userp, char **domainp,
struct __netgrent *datap,
char *buffer, size_t buflen)
{
- enum nss_status (*fct) (struct __netgrent *, char *, int);
+ enum nss_status (*fct) (struct __netgrent *, char *, size_t);
int no_more;
/* Initialize status to return if no more functions are found. */
@@ -293,7 +293,7 @@ innetgr (const char *netgroup, const char *host, const char *user,
{
int (*setfct) (const char *, struct __netgrent *);
void (*endfct) (struct __netgrent *);
- int (*getfct) (struct __netgrent *, char *, int);
+ int (*getfct) (struct __netgrent *, char *, size_t);
struct name_list *known;
struct name_list *needed;
int result = 0;
diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c
index f836ecd578..c8741e83cb 100644
--- a/locale/programs/ld-collate.c
+++ b/locale/programs/ld-collate.c
@@ -1328,7 +1328,7 @@ collate_order_elem (struct linereader *lr, struct localedef_t *locale,
{
lr_error (lr, _("\
collation element `%.*s' appears more than once: ignore line"),
- code->val.str.len, code->val.str.start);
+ (int) code->val.str.len, code->val.str.start);
lr_ignore_rest (lr, 0);
result = -1;
break;
diff --git a/manual/arith.texi b/manual/arith.texi
index 8ea9508e3e..5607c4cae9 100644
--- a/manual/arith.texi
+++ b/manual/arith.texi
@@ -588,9 +588,9 @@ In these situation one could use the function
@code{__strto@var{XXX}_internal}. @var{XXX} here stands for any of the
above forms. All numeric conversion functions (including the functions
to process floating-point numbers) have such a counterpart. The
-difference to the normal for is the extra argument at the end of the
+difference to the normal form is the extra argument at the end of the
parameter list. If this value has an non-zero value the handling of
-number grouping is enabled. The advantage from using these functions is
+number grouping is enabled. The advantage of using these functions is
that the @var{tailptr} parameters allow to determine which part of the
input is processed. The @code{scanf} functions don't provide this
information. The drawback of using these functions is that they are not
@@ -678,7 +678,7 @@ number, no conversion is performed. In this case, @code{strtod} returns
a value of zero and the value returned in @code{*@var{tailptr}} is the
value of @var{string}.
-In a locale other than the standard @code{"C"} or @code{"POSIX"} locale,
+In a locale other than the standard @code{"C"} or @code{"POSIX"} locales,
this function may recognize additional locale-dependent syntax.
If the string has valid syntax for a floating-point number but the value
@@ -689,7 +689,7 @@ because of underflow, @code{strtod} returns zero. It also sets @code{errno}
to @code{ERANGE} if there was overflow or underflow.
Since the value zero which is returned in the error case is also a valid
-result the user should set the global variable @code{errno} to null
+result the user should set the global variable @code{errno} to zero
before calling this function. So one can test for failures after the
call since all failures set @code{errno} to a non-zero value.
@end deftypefun
diff --git a/manual/creature.texi b/manual/creature.texi
index babbb0ab05..423dce4544 100644
--- a/manual/creature.texi
+++ b/manual/creature.texi
@@ -78,7 +78,7 @@ Portability Guide is included. This is an superset of the POSIX.1 and
POSIX.2 functionality and in fact @code{_POSIX_SOURCE} and
@code{_POSIX_C_SOURCE} get automatically be defined.
-But as the great unifaction of all Unices there is also functionality
+But as the great unifiction of all Unices there is also functionality
only available in BSD and SVID is included.
If the macro @code{_XOPEN_SOURCE_EXTENDED} is also defined, even more
@@ -111,8 +111,9 @@ get very strange errors at run time.
@comment (none)
@comment GNU
-@defvr Macro _REENTRANT,_THREAD_SAFE
-If you define one this macro, reentrant versions of several functions get
+@defvr Macro _REENTRANT
+@defvrx Macro _THREAD_SAFE
+If you define one of these macros, reentrant versions of several functions get
declared. Some of the functions are specified in POSIX.1c but many others
are only available on a few other systems or are unique to GNU libc.
The problem is that the standardization of the thread safe C library
diff --git a/manual/users.texi b/manual/users.texi
index ce6d526b4a..9e397d3d4d 100644
--- a/manual/users.texi
+++ b/manual/users.texi
@@ -875,7 +875,7 @@ strings which are pointed to by the elements of the result structure.
This stream must correspond to a file in the same format as the standard
password database file.
-If the funciton returns null @var{result} points to the structure with
+If the function returns null @var{result} points to the structure with
the wanted data (normally this is in @var{result_buf}). If errors
occured the return value is non-null and @var{result} contains a null
pointer.
@@ -914,9 +914,9 @@ result is placed in the user supplied structure pointed to by
the elements of the result structure, are placed in the additional
buffer or length @var{buflen} starting at @var{buffer}.
-If the function returns null @var{result} points to the structure with
+If the function returns zero @var{result} points to the structure with
the wanted data (normally this is in @var{result_buf}). If errors
-occured the return value is non-null and @var{result} contains a null
+occured the return value is non-zero and @var{result} contains a null
pointer.
@end deftypefun
@@ -1023,8 +1023,8 @@ strings which are pointed to by the elements of the result structure.
If the return value is @code{0} the pointer returned in @var{result}
points to the record which contains the wanted data (i.e., @var{result}
-contains the value @var{result_buf}). In case the return value is non
-null there is no group in the data base with group ID @var{gid} or the
+contains the value @var{result_buf}). If the return value is non-zero
+there is no group in the data base with group ID @var{gid} or the
buffer @var{buffer} is too small to contain all the needed information.
In the later case the global @var{errno} variable is set to
@code{ERANGE}.
@@ -1054,8 +1054,8 @@ strings which are pointed to by the elements of the result structure.
If the return value is @code{0} the pointer returned in @var{result}
points to the record which contains the wanted data (i.e., @var{result}
-contains the value @var{result_buf}). In case the return value is non
-null there is no group in the data base with group name @var{name} or the
+contains the value @var{result_buf}). If the return value is non-zero
+there is no group in the data base with group name @var{name} or the
buffer @var{buffer} is too small to contain all the needed information.
In the later case the global @var{errno} variable is set to
@code{ERANGE}.
@@ -1098,9 +1098,9 @@ strings which are pointed to by the elements of the result structure.
This stream must correspond to a file in the same format as the standard
group database file.
-If the funciton returns null @var{result} points to the structure with
+If the function returns zero @var{result} points to the structure with
the wanted data (normally this is in @var{result_buf}). If errors
-occured the return value is non-null and @var{result} contains a null
+occured the return value is non-zero and @var{result} contains a null
pointer.
@end deftypefun
@@ -1135,9 +1135,9 @@ result is placed in the user supplied structure pointed to by
the elements of the result structure, are placed in the additional
buffer or length @var{buflen} starting at @var{buffer}.
-If the function returns null @var{result} points to the structure with
+If the function returns zero @var{result} points to the structure with
the wanted data (normally this is in @var{result_buf}). If errors
-occured the return value is non-null and @var{result} contains a null
+occured the return value is non-zero and @var{result} contains a null
pointer.
@end deftypefun
@@ -1186,8 +1186,8 @@ in either of the input services must have the following form:
@end smallexample
Any of the fields in the triple can be empty which means anything
-matches. While describing te functions we will see that the opposite
-case is useful as well. I.e., there shall be entries which will not
+matches. While describing the functions we will see that the opposite
+case is useful as well. I.e., there may be entries which will not
match any input. For entries like a name consisting of the single
character @code{-} shall be used.
@@ -1290,7 +1290,7 @@ also true for the name @code{-} which should not match any other string
otherwise.
The return value is @code{1} if an entry matching the given triple is
-found in the netgroup. The return value is @code{0} is the netgroup
+found in the netgroup. The return value is @code{0} if the netgroup
itself is not found, the netgroup does not contain the triple or
internal errors occured.
@end deftypefun
diff --git a/nss/Makefile b/nss/Makefile
index 93ffbaee34..9193cf2214 100644
--- a/nss/Makefile
+++ b/nss/Makefile
@@ -12,9 +12,9 @@
# 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.
+# 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.
#
# Makefile for name service switch.
@@ -33,7 +33,7 @@ routines = nsswitch $(addsuffix -lookup,$(databases))
# Caution: if you add a database here, you must add its real name
# in databases.def, too.
databases = proto service hosts network grp pwd rpc ethers \
- spwd netgrp key
+ spwd netgrp key alias
# Specify rules for the nss_* modules. We have some services.
services := files dns db
diff --git a/nss/alias-lookup.c b/nss/alias-lookup.c
new file mode 100644
index 0000000000..6a1244eea7
--- /dev/null
+++ b/nss/alias-lookup.c
@@ -0,0 +1,22 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+ 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 DATABASE_NAME aliases
+
+#include "XXX-lookup.c"
diff --git a/nss/databases.def b/nss/databases.def
index 8a5ede2a58..2ab892258d 100644
--- a/nss/databases.def
+++ b/nss/databases.def
@@ -1,25 +1,26 @@
/* List of all databases defined for the NSS in GNU C Library.
-Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+ Copyright (C) 1996 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-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 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.
+ 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. */
+ 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. */
/* This list must be kept sorted!!! */
+DEFINE_DATABASE (aliases)
DEFINE_DATABASE (ethers)
DEFINE_DATABASE (group)
DEFINE_DATABASE (hosts)
@@ -27,6 +28,7 @@ DEFINE_DATABASE (netgroup)
DEFINE_DATABASE (networks)
DEFINE_DATABASE (passwd)
DEFINE_DATABASE (protocols)
+DEFINE_DATABASE (publickey)
DEFINE_DATABASE (rpc)
DEFINE_DATABASE (services)
DEFINE_DATABASE (shadow)
diff --git a/nss/getXXbyYY.c b/nss/getXXbyYY.c
index c300117b8c..2a84db974a 100644
--- a/nss/getXXbyYY.c
+++ b/nss/getXXbyYY.c
@@ -1,22 +1,26 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+ 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 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.
+ 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. */
+ 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 "../nss/nsswitch.h"
+#include <errno.h>
+#include <libc-lock.h>
+#include <stdlib.h>
+
+#include "nsswitch.h"
/*******************************************************************\
|* Here we assume several symbols to be defined: *|
@@ -64,17 +68,47 @@ extern int INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf,
char *buffer, size_t buflen,
LOOKUP_TYPE **result H_ERRNO_PARM);
+/* We need to protect the dynamic buffer handling. */
+__libc_lock_define_initialized (static, lock);
+
+
LOOKUP_TYPE *
FUNCTION_NAME (ADD_PARAMS)
{
- static char buffer[BUFLEN];
+ static char *buffer;
+ static size_t buffer_size;
static LOOKUP_TYPE resbuf;
LOOKUP_TYPE *result;
+ int save;
+
+ /* Get lock. */
+ __libc_lock_lock (lock);
+
+ if (buffer == NULL)
+ {
+ buffer_size = BUFLEN;
+ buffer = malloc (buffer_size);
+ }
+
+ while (buffer != NULL
+ && INTERNAL (REENTRANT_NAME) (ADD_VARIABLES, &resbuf, buffer,
+ buffer_size, &result H_ERRNO_VAR) != 0
+ && errno == ERANGE)
+ {
+ char *new_buf;
+ buffer_size += BUFLEN;
+ new_buf = realloc (buffer, buffer_size);
+ if (new_buf == NULL)
+ /* We are out of memory. Free the current buffer so that the
+ process gets a chance for a normal termination. */
+ free (buffer);
+ buffer = new_buf;
+ }
- if (INTERNAL (REENTRANT_NAME) (ADD_VARIABLES, &resbuf, buffer,
- BUFLEN, &result H_ERRNO_VAR) != 0)
- /* Error occured. */
- return NULL;
+ /* Release lock. Preserve error value. */
+ save = errno;
+ __libc_lock_unlock (lock);
+ __set_errno (save);
return result;
}
diff --git a/nss/getXXbyYY_r.c b/nss/getXXbyYY_r.c
index 1295772819..f12907c244 100644
--- a/nss/getXXbyYY_r.c
+++ b/nss/getXXbyYY_r.c
@@ -71,7 +71,7 @@
/* Type of the lookup function we need here. */
-typedef int (*lookup_function) (ADD_PARAMS, LOOKUP_TYPE *, char *, int
+typedef int (*lookup_function) (ADD_PARAMS, LOOKUP_TYPE *, char *, size_t
H_ERRNO_PARM);
/* Some usages of this file might use this variable. */
diff --git a/nss/getXXent.c b/nss/getXXent.c
index 7e291e6298..2d6d1c32e6 100644
--- a/nss/getXXent.c
+++ b/nss/getXXent.c
@@ -1,20 +1,24 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+ 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 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.
+ 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. */
+ 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 <libc-lock.h>
+#include <stdlib.h>
#include "nsswitch.h"
@@ -55,18 +59,47 @@ extern int INTERNAL (REENTRANT_GETNAME) (LOOKUP_TYPE *resbuf, char *buffer,
size_t buflen, LOOKUP_TYPE **result
H_ERRNO_PARM);
+/* We need to protect the dynamic buffer handling. */
+__libc_lock_define_initialized (static, lock);
+
LOOKUP_TYPE *
GETFUNC_NAME (void)
{
- static char buffer[BUFLEN];
+ static char *buffer;
+ static size_t buffer_size;
static LOOKUP_TYPE resbuf;
- LOOKUP_TYPE *result;
+ LOOKUP_TYPE *result = NULL;
+ int save;
+
+ /* Get lock. */
+ __libc_lock_lock (lock);
+
+ if (buffer == NULL)
+ {
+ buffer_size = BUFLEN;
+ buffer = malloc (buffer_size);
+ }
+
+ while (buffer != NULL
+ && INTERNAL (REENTRANT_GETNAME) (&resbuf, buffer, buffer_size, &result
+ H_ERRNO_VAR) != 0
+ && errno == ERANGE)
+ {
+ char *new_buf;
+ buffer_size += BUFLEN;
+ new_buf = realloc (buffer, buffer_size);
+ if (new_buf == NULL)
+ /* We are out of memory. Free the current buffer so that the
+ process gets a chance for a normal termination. */
+ free (buffer);
+ buffer = new_buf;
+ }
- if (INTERNAL (REENTRANT_GETNAME) (&resbuf, buffer, BUFLEN, &result
- H_ERRNO_VAR) != 0)
- /* Errors occured. */
- return NULL;
+ /* Release lock. Preserve error value. */
+ save = errno;
+ __libc_lock_unlock (lock);
+ __set_errno (save);
return result;
}
diff --git a/nss/getXXent_r.c b/nss/getXXent_r.c
index 0db0a8bf28..cc47537129 100644
--- a/nss/getXXent_r.c
+++ b/nss/getXXent_r.c
@@ -90,7 +90,7 @@ typedef int (*set_function) (STAYOPEN);
typedef int (*end_function) (void);
/* Prototype for the setXXXent functions we use here. */
-typedef int (*get_function) (LOOKUP_TYPE *, char *, int H_ERRNO_PARM);
+typedef int (*get_function) (LOOKUP_TYPE *, char *, size_t H_ERRNO_PARM);
/* This handle for the NSS data base is shared between all
diff --git a/nss/nss_db/db-XXX.c b/nss/nss_db/db-XXX.c
index 0c41761d67..1596be560a 100644
--- a/nss/nss_db/db-XXX.c
+++ b/nss/nss_db/db-XXX.c
@@ -1,21 +1,21 @@
/* Common code for DB-based databases in nss_db module.
-Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+ 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 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.
+ 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. */
+ 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 <db.h>
#include <fcntl.h>
@@ -168,7 +168,7 @@ lookup (const DBT *key, struct STRUCTURE *result,
enum nss_status \
_nss_db_get##name##_r (proto, \
struct STRUCTURE *result, \
- char *buffer, int buflen H_ERRNO_PROTO) \
+ char *buffer, size_t buflen H_ERRNO_PROTO) \
{ \
DBT key; \
enum nss_status status; \
@@ -189,7 +189,7 @@ _nss_db_get##name##_r (proto, \
/* Return the next entry from the database file, doing locking. */
enum nss_status
CONCAT(_nss_db_get,ENTNAME_r) (struct STRUCTURE *result,
- char *buffer, int buflen H_ERRNO_PROTO)
+ char *buffer, size_t buflen H_ERRNO_PROTO)
{
/* Return next entry in host file. */
enum nss_status status;
diff --git a/nss/nss_db/db-alias.c b/nss/nss_db/db-alias.c
new file mode 100644
index 0000000000..2c44f4df79
--- /dev/null
+++ b/nss/nss_db/db-alias.c
@@ -0,0 +1,235 @@
+/* Mail alias file parser in nss_db module.
+ Copyright (C) 1996 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+ 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 <aliases.h>
+#include <alloca.h>
+#include <ctype.h>
+#include <db.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <libc-lock.h>
+#include <paths.h>
+#include <string.h>
+
+#include "nsswitch.h"
+
+/* Locks the static variables in this file. */
+__libc_lock_define_initialized (static, lock)
+
+/* Maintenance of the shared handle open on the database. */
+
+static DB *db;
+static int keep_db;
+static unsigned int entidx; /* Index for `getaliasent_r'. */
+
+/* Open database file if not already opened. */
+static enum nss_status
+internal_setent (int stayopen)
+{
+ enum nss_status status = NSS_STATUS_SUCCESS;
+
+ if (db == NULL)
+ {
+ db = dbopen (_PATH_VARDB "aliases.db", O_RDONLY, 0, DB_BTREE, NULL);
+
+ if (db == NULL)
+ status = NSS_STATUS_UNAVAIL;
+ }
+
+ /* Remember STAYOPEN flag. */
+ if (db != NULL)
+ keep_db |= stayopen;
+
+ return status;
+}
+
+
+/* Thread-safe, exported version of that. */
+enum nss_status
+_nss_db_setaliasent (int stayopen)
+{
+ enum nss_status status;
+
+ __libc_lock_lock (lock);
+
+ status = internal_setent (stayopen);
+
+ /* Reset the sequential index. */
+ entidx = 0;
+
+ __libc_lock_unlock (lock);
+
+ return status;
+}
+
+
+/* Close the database file. */
+static void
+internal_endent (void)
+{
+ if (db != NULL)
+ {
+ (*db->close) (db);
+ db = NULL;
+ }
+}
+
+
+/* Thread-safe, exported version of that. */
+enum nss_status
+_nss_db_endaliasent (void)
+{
+ __libc_lock_lock (lock);
+
+ internal_endent ();
+
+ /* Reset STAYOPEN flag. */
+ keep_db = 0;
+
+ __libc_lock_unlock (lock);
+
+ return NSS_STATUS_SUCCESS;
+}
+
+/* We provide the parse function here. The parser in libnss_files
+ cannot be used. The generation of the db file already resolved all
+ :include: statements so we simply have to parse the list and store
+ the result. */
+static enum nss_status
+lookup (const DBT *key, struct aliasent *result, char *buffer,
+ size_t buflen)
+{
+ enum nss_status status;
+ DBT value;
+
+ /* Open the database. */
+ status = internal_setent (keep_db);
+ if (status != NSS_STATUS_SUCCESS)
+ return status;
+
+ if ((*db->get) (db, key, &value, 0) == 0)
+ {
+ const char *src = value.data;
+
+ result->alias_members_len = 0;
+
+ /* We now have to fill the BUFFER with all the information. */
+ if (buflen < key->size + 1)
+ {
+ no_more_room:
+ __set_errno (ERANGE);
+ return NSS_STATUS_TRYAGAIN;
+ }
+
+ if (status == NSS_STATUS_SUCCESS)
+ {
+ char *cp;
+ size_t cnt;
+
+ buffer = stpncpy (buffer, key->data, key->size) + 1;
+ buflen -= key->size + 1;
+
+ while (*src != '\0')
+ {
+ const char *end, *upto;
+ while (isspace (*src))
+ ++src;
+
+ end = strchr (src, ',');
+ if (end == NULL)
+ end = strchr (src, '\0');
+ for (upto = end; upto > src && isspace (upto[-1]); --upto);
+
+ if (upto != src)
+ {
+ if ((upto - src) + __alignof__ (char *) > buflen)
+ goto no_more_room;
+ buffer = stpncpy (buffer, src, upto - src) + 1;
+ buflen -= (upto - src) + __alignof (char *);
+ ++result->alias_members_len;
+ }
+ src = end + (*end != '\0');
+ }
+
+ /* Now prepare the return. Provide string pointers for the
+ currently selected aliases. */
+
+ /* Adjust the pointer so it is aligned for storing pointers. */
+ buffer += __alignof__ (char *) - 1;
+ buffer -= ((buffer - (char *) 0) % __alignof__ (char *));
+ result->alias_members = (char **) buffer;
+
+ /* Compute addresses of alias entry strings. */
+ cp = result->alias_name;
+ for (cnt = 0; cnt < result->alias_members_len; ++cnt)
+ {
+ cp = strchr (cp, '\0') + 1;
+ result->alias_members[cnt] = cp;
+ }
+
+ status = (result->alias_members_len == 0
+ ? NSS_STATUS_RETURN : NSS_STATUS_SUCCESS);
+ }
+ }
+ else
+ status = NSS_STATUS_NOTFOUND;
+
+ if (! keep_db)
+ internal_endent ();
+
+ return status;
+}
+
+enum nss_status
+_nss_db_getaliasent_r (struct aliasent *result, char *buffer, size_t buflen)
+{
+ /* Return next entry in host file. */
+ enum nss_status status;
+ char buf[20];
+ DBT key;
+
+ __libc_lock_lock (lock);
+ key.size = 1 + snprintf (key.data = buf, sizeof buf, "0%u", entidx++);
+ status = lookup (&key, result, buffer, buflen);
+ __libc_lock_unlock (lock);
+
+ return status;
+}
+
+
+enum nss_status
+_nss_db_getaliasbyname_r (const char *name, struct aliasent *result,
+ char *buffer, size_t buflen)
+{
+ DBT key;
+ enum nss_status status;
+
+ key.size = 1 + strlen (name);
+
+ key.data = __alloca (key.size);
+ ((char *) key.data)[0] = '.';
+ memcpy (&((char *) key.data)[1], name, key.size - 1);
+
+ __libc_lock_lock (lock);
+ status = lookup (&key, result, buffer, buflen);
+ __libc_lock_unlock (lock);
+
+ return status;
+}
diff --git a/nss/nss_files/files-XXX.c b/nss/nss_files/files-XXX.c
index b6702b0366..c741ab6f48 100644
--- a/nss/nss_files/files-XXX.c
+++ b/nss/nss_files/files-XXX.c
@@ -20,6 +20,7 @@
#include <stdio.h>
#include <ctype.h>
#include <assert.h>
+#include <errno.h>
#include <libc-lock.h>
#include "nsswitch.h"
@@ -39,13 +40,13 @@
#define DATAFILE "/etc/" DATABASE
#ifdef NEED_H_ERRNO
-#define H_ERRNO_PROTO , int *herrnop
-#define H_ERRNO_ARG , herrnop
-#define H_ERRNO_SET(val) (*herrnop = (val))
+# define H_ERRNO_PROTO , int *herrnop
+# define H_ERRNO_ARG , herrnop
+# define H_ERRNO_SET(val) (*herrnop = (val))
#else
-#define H_ERRNO_PROTO
-#define H_ERRNO_ARG
-#define H_ERRNO_SET(val) ((void) 0)
+# define H_ERRNO_PROTO
+# define H_ERRNO_ARG
+# define H_ERRNO_SET(val) ((void) 0)
#endif
/* Locks the static variables in this file. */
@@ -59,10 +60,10 @@ static enum { none, getent, getby } last_use;
static int keep_stream;
/* Open database file if not already opened. */
-static int
+static enum nss_status
internal_setent (int stayopen)
{
- int status = NSS_STATUS_SUCCESS;
+ enum nss_status status = NSS_STATUS_SUCCESS;
if (stream == NULL)
{
@@ -83,10 +84,10 @@ internal_setent (int stayopen)
/* Thread-safe, exported version of that. */
-int
+enum nss_status
CONCAT(_nss_files_set,ENTNAME) (int stayopen)
{
- int status;
+ enum nss_status status;
__libc_lock_lock (lock);
@@ -120,7 +121,7 @@ internal_endent (void)
/* Thread-safe, exported version of that. */
-int
+enum nss_status
CONCAT(_nss_files_end,ENTNAME) (void)
{
__libc_lock_lock (lock);
@@ -145,16 +146,6 @@ internal_getent (struct STRUCTURE *result,
struct parser_data *data = (void *) buffer;
int linebuflen = buffer + buflen - data->linebuffer;
- /* Be prepared that the set*ent function was not called before. */
- if (stream == NULL)
- {
- enum nss_status status;
-
- status = internal_setent (0);
- if (status != NSS_STATUS_SUCCESS)
- return status;
- }
-
if (buflen < (int) sizeof *data + 1)
{
__set_errno (ERANGE);
@@ -163,6 +154,9 @@ internal_getent (struct STRUCTURE *result,
do
{
+ /* Terminate the line so that we can test for overflow. */
+ data->linebuffer[linebuflen - 1] = '\0';
+
p = fgets (data->linebuffer, linebuflen, stream);
if (p == NULL)
{
@@ -170,17 +164,23 @@ internal_getent (struct STRUCTURE *result,
H_ERRNO_SET (HOST_NOT_FOUND);
return NSS_STATUS_NOTFOUND;
}
-
- /* Terminate the line for any case. */
- data->linebuffer[linebuflen - 1] = '\0';
+ else if (data->linebuffer[linebuflen - 1] != '\0')
+ {
+ /* The line is too long. Give the user the opportunity to
+ enlarge the buffer. */
+ __set_errno (ERANGE);
+ H_ERRNO_SET (NETDB_INTERNAL);
+ return NSS_STATUS_TRYAGAIN;
+ }
/* Skip leading blanks. */
while (isspace (*p))
++p;
- } while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */
- /* Parse the line. If it is invalid, loop to
- get the next line of the file to parse. */
- ! parse_line (p, result, data, buflen));
+ }
+ while (*p == '\0' || *p == '#' /* Ignore empty and comment lines. */
+ /* Parse the line. If it is invalid, loop to get the next
+ line of the file to parse. */
+ || ! parse_line (p, result, data, buflen));
/* Filled in RESULT with the next entry from the database file. */
return NSS_STATUS_SUCCESS;
@@ -188,29 +188,42 @@ internal_getent (struct STRUCTURE *result,
/* Return the next entry from the database file, doing locking. */
-int
+enum nss_status
CONCAT(_nss_files_get,ENTNAME_r) (struct STRUCTURE *result,
- char *buffer, int buflen H_ERRNO_PROTO)
+ char *buffer, size_t buflen H_ERRNO_PROTO)
{
/* Return next entry in host file. */
- int status = NSS_STATUS_SUCCESS;
+ enum nss_status status = NSS_STATUS_SUCCESS;
__libc_lock_lock (lock);
- /* If the last use was not by the getent function we need the
- position the stream. */
- if (last_use != getent)
- if (fsetpos (stream, &position) < 0)
- status = NSS_STATUS_UNAVAIL;
- else
- last_use = getent;
+ /* Be prepared that the set*ent function was not called before. */
+ if (stream == NULL)
+ status = internal_setent (0);
- if (status == NSS_STATUS_SUCCESS)
+ if (status != NSS_STATUS_SUCCESS)
{
- status = internal_getent (result, buffer, buflen H_ERRNO_ARG);
-
- /* Remember this position. */
- fgetpos (stream, &position);
+ /* If the last use was not by the getent function we need the
+ position the stream. */
+ if (last_use != getent)
+ if (fsetpos (stream, &position) < 0)
+ status = NSS_STATUS_UNAVAIL;
+ else
+ last_use = getent;
+
+ if (status == NSS_STATUS_SUCCESS)
+ {
+ status = internal_getent (result, buffer, buflen H_ERRNO_ARG);
+
+ /* Remember this position if we were successful. If the
+ operation failed we give the user a chance to repeat the
+ operation (perhaps the buffer was too small). */
+ if (status == NSS_STATUS_SUCCESS)
+ fgetpos (stream, &position);
+ else
+ /* We must make sure we reposition the stream the next call. */
+ last_use = none;
+ }
}
__libc_lock_unlock (lock);
@@ -234,24 +247,27 @@ CONCAT(_nss_files_get,ENTNAME_r) (struct STRUCTURE *result,
enum nss_status \
_nss_files_get##name##_r (proto, \
struct STRUCTURE *result, \
- char *buffer, int buflen H_ERRNO_PROTO) \
+ char *buffer, size_t buflen H_ERRNO_PROTO) \
{ \
enum nss_status status; \
\
__libc_lock_lock (lock); \
\
/* Reset file pointer to beginning or open file. */ \
- internal_setent (keep_stream); \
+ status = internal_setent (keep_stream); \
\
- /* Tell getent function that we have repositioned the file pointer. */ \
- last_use = getby; \
+ if (status == NSS_STATUS_SUCCESS) \
+ { \
+ /* Tell getent function that we have repositioned the file pointer. */ \
+ last_use = getby; \
\
- while ((status = internal_getent (result, buffer, buflen H_ERRNO_ARG)) \
- == NSS_STATUS_SUCCESS) \
- { break_if_match } \
+ while ((status = internal_getent (result, buffer, buflen H_ERRNO_ARG)) \
+ == NSS_STATUS_SUCCESS) \
+ { break_if_match } \
\
- if (! keep_stream) \
- internal_endent (); \
+ if (! keep_stream) \
+ internal_endent (); \
+ } \
\
__libc_lock_unlock (lock); \
\
diff --git a/nss/nss_files/files-alias.c b/nss/nss_files/files-alias.c
new file mode 100644
index 0000000000..c6ef49c621
--- /dev/null
+++ b/nss/nss_files/files-alias.c
@@ -0,0 +1,424 @@
+/* Mail alias file parser in nss_files module.
+ Copyright (C) 1996 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+ 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 <aliases.h>
+#include <ctype.h>
+#include <libc-lock.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "nsswitch.h"
+
+/* Locks the static variables in this file. */
+__libc_lock_define_initialized (static, lock)
+
+/* Maintenance of the shared stream open on the database file. */
+
+static FILE *stream;
+static fpos_t position;
+static enum { none, getent, getby } last_use;
+
+
+static enum nss_status
+internal_setent (void)
+{
+ enum nss_status status = NSS_STATUS_SUCCESS;
+
+ if (stream == NULL)
+ {
+ stream = fopen ("/etc/aliases", "r");
+
+ if (stream == NULL)
+ status = NSS_STATUS_UNAVAIL;
+ }
+ else
+ rewind (stream);
+
+ return status;
+}
+
+
+/* Thread-safe, exported version of that. */
+enum nss_status
+_nss_files_setaliasent (void)
+{
+ enum nss_status status;
+
+ __libc_lock_lock (lock);
+
+ status = internal_setent ();
+
+ if (status == NSS_STATUS_SUCCESS && fgetpos (stream, &position) < 0)
+ {
+ fclose (stream);
+ stream = NULL;
+ status = NSS_STATUS_UNAVAIL;
+ }
+
+ last_use = getent;
+
+ __libc_lock_unlock (lock);
+
+ return status;
+}
+
+
+/* Close the database file. */
+static void
+internal_endent (void)
+{
+ if (stream != NULL)
+ {
+ fclose (stream);
+ stream = NULL;
+ }
+}
+
+
+/* Thread-safe, exported version of that. */
+enum nss_status
+_nss_files_endaliasent (void)
+{
+ __libc_lock_lock (lock);
+
+ internal_endent ();
+
+ __libc_lock_unlock (lock);
+
+ return NSS_STATUS_SUCCESS;
+}
+
+/* Parsing the database file into `struct aliasent' data structures. */
+static enum nss_status
+get_next_alias (const char *match, struct aliasent *result,
+ char *buffer, size_t buflen)
+{
+ enum nss_status status = NSS_STATUS_NOTFOUND;
+ int ignore = 0;
+
+ result->alias_members_len = 0;
+
+ while (1)
+ {
+ /* Now we are ready to process the input. We have to read a
+ line and all its continuations and construct the array of
+ string pointers. This pointers and the names itself have to
+ be placed in BUFFER. */
+ char *first_unused = buffer;
+ size_t room_left = buflen - (buflen % __alignof__ (char *));
+ char *line;
+
+ /* Read the first line. It must contain the alias name and
+ possibly some alias names. */
+ first_unused[room_left - 1] = '\0';
+ line = fgets (first_unused, room_left, stream);
+ if (line == NULL)
+ /* Nothing to read. */
+ break;
+ else if (first_unused[room_left - 1] != '\0')
+ {
+ /* The line is too long for our buffer. */
+ no_more_room:
+ __set_errno (ERANGE);
+ status = NSS_STATUS_TRYAGAIN;
+ break;
+ }
+ else
+ {
+ char *cp;
+
+ /* If we are in IGNORE mode and the first character in the
+ line is a white space we ignore the line and start
+ reading the next. */
+ if (ignore && isspace (first_unused))
+ continue;
+
+ /* Terminate the line for any case. */
+ cp = strpbrk (first_unused, "#\n");
+ if (cp != NULL)
+ *cp = '\0';
+
+ /* Skip leading blanks. */
+ while (isspace (*line))
+ ++line;
+
+ result->alias_name = first_unused;
+ while (*line != '\0' && *line != ':')
+ *first_unused++ = *line++;
+ if (*line == '\0' || result->alias_name == first_unused)
+ /* No valid name. Ignore the line. */
+ continue;
+
+ *first_unused++ = '\0';
+ if (room_left < (size_t) (first_unused - result->alias_name))
+ goto no_more_room;
+ room_left -= first_unused - result->alias_name;
+ ++line;
+
+ /* When we search for a specific alias we can avoid all the
+ difficult parts and compare now with the name we are
+ looking for. If it does not match we simply ignore all
+ lines until the next line containing the start of a new
+ alias is found. */
+ ignore = match != NULL && strcmp (result->alias_name, match) == 0;
+
+ while (! ignore)
+ {
+ while (isspace (*line))
+ ++line;
+
+ cp = first_unused;
+ while (*line != '\0' && *line != ',')
+ *first_unused++ = *line++;
+
+ if (first_unused != cp)
+ {
+ if (*line != '\0')
+ {
+ /* OK, we can have a regular entry or an include
+ request. */
+ *first_unused++ = '\0';
+ ++line;
+ }
+ else
+ ++first_unused;
+
+
+ if (strncmp (cp, ":include:", 9) != 0)
+ {
+ if (room_left < (first_unused - cp) + sizeof (char *))
+ goto no_more_room;
+ room_left -= (first_unused - cp) + sizeof (char *);
+
+ ++result->alias_members_len;
+ }
+ else
+ {
+ /* Oh well, we have to read the addressed file. */
+ FILE *listfile;
+ char *old_line = NULL;
+
+ first_unused = cp;
+
+ listfile = fopen (&cp[9], "r");
+ /* If the file does not exist we simply ignore
+ the statement. */
+ if (listfile != NULL
+ && (old_line = strdup (line)) != NULL)
+ {
+ while (! feof (listfile))
+ {
+ first_unused[room_left - 1] = '\0';
+ line = fgets (first_unused, room_left, listfile);
+ if (line == NULL)
+ break;
+ if (first_unused[room_left - 1] != '\0')
+ {
+ free (old_line);
+ goto no_more_room;
+ }
+
+ /* Parse the line. */
+ cp = strpbrk (line, "#\n");
+ if (cp != NULL)
+ *cp = '\0';
+
+ do
+ {
+ while (isspace (*line))
+ ++line;
+
+ cp = first_unused;
+ while (*line != '\0' && *line != ',')
+ *first_unused++ = *line++;
+
+ if (*line != '\0')
+ ++line;
+
+ if (first_unused != cp)
+ {
+ *first_unused++ = '\0';
+ if (room_left < ((first_unused - cp)
+ + __alignof__ (char *)))
+ {
+ free (old_line);
+ goto no_more_room;
+ }
+ room_left -= ((first_unused - cp)
+ + __alignof__ (char *));
+ ++result->alias_members_len;
+ }
+ }
+ while (*line != '\0');
+ }
+ fclose (listfile);
+
+ first_unused[room_left - 1] = '\0';
+ strncpy (first_unused, old_line, room_left);
+
+ if (old_line != NULL)
+ free (old_line);
+
+ if (first_unused[room_left - 1] != '\0')
+ goto no_more_room;
+ }
+ }
+ }
+
+ if (*line == '\0')
+ {
+ /* Get the next line. But we must be careful. We
+ must not read the whole line at once since it
+ might belong to the current alias. Simply read
+ the first character. If it is a white space we
+ have a continuation line. Otherwise it is the
+ beginning of a new alias and we can push back the
+ just read character. */
+ int ch;
+
+ first_unused[room_left - 1] = '\0';
+ line = first_unused;
+ ch = fgetc (stream);
+ if (ch == EOF || !isspace (ch))
+ {
+ size_t cnt;
+
+ /* Now prepare the return. Provide string
+ pointers for the currently selected aliases. */
+ if (ch != EOF)
+ ungetc (ch, stream);
+
+ /* Adjust the pointer so it is aligned for
+ storing pointers. */
+ first_unused += __alignof__ (char *) - 1;
+ first_unused -= ((first_unused - (char *) 0)
+ % __alignof__ (char *));
+ result->alias_members = (char **) first_unused;
+
+ /* Compute addresses of alias entry strings. */
+ cp = result->alias_name;
+ for (cnt = 0; cnt < result->alias_members_len; ++cnt)
+ {
+ cp = strchr (cp, '\0') + 1;
+ result->alias_members[cnt] = cp;
+ }
+
+ status = (result->alias_members_len == 0
+ ? NSS_STATUS_RETURN : NSS_STATUS_SUCCESS);
+ break;
+ }
+
+ /* The just read character is a white space and so
+ can be ignored. */
+ cp = strpbrk (line, "#\n");
+ if (cp != NULL)
+ *cp = '\0';
+ }
+ }
+ }
+
+ if (status != NSS_STATUS_NOTFOUND)
+ /* We read something. In any case break here. */
+ break;
+ }
+
+ return status;
+}
+
+
+enum nss_status
+_nss_files_getaliasent_r (struct aliasent *result, char *buffer, size_t buflen)
+{
+ /* Return next entry in host file. */
+ enum nss_status status = NSS_STATUS_SUCCESS;
+
+ __libc_lock_lock (lock);
+
+ /* Be prepared that the set*ent function was not called before. */
+ if (stream == NULL)
+ status = internal_setent ();
+
+ if (status == NSS_STATUS_SUCCESS)
+ {
+ /* If the last use was not by the getent function we need the
+ position the stream. */
+ if (last_use != getent)
+ if (fsetpos (stream, &position) < 0)
+ status = NSS_STATUS_UNAVAIL;
+ else
+ last_use = getent;
+
+ if (status == NSS_STATUS_SUCCESS)
+ {
+ result->alias_local = 1;
+
+ /* Read lines until we get a definite result. */
+ do
+ status = get_next_alias (NULL, result, buffer, buflen);
+ while (status == NSS_STATUS_RETURN);
+
+ /* If we successfully read an entry remember this position. */
+ if (status == NSS_STATUS_SUCCESS)
+ fgetpos (stream, &position);
+ else
+ last_use = none;
+ }
+ }
+
+ __libc_lock_unlock (lock);
+
+ return status;
+}
+
+
+enum nss_status
+_nss_files_getaliasbyname_r (const char *name, struct aliasent *result,
+ char *buffer, size_t buflen)
+{
+ /* Return next entry in host file. */
+ enum nss_status status = NSS_STATUS_SUCCESS;
+
+ if (name == NULL)
+ {
+ __set_errno (EINVAL);
+ return NSS_STATUS_UNAVAIL;
+ }
+
+ __libc_lock_lock (lock);
+
+ /* Open the stream or rest it. */
+ status = internal_setent ();
+ last_use = getby;
+
+ if (status == NSS_STATUS_SUCCESS)
+ {
+ result->alias_local = 1;
+
+ /* Read lines until we get a definite result. */
+ do
+ status = get_next_alias (name, result, buffer, buflen);
+ while (status == NSS_STATUS_RETURN);
+ }
+
+ __libc_lock_unlock (lock);
+
+ return status;
+}
diff --git a/nss/nss_files/files-parse.c b/nss/nss_files/files-parse.c
index 1250bb9572..83a80f35c0 100644
--- a/nss/nss_files/files-parse.c
+++ b/nss/nss_files/files-parse.c
@@ -39,7 +39,7 @@
#define CONCAT1(a,b) a##b
#ifndef STRUCTURE
-#define STRUCTURE ENTNAME
+# define STRUCTURE ENTNAME
#endif
@@ -47,9 +47,9 @@ struct parser_data
{
#ifdef ENTDATA
struct ENTDATA entdata;
-#define ENTDATA_DECL(data) struct ENTDATA *const entdata = &data->entdata;
+# define ENTDATA_DECL(data) struct ENTDATA *const entdata = &data->entdata;
#else
-#define ENTDATA_DECL(data)
+# define ENTDATA_DECL(data)
#endif
char linebuffer[0];
};
@@ -57,11 +57,11 @@ struct parser_data
#ifdef ENTDATA
/* The function can't be exported, because the entdata structure
is defined only in files-foo.c. */
-#define parser_stclass static inline
+# define parser_stclass static inline
#else
/* Export the line parser function so it can be used in nss_db. */
-#define parser_stclass /* Global */
-#define parse_line CONCAT(_nss_files_parse_,ENTNAME)
+# define parser_stclass /* Global */
+# define parse_line CONCAT(_nss_files_parse_,ENTNAME)
#endif
@@ -71,20 +71,20 @@ struct parser_data
extern int parse_line (char *line, struct STRUCTURE *result,
struct parser_data *data, int datalen);
-#define LINE_PARSER(EOLSET, BODY) /* Do nothing */
+# define LINE_PARSER(EOLSET, BODY) /* Do nothing */
#else
/* Define a line parsing function. */
-#define LINE_PARSER(EOLSET, BODY) \
+# define LINE_PARSER(EOLSET, BODY) \
parser_stclass int \
parse_line (char *line, struct STRUCTURE *result, \
struct parser_data *data, int datalen) \
{ \
ENTDATA_DECL (data) \
char *p = strpbrk (line, EOLSET "\n"); \
- if (p) \
+ if (p != NULL) \
*p = '\0'; \
BODY; \
TRAILING_LIST_PARSER; \
@@ -92,7 +92,7 @@ parse_line (char *line, struct STRUCTURE *result, \
}
-#define STRING_FIELD(variable, terminator_p, swallow) \
+# define STRING_FIELD(variable, terminator_p, swallow) \
{ \
variable = line; \
while (*line != '\0' && !terminator_p (*line)) \
@@ -106,7 +106,7 @@ parse_line (char *line, struct STRUCTURE *result, \
} \
}
-#define INT_FIELD(variable, terminator_p, swallow, base, convert) \
+# define INT_FIELD(variable, terminator_p, swallow, base, convert) \
{ \
char *endp; \
variable = convert (strtol (line, &endp, base)); \
@@ -121,7 +121,7 @@ parse_line (char *line, struct STRUCTURE *result, \
line = endp; \
}
-#define INT_FIELD_MAYBE_NULL(variable, terminator_p, swallow, base, convert, default) \
+# define INT_FIELD_MAYBE_NULL(variable, terminator_p, swallow, base, convert, default) \
{ \
char *endp; \
if (*line == '\0') \
@@ -139,14 +139,14 @@ parse_line (char *line, struct STRUCTURE *result, \
line = endp; \
}
-#define ISCOLON(c) ((c) == ':')
+# define ISCOLON(c) ((c) == ':')
-#ifndef TRAILING_LIST_MEMBER
-#define TRAILING_LIST_PARSER /* Nothing to do. */
-#else
+# ifndef TRAILING_LIST_MEMBER
+# define TRAILING_LIST_PARSER /* Nothing to do. */
+# else
-#define TRAILING_LIST_PARSER \
+# define TRAILING_LIST_PARSER \
{ \
char **list = parse_list (line, data, datalen); \
if (list) \
@@ -198,10 +198,10 @@ parse_list (char *line, struct parser_data *data, int datalen)
*line = '\0';
do
++line;
- while (TRAILING_LIST_SEPARATOR_P (*line));
+ while (isspace (*line));
elt = line;
}
- else if (*line == '\0' || *line == '\n')
+ else if (*line == '\0')
{
/* End of the line. */
if (line > elt)
@@ -219,7 +219,7 @@ parse_list (char *line, struct parser_data *data, int datalen)
return list;
}
-#endif /* TRAILING_LIST_MEMBER */
+# endif /* TRAILING_LIST_MEMBER */
#endif /* EXTERN_PARSER */
@@ -238,5 +238,5 @@ parse_list (char *line, struct parser_data *data, int datalen)
/* This is defined by db-*.c to include "../nss_db/db-XXX.c" instead. */
#ifndef GENERIC
-#define GENERIC "files-XXX.c"
+# define GENERIC "files-XXX.c"
#endif
diff --git a/posix/unistd.h b/posix/unistd.h
index 2b967bf706..0e07d4e154 100644
--- a/posix/unistd.h
+++ b/posix/unistd.h
@@ -72,7 +72,7 @@ __BEGIN_DECLS
/* Encryption is present. */
#define _XOPEN_CRYPT 1
-/* The enchanced internationalization capabilities accoring to XPG4.2
+/* The enchanced internationalization capabilities according to XPG4.2
are present. */
#define _XOPEN_ENH_I18N 1
diff --git a/resolv/Banner b/resolv/Banner
index 5d0dc48e95..0cf0de3f6f 100644
--- a/resolv/Banner
+++ b/resolv/Banner
@@ -1 +1 @@
-BIND-4.9.5-T6B
+BIND-4.9.5-REL
diff --git a/resolv/inet_net_pton.c b/resolv/inet_net_pton.c
index 7c863492d7..bf6fe02ed8 100644
--- a/resolv/inet_net_pton.c
+++ b/resolv/inet_net_pton.c
@@ -97,9 +97,7 @@ inet_net_pton_ipv4(src, dst, size)
int n, ch, tmp, dirty, bits;
const u_char *odst = dst;
- bits = -1;
ch = *src++;
-
if (ch == '0' && (src[0] == 'x' || src[0] == 'X')
&& isascii(src[1]) && isxdigit(src[1])) {
/* Hexadecimal: Eat nybble string. */
@@ -150,6 +148,7 @@ inet_net_pton_ipv4(src, dst, size)
} else
goto enoent;
+ bits = -1;
if (ch == '/' && isascii(src[0]) && isdigit(src[0]) && dst > odst) {
/* CIDR width specifier. Nothing can follow it. */
ch = *src++; /* Skip over the /. */
@@ -163,6 +162,8 @@ inet_net_pton_ipv4(src, dst, size)
isascii(ch) && isdigit(ch));
if (ch != '\0')
goto enoent;
+ if (bits > 32)
+ goto emsgsize;
}
/* Firey death and destruction unless we prefetched EOS. */
@@ -174,14 +175,19 @@ inet_net_pton_ipv4(src, dst, size)
goto enoent;
/* If no CIDR spec was given, infer width from net class. */
if (bits == -1) {
- if (*odst >= 224)
+ if (*odst >= 240) /* Class E */
+ bits = 32;
+ else if (*odst >= 224) /* Class D */
bits = 4;
- else if (*odst >= 192)
+ else if (*odst >= 192) /* Class C */
bits = 24;
- else if (*odst >= 128)
+ else if (*odst >= 128) /* Class B */
bits = 16;
- else
+ else /* Class A */
bits = 8;
+ /* If imputed mask is narrower than specified octets, widen. */
+ if (bits >= 8 && bits < ((dst - odst) * 8))
+ bits = (dst - odst) * 8;
}
/* Extend network to cover the actual mask. */
while (bits > ((dst - odst) * 8)) {
diff --git a/resolv/res_debug.c b/resolv/res_debug.c
index 49eef72cd2..8fb4bcf33f 100644
--- a/resolv/res_debug.c
+++ b/resolv/res_debug.c
@@ -295,7 +295,7 @@ __fp_nquery(msg, len, file)
*/
hp = (HEADER *)msg;
cp = msg + HFIXEDSZ;
- endMark = cp + len;
+ endMark = msg + len;
if ((!_res.pfcode) || (_res.pfcode & RES_PRF_HEADX) || hp->rcode) {
fprintf(file, ";; ->>HEADER<<- opcode: %s, status: %s, id: %d",
_res_opcodes[hp->opcode],
diff --git a/sysdeps/generic/sigset.h b/sysdeps/generic/sigset.h
index b00265b6e9..80e80c2d2f 100644
--- a/sysdeps/generic/sigset.h
+++ b/sysdeps/generic/sigset.h
@@ -50,9 +50,9 @@ typedef unsigned long int __sigset_t;
call we know fails with EINVAL (kludge city!), so as to avoid referring
to `errno' in this file (sigh). */
-extern __sigismember (__const __sigset_t *, int);
-extern __sigaddset (__sigset_t *, int);
-extern __sigdelset (__sigset_t *, int);
+extern int __sigismember (__const __sigset_t *, int);
+extern int __sigaddset (__sigset_t *, int);
+extern int __sigdelset (__sigset_t *, int);
#ifndef _EXTERN_INLINE
#define _EXTERN_INLINE extern __inline
diff --git a/sysdeps/posix/Makefile b/sysdeps/posix/Makefile
index 3dd0f3e40e..12a16f7abd 100644
--- a/sysdeps/posix/Makefile
+++ b/sysdeps/posix/Makefile
@@ -25,7 +25,7 @@ cded-objdir-includes = $(patsubst -I$$cwd//%,-I/%,\
$(patsubst -I%,-I$$cwd/%,$(+includes)))
# $(BUILD_CFLAGS) needs to come last because it contains unwanted -Is.
$(common-objpfx)mk-stdiolim: $(sysdep_dir)/posix/mk-stdiolim.c \
- posix1_lim.h local_lim.h
+ ../posix/posix1_lim.h local_lim.h
cwd=`pwd`; cd $(objpfx).; \
$(BUILD_CC) $(cded-objdir-includes) $(BUILD_CFLAGS) \
$$cwd/$< -o $(patsubst $(common-objpfx)%,$(..)%,$@)
diff --git a/sysdeps/stub/lockfile.c b/sysdeps/stub/lockfile.c
index 0328071c08..fffa48afcf 100644
--- a/sysdeps/stub/lockfile.c
+++ b/sysdeps/stub/lockfile.c
@@ -17,7 +17,7 @@ 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. */
-typedef FILE;
+typedef int FILE;
void
diff --git a/sysdeps/unix/Makefile b/sysdeps/unix/Makefile
index 78eecd5296..a7bfa39c27 100644
--- a/sysdeps/unix/Makefile
+++ b/sysdeps/unix/Makefile
@@ -302,8 +302,7 @@ ifndef no_deps
endif
endif
-$(common-objpfx)s-proto.d: $(common-objpfx)%.d: $(..)sysdeps/unix/%.S \
- $(before-compile)
+$(common-objpfx)s-proto.d: $(common-objpfx)%.d: $(..)sysdeps/unix/%.S
$(+make-deps)
endif
diff --git a/sysdeps/unix/sysv/linux/m68k/syscall.S b/sysdeps/unix/sysv/linux/m68k/syscall.S
index d2328dc545..f392b751fc 100644
--- a/sysdeps/unix/sysv/linux/m68k/syscall.S
+++ b/sysdeps/unix/sysv/linux/m68k/syscall.S
@@ -19,7 +19,7 @@
#include <sysdep.h>
/* Please consult the file sysdeps/unix/sysv/linux/m68k/sysdep.h for
- more information about the value -4096 used below.*/
+ more information about the value -4095 used below.*/
.text
ENTRY (syscall)
@@ -27,8 +27,7 @@ ENTRY (syscall)
_DOARGS_5 (24) /* Frob arguments. */
trap &0 /* Do the system call. */
UNDOARGS_5 /* Unfrob arguments. */
- moveq.l &-4096, %d1
- cmp.l %d1, %d0 /* Check %d0 for error. */
+ cmp.l &-4095, %d0 /* Check %d0 for error. */
jcc syscall_error /* Jump to error handler if negative. */
rts /* Return to caller. */
PSEUDO_END (syscall)
diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep.h b/sysdeps/unix/sysv/linux/m68k/sysdep.h
index 46d5a7e48f..557f10cb9c 100644
--- a/sysdeps/unix/sysv/linux/m68k/sysdep.h
+++ b/sysdeps/unix/sysv/linux/m68k/sysdep.h
@@ -75,13 +75,12 @@ Cambridge, MA 02139, USA. */
a large offset. Therefore we must not anymore test for < 0, but test
for a real error by making sure the value in %d0 is a real error
number. Linus said he will make sure the no syscall returns a value
- in -1 .. -4095 as a valid result so we can savely test with -4096. */
+ in -1 .. -4095 as a valid result so we can savely test with -4095. */
#define PSEUDO(name, syscall_name, args) \
.text; \
ENTRY (name) \
DO_CALL (&SYS_ify (syscall_name), args); \
- moveq.l &-4096, %d1; \
- cmp.l %d1, %d0; \
+ cmp.l &-4095, %d0; \
jcc syscall_error
#undef PSEUDO_END
diff --git a/time/strftime.c b/time/strftime.c
index 4014826b50..2c5280dd16 100644
--- a/time/strftime.c
+++ b/time/strftime.c
@@ -1,20 +1,20 @@
/* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+ 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 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.
+ 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. */
+ 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. */
#ifdef HAVE_CONFIG_H
# include <config.h>
@@ -808,7 +808,7 @@ strftime (s, maxsize, format, tp)
DO_NUMBER (2, (tp->tm_year % 100 + 100) % 100);
case 'Z':
- cpy(zonelen, zone);
+ cpy (zonelen, zone);
break;
case 'z': /* GNU extension. */