diff options
author | Ulrich Drepper <drepper@redhat.com> | 1996-11-14 02:04:07 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1996-11-14 02:04:07 +0000 |
commit | 26761c287fdf4a9997b7c62b5c64cec84ce2c329 (patch) | |
tree | 2f7ac77185952d09a03a988f3176e18e476fe7ee | |
parent | b8591d1bdf48f5560a3a8e1326758a5aa5e529cf (diff) | |
download | glibc-26761c287fdf4a9997b7c62b5c64cec84ce2c329.tar glibc-26761c287fdf4a9997b7c62b5c64cec84ce2c329.tar.gz glibc-26761c287fdf4a9997b7c62b5c64cec84ce2c329.tar.bz2 glibc-26761c287fdf4a9997b7c62b5c64cec84ce2c329.zip |
update from main archive 961113
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.
char *' and `int'.
PROJ_ID are used.
42 files changed, 1397 insertions, 258 deletions
@@ -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> @@ -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; \ @@ -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 @@ -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@ @@ -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. */ |