1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-07 06:43:00 +03:00

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.
This commit is contained in:
Ulrich Drepper
1996-11-14 02:04:07 +00:00
parent b8591d1bdf
commit 26761c287f
42 changed files with 1396 additions and 257 deletions

107
ChangeLog
View File

@@ -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> Sun Nov 10 23:28:16 1996 Ulrich Drepper <drepper@cygnus.com>
* inet/getprtname_r.c: Reformat copyright. * inet/getprtname_r.c: Reformat copyright.

View File

@@ -188,7 +188,8 @@ $(includedir)/gnu/lib-names.h: $(common-objpfx)soversions.mk
echo; \ echo; \
(libs='$(all-sonames)';\ (libs='$(all-sonames)';\
for l in $$libs; do \ 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"; \ echo "#define $${upname}_SO $$l"; \
done;) | sort; \ done;) | sort; \
echo; \ echo; \

View File

@@ -605,7 +605,7 @@ rm -f $(@F).new; \
if test '$(@D)' = '$(<D)'; then \ if test '$(@D)' = '$(<D)'; then \
$(LN_S) $(<F) $(@F).new; \ $(LN_S) $(<F) $(@F).new; \
else \ else \
$(SHELL) $(common-objpfx)$(..)rellns-sh $< $(@F).new; \ $(SHELL) $(top_absdir)/rellns-sh $< $(@F).new; \
fi; \ fi; \
mv -f $(@F).new $(@F) mv -f $(@F).new $(@F)
endef endef

View File

@@ -87,8 +87,8 @@ contact <bug-glibc@prep.ai.mit.edu>
duplicated work. duplicated work.
[11] Write access function for netmasks, bootparams, publickey, automount, [11] Write access function for netmasks, bootparams, and automount
and aliases databases for nss_files and nss_db module. databases for nss_files and nss_db module.
The functions should be embedded in the nss scheme. This is not The functions should be embedded in the nss scheme. This is not
hard and not all services must be supported at once. hard and not all services must be supported at once.

1
aliases.h Normal file
View File

@@ -0,0 +1 @@
#include <inet/aliases.h>

View File

@@ -3,6 +3,7 @@
# Don't edit this file. Put configuration parameters in configparms instead. # Don't edit this file. Put configuration parameters in configparms instead.
# Installation prefixes. # Installation prefixes.
top_absdir = @top_absdir@
prefix = @prefix@ prefix = @prefix@
exec_prefix = @exec_prefix@ exec_prefix = @exec_prefix@

150
configure vendored
View File

@@ -2,7 +2,7 @@
# From configure.in CVSid # From configure.in CVSid
# Guess values for system-dependent variables and create Makefiles. # 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. # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
# #
# This configure script is free software; the Free Software Foundation # This configure script is free software; the Free Software Foundation
@@ -355,7 +355,7 @@ EOF
verbose=yes ;; verbose=yes ;;
-version | --version | --versio | --versi | --vers) -version | --version | --versio | --versi | --vers)
echo "configure generated by autoconf version 2.10" echo "configure generated by autoconf version 2.10.3"
exit 0 ;; exit 0 ;;
-with-* | --with-*) -with-* | --with-*)
@@ -550,6 +550,10 @@ fi
# This will get text that should go into config.make. # This will get text that should go into config.make.
config_vars= 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 for a --with-gmp argument and set gmp-srcdir in config.make.
# Check whether --with-gmp or --without-gmp was given. # Check whether --with-gmp or --without-gmp was given.
if test "${with_gmp+set}" = set; then if test "${with_gmp+set}" = set; then
@@ -682,7 +686,6 @@ done
if test -z "$ac_aux_dir"; then 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; } { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
fi fi
ac_config_mkinstalldirs=$ac_aux_dir/mkinstalldirs
ac_config_guess=$ac_aux_dir/config.guess ac_config_guess=$ac_aux_dir/config.guess
ac_config_sub=$ac_aux_dir/config.sub ac_config_sub=$ac_aux_dir/config.sub
ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. 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 fi
echo $ac_n "checking host system type""... $ac_c" 1>&6 echo $ac_n "checking host system type""... $ac_c" 1>&6
echo "configure:710: checking host system type" >&5
host_alias=$host host_alias=$host
case "$host_alias" in case "$host_alias" in
@@ -768,6 +772,7 @@ esac
# This can take a while to compute. # This can take a while to compute.
sysdep_dir=$srcdir/sysdeps sysdep_dir=$srcdir/sysdeps
echo $ac_n "checking sysdep dirs""... $ac_c" 1>&6 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. # 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'`" 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" # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh. # ./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 $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 test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
@@ -1010,21 +1016,18 @@ fi
fi fi
echo "$ac_t""$INSTALL" 1>&6 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}. # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution. # It thinks the first close brace ends the variable substitution.
test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' 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. # The makefiles need to use a different form to find it in $srcdir.
INSTALL='$(..)./install-sh' INSTALL="$top_absdir/install-sh -c"
fi fi
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 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 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@@ -1049,6 +1052,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args. # Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2 set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 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 if eval "test \"`echo '$''{'ac_cv_prog_MSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@@ -1079,6 +1083,7 @@ test -n "$MSGFMT" || MSGFMT=":"
echo $ac_n "checking build system type""... $ac_c" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6
echo "configure:1087: checking build system type" >&5
build_alias=$build build_alias=$build
case "$build_alias" in 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. # 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 set dummy ${ac_tool_prefix}gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 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 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else 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. # Extract the first word of "gcc cc", so it can be a program name with args.
set dummy gcc cc; ac_word=$2 set dummy gcc cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 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 if eval "test \"`echo '$''{'ac_cv_prog_BUILD_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@@ -1161,6 +1168,7 @@ fi
fi fi
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 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. # On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then if test -n "$CPP" && test -d "$CPP"; then
CPP= CPP=
@@ -1175,33 +1183,37 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser, # On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp. # not just through cpp.
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1179 "configure" #line 1187 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <assert.h> #include <assert.h>
Syntax Error Syntax Error
EOF EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" 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` ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then if test -z "$ac_err"; then
: :
else else
echo "$ac_err" >&5 echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest* rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp" CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1194 "configure" #line 1204 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <assert.h> #include <assert.h>
Syntax Error Syntax Error
EOF EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" 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` ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then if test -z "$ac_err"; then
: :
else else
echo "$ac_err" >&5 echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest* rm -rf conftest*
CPP=/lib/cpp CPP=/lib/cpp
fi 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. # 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 set dummy ${ac_tool_prefix}ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 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 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@@ -1249,6 +1262,7 @@ fi
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. # 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 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 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 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else 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. # Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2 set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 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 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@@ -1311,6 +1326,7 @@ fi
echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6 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 if eval "test \"`echo '$''{'libc_cv_signed_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@@ -1334,19 +1350,19 @@ EOF
fi fi
echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6 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 if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1342 "configure" #line 1359 "configure"
#include "confdefs.h" #include "confdefs.h"
#define __need_size_t #define __need_size_t
#define __need_wchar_t #define __need_wchar_t
#include <stddef.h> #include <stddef.h>
#define __need_NULL #define __need_NULL
#include <stddef.h> #include <stddef.h>
int main() { return 0; } int main() {
int t() {
size_t size; wchar_t wchar; size_t size; wchar_t wchar;
#ifdef offsetof #ifdef offsetof
#error stddef.h ignored __need_* #error stddef.h ignored __need_*
@@ -1354,10 +1370,12 @@ size_t size; wchar_t wchar;
if (&size == NULL || &wchar == NULL) abort (); if (&size == NULL || &wchar == NULL) abort ();
; return 0; } ; return 0; }
EOF 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* rm -rf conftest*
libc_cv_friendly_stddef=yes libc_cv_friendly_stddef=yes
else else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest* rm -rf conftest*
libc_cv_friendly_stddef=no libc_cv_friendly_stddef=no
fi fi
@@ -1372,6 +1390,7 @@ override stddef.h = # The installed <stddef.h> seems to be libc-friendly."
fi fi
echo $ac_n "checking whether we need to use -P to assemble .S files""... $ac_c" 1>&6 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 if eval "test \"`echo '$''{'libc_cv_need_minus_P'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@@ -1394,6 +1413,7 @@ asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives."
fi fi
echo $ac_n "checking for assembler global-symbol directive""... $ac_c" 1>&6 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 if eval "test \"`echo '$''{'libc_cv_asm_global_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@@ -1423,6 +1443,7 @@ EOF
fi fi
echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6 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 if eval "test \"`echo '$''{'libc_cv_asm_set_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@@ -1457,24 +1478,26 @@ fi
if test $elf != yes; then if test $elf != yes; then
echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6 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 if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1465 "configure" #line 1487 "configure"
#include "confdefs.h" #include "confdefs.h"
int main() { return 0; } int main() {
int t() {
asm (".section .init"); asm (".section .init");
asm (".section .fini"); asm (".section .fini");
asm (".text"); asm (".text");
; return 0; } ; return 0; }
EOF 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* rm -rf conftest*
libc_cv_have_initfini=yes libc_cv_have_initfini=yes
else else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest* rm -rf conftest*
libc_cv_have_initfini=no libc_cv_have_initfini=no
fi fi
@@ -1495,22 +1518,24 @@ if test $elf = yes; then
libc_cv_asm_underscores=no libc_cv_asm_underscores=no
else else
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6 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 if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 1503 "configure" #line 1527 "configure"
#include "confdefs.h" #include "confdefs.h"
asm ("_glibc_foobar:"); asm ("_glibc_foobar:");
int main() { return 0; } int main() {
int t() {
glibc_foobar (); glibc_foobar ();
; return 0; } ; return 0; }
EOF 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* rm -rf conftest*
libc_cv_asm_underscores=yes libc_cv_asm_underscores=yes
else else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest* rm -rf conftest*
libc_cv_asm_underscores=no libc_cv_asm_underscores=no
fi fi
@@ -1533,6 +1558,7 @@ if test $elf = yes; then
libc_cv_asm_weakext_directive=no libc_cv_asm_weakext_directive=no
else else
echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6 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 if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@@ -1555,6 +1581,7 @@ echo "$ac_t""$libc_cv_asm_weak_directive" 1>&6
if test $libc_cv_asm_weak_directive = no; then if test $libc_cv_asm_weak_directive = no; then
echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6 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 if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@@ -1591,6 +1618,7 @@ EOF
fi fi
echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6 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 if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@@ -1601,7 +1629,7 @@ __throw () {}
EOF EOF
if { ac_try='${CC-cc} $CFLAGS if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -Wl,--no-whole-archive -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 libc_cv_ld_no_whole_archive=yes
else else
libc_cv_ld_no_whole_archive=no 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_t""$libc_cv_ld_no_whole_archive" 1>&6
echo $ac_n "checking for gcc -fno-exceptions""... $ac_c" 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 if eval "test \"`echo '$''{'libc_cv_gcc_no_exceptions'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@@ -1622,7 +1651,7 @@ __throw () {}
EOF EOF
if { ac_try='${CC-cc} $CFLAGS if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -fno-exceptions -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 libc_cv_gcc_no_exceptions=yes
else else
libc_cv_gcc_no_exceptions=no libc_cv_gcc_no_exceptions=no
@@ -1674,6 +1703,7 @@ if test "$uname" = generic; then
fi fi
echo $ac_n "checking OS release for uname""... $ac_c" 1>&6 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 if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@@ -1695,6 +1725,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>&6
uname_release="$libc_cv_uname_release" uname_release="$libc_cv_uname_release"
echo $ac_n "checking OS version for uname""... $ac_c" 1>&6 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 if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@@ -1716,6 +1747,7 @@ else
fi fi
echo $ac_n "checking stdio selection""... $ac_c" 1>&6 echo $ac_n "checking stdio selection""... $ac_c" 1>&6
echo "configure:1751: checking stdio selection" >&5
case $stdio in case $stdio in
libio) cat >> confdefs.h <<\EOF libio) cat >> confdefs.h <<\EOF
@@ -1782,8 +1814,9 @@ cat > confcache <<\EOF
EOF EOF
# Ultrix sh set writes to stderr and can't be redirected directly, # 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. # 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 | (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 >> confcache
if cmp -s $cache_file confcache; then 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" 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 ;; exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-version | --version | --versio | --versi | --vers | --ver | --ve | --v) -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 ;; exit 0 ;;
-help | --help | --hel | --he | --h) -help | --help | --hel | --he | --h)
echo "\$ac_cs_usage"; exit 0 ;; echo "\$ac_cs_usage"; exit 0 ;;
@@ -1880,6 +1913,7 @@ s%@includedir@%$includedir%g
s%@oldincludedir@%$oldincludedir%g s%@oldincludedir@%$oldincludedir%g
s%@infodir@%$infodir%g s%@infodir@%$infodir%g
s%@mandir@%$mandir%g s%@mandir@%$mandir%g
s%@top_absdir@%$top_absdir%g
s%@subdirs@%$subdirs%g s%@subdirs@%$subdirs%g
s%@host@%$host%g s%@host@%$host%g
s%@host_alias@%$host_alias%g s%@host_alias@%$host_alias%g
@@ -1919,6 +1953,42 @@ s%@DEFINES@%$DEFINES%g
CEOF CEOF
EOF 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 cat >> $CONFIG_STATUS <<EOF
CONFIG_FILES=\${CONFIG_FILES-"config.make ${config_makefile} ${config_uname}"} 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" ;; *) ac_file_in="${ac_file}.in" ;;
esac 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. # Remove last slash and all that follows it. Not all systems have dirname.
ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` 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_given_INSTALL" ;;
*) INSTALL="$ac_dots$ac_given_INSTALL" ;; *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
esac esac
echo creating "$ac_file" echo creating "$ac_file"
rm -f "$ac_file" rm -f "$ac_file"
configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." 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%@srcdir@%$srcdir%g
s%@top_srcdir@%$top_srcdir%g s%@top_srcdir@%$top_srcdir%g
s%@INSTALL@%$INSTALL%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 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 # 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. # 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_eC=' '
ac_eD='%g' 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 for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
# Support "outfile[:infile]", defaulting infile="outfile.in". # Support "outfile[:infile]", defaulting infile="outfile.in".
case "$ac_file" in case "$ac_file" in
@@ -2184,13 +2261,16 @@ if test "$no_recursion" != yes; then
ac_popdir=`pwd` ac_popdir=`pwd`
cd $ac_config_dir 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 case "$srcdir" in
.) # No --srcdir option. We are building in place. .) # No --srcdir option. We are building in place.
ac_sub_srcdir=$srcdir ;; ac_sub_srcdir=$srcdir ;;
/*) # Absolute path. /*) # Absolute path.
ac_sub_srcdir=$srcdir/$ac_config_dir ;; ac_sub_srcdir=$srcdir/$ac_config_dir ;;
*) # Relative path. *) # Relative path.
ac_sub_srcdir=../$srcdir/$ac_config_dir ;; ac_sub_srcdir=$ac_dots$srcdir/$ac_config_dir ;;
esac esac
# Check for guested configure; otherwise get Cygnus style configure. # 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 if test -n "$ac_sub_configure"; then
# Make the cache file name correct relative to the subdirectory. # 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 case "$cache_file" in
/*) ac_sub_cache_file=$cache_file ;; /*) ac_sub_cache_file=$cache_file ;;
*) # Relative path. *) # Relative path.

View File

@@ -1,12 +1,16 @@
Dnl Process this file with autoconf to produce a configure script. Dnl Process this file with autoconf to produce a configure script.
AC_REVISION([$CVSid$]) 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_INIT(features.h)
AC_CONFIG_HEADER(config.h) AC_CONFIG_HEADER(config.h)
# This will get text that should go into config.make. # This will get text that should go into config.make.
config_vars= 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. # Check for a --with-gmp argument and set gmp-srcdir in config.make.
AC_ARG_WITH(gmp, dnl AC_ARG_WITH(gmp, dnl
--with-gmp=DIRECTORY find GMP source code in DIRECTORY (not needed), --with-gmp=DIRECTORY find GMP source code in DIRECTORY (not needed),
@@ -330,9 +334,9 @@ AC_MSG_RESULT(sysdeps/generic sysdeps/stub)
### Locate tools. ### Locate tools.
AC_PROG_INSTALL 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. # The makefiles need to use a different form to find it in $srcdir.
INSTALL='$(..)./install-sh' INSTALL="$top_absdir/install-sh -c"
fi fi
AC_PROG_LN_S AC_PROG_LN_S
AC_CHECK_PROGS(MSGFMT, msgfmt gmsgfmt, :) AC_CHECK_PROGS(MSGFMT, msgfmt gmsgfmt, :)

View File

@@ -12,9 +12,9 @@
# Library General Public License for more details. # Library General Public License for more details.
# You should have received a copy of the GNU Library General Public # 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 # License along with the GNU C Library; see the file COPYING.LIB. If not,
# not, write to the Free Software Foundation, Inc., 675 Mass Ave, # write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Cambridge, MA 02139, USA. # Boston, MA 02111-1307, USA.
# #
# Sub-makefile for inet portion of the library. # Sub-makefile for inet portion of the library.
@@ -22,7 +22,8 @@
subdir := inet subdir := inet
headers := netinet/ether.h netinet/in.h netinet/if_ether.h \ 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 distribute := netgroup.h
@@ -41,7 +42,8 @@ routines := ntohl ntohs htonl htons \
ether_aton ether_aton_r ether_hton ether_line \ ether_aton ether_aton_r ether_hton ether_line \
ether_ntoa ether_ntoa_r ether_ntoh \ ether_ntoa ether_ntoa_r ether_ntoh \
rcmd rexec ruserpass \ rcmd rexec ruserpass \
getnetgrent_r getnetgrent getnetgrent_r getnetgrent \
getaliasent_r getaliasent getaliasname getaliasname_r
# No warnings about losing BSD code. # No warnings about losing BSD code.
override +gccwarn := -w override +gccwarn := -w

61
inet/aliases.h Normal file
View File

@@ -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 */

26
inet/getaliasent.c Normal file
View File

@@ -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"

29
inet/getaliasent_r.c Normal file
View File

@@ -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"

30
inet/getaliasname.c Normal file
View File

@@ -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"

29
inet/getaliasname_r.c Normal file
View File

@@ -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"

View File

@@ -190,7 +190,7 @@ __internal_getnetgrent (char **hostp, char **userp, char **domainp,
struct __netgrent *datap, struct __netgrent *datap,
char *buffer, size_t buflen) 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; int no_more;
/* Initialize status to return if no more functions are found. */ /* 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 *); int (*setfct) (const char *, struct __netgrent *);
void (*endfct) (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 *known;
struct name_list *needed; struct name_list *needed;
int result = 0; int result = 0;

View File

@@ -1328,7 +1328,7 @@ collate_order_elem (struct linereader *lr, struct localedef_t *locale,
{ {
lr_error (lr, _("\ lr_error (lr, _("\
collation element `%.*s' appears more than once: ignore line"), 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); lr_ignore_rest (lr, 0);
result = -1; result = -1;
break; break;

View File

@@ -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 @code{__strto@var{XXX}_internal}. @var{XXX} here stands for any of the
above forms. All numeric conversion functions (including the functions above forms. All numeric conversion functions (including the functions
to process floating-point numbers) have such a counterpart. The 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 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 that the @var{tailptr} parameters allow to determine which part of the
input is processed. The @code{scanf} functions don't provide this input is processed. The @code{scanf} functions don't provide this
information. The drawback of using these functions is that they are not 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 a value of zero and the value returned in @code{*@var{tailptr}} is the
value of @var{string}. 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. this function may recognize additional locale-dependent syntax.
If the string has valid syntax for a floating-point number but the value 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. to @code{ERANGE} if there was overflow or underflow.
Since the value zero which is returned in the error case is also a valid 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 before calling this function. So one can test for failures after the
call since all failures set @code{errno} to a non-zero value. call since all failures set @code{errno} to a non-zero value.
@end deftypefun @end deftypefun

View File

@@ -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 POSIX.2 functionality and in fact @code{_POSIX_SOURCE} and
@code{_POSIX_C_SOURCE} get automatically be defined. @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. only available in BSD and SVID is included.
If the macro @code{_XOPEN_SOURCE_EXTENDED} is also defined, even more 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 (none)
@comment GNU @comment GNU
@defvr Macro _REENTRANT,_THREAD_SAFE @defvr Macro _REENTRANT
If you define one this macro, reentrant versions of several functions get @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 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. 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 The problem is that the standardization of the thread safe C library

View File

@@ -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 This stream must correspond to a file in the same format as the standard
password database file. 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 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-null and @var{result} contains a null
pointer. 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 the elements of the result structure, are placed in the additional
buffer or length @var{buflen} starting at @var{buffer}. 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 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. pointer.
@end deftypefun @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} 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} 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 contains the value @var{result_buf}). If the return value is non-zero
null there is no group in the data base with group ID @var{gid} or the 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. buffer @var{buffer} is too small to contain all the needed information.
In the later case the global @var{errno} variable is set to In the later case the global @var{errno} variable is set to
@code{ERANGE}. @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} 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} 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 contains the value @var{result_buf}). If the return value is non-zero
null there is no group in the data base with group name @var{name} or the 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. buffer @var{buffer} is too small to contain all the needed information.
In the later case the global @var{errno} variable is set to In the later case the global @var{errno} variable is set to
@code{ERANGE}. @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 This stream must correspond to a file in the same format as the standard
group database file. 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 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. pointer.
@end deftypefun @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 the elements of the result structure, are placed in the additional
buffer or length @var{buflen} starting at @var{buffer}. 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 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. pointer.
@end deftypefun @end deftypefun
@@ -1186,8 +1186,8 @@ in either of the input services must have the following form:
@end smallexample @end smallexample
Any of the fields in the triple can be empty which means anything Any of the fields in the triple can be empty which means anything
matches. While describing te functions we will see that the opposite matches. While describing the functions we will see that the opposite
case is useful as well. I.e., there shall be entries which will not 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 match any input. For entries like a name consisting of the single
character @code{-} shall be used. character @code{-} shall be used.
@@ -1290,7 +1290,7 @@ also true for the name @code{-} which should not match any other string
otherwise. otherwise.
The return value is @code{1} if an entry matching the given triple is 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 itself is not found, the netgroup does not contain the triple or
internal errors occured. internal errors occured.
@end deftypefun @end deftypefun

View File

@@ -12,9 +12,9 @@
# Library General Public License for more details. # Library General Public License for more details.
# You should have received a copy of the GNU Library General Public # 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 # License along with the GNU C Library; see the file COPYING.LIB. If not,
# not, write to the Free Software Foundation, Inc., # write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # Boston, MA 02111-1307, USA.
# #
# Makefile for name service switch. # 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 # Caution: if you add a database here, you must add its real name
# in databases.def, too. # in databases.def, too.
databases = proto service hosts network grp pwd rpc ethers \ 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. # Specify rules for the nss_* modules. We have some services.
services := files dns db services := files dns db

22
nss/alias-lookup.c Normal file
View File

@@ -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"

View File

@@ -1,25 +1,26 @@
/* List of all databases defined for the NSS in GNU C Library. /* List of all databases defined for the NSS in GNU C Library.
Copyright (C) 1996 Free Software Foundation, Inc. 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.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
The GNU C Library is free software; you can redistribute it and/or 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 modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version. License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful, The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU Library General Public 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 License along with the GNU C Library; see the file COPYING.LIB. If not,
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
/* This list must be kept sorted!!! */ /* This list must be kept sorted!!! */
DEFINE_DATABASE (aliases)
DEFINE_DATABASE (ethers) DEFINE_DATABASE (ethers)
DEFINE_DATABASE (group) DEFINE_DATABASE (group)
DEFINE_DATABASE (hosts) DEFINE_DATABASE (hosts)
@@ -27,6 +28,7 @@ DEFINE_DATABASE (netgroup)
DEFINE_DATABASE (networks) DEFINE_DATABASE (networks)
DEFINE_DATABASE (passwd) DEFINE_DATABASE (passwd)
DEFINE_DATABASE (protocols) DEFINE_DATABASE (protocols)
DEFINE_DATABASE (publickey)
DEFINE_DATABASE (rpc) DEFINE_DATABASE (rpc)
DEFINE_DATABASE (services) DEFINE_DATABASE (services)
DEFINE_DATABASE (shadow) DEFINE_DATABASE (shadow)

View File

@@ -1,22 +1,26 @@
/* Copyright (C) 1996 Free Software Foundation, Inc. /* 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 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 modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version. License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful, The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU Library General Public 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 License along with the GNU C Library; see the file COPYING.LIB. If not,
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */ 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: *| |* 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, char *buffer, size_t buflen,
LOOKUP_TYPE **result H_ERRNO_PARM); LOOKUP_TYPE **result H_ERRNO_PARM);
/* We need to protect the dynamic buffer handling. */
__libc_lock_define_initialized (static, lock);
LOOKUP_TYPE * LOOKUP_TYPE *
FUNCTION_NAME (ADD_PARAMS) FUNCTION_NAME (ADD_PARAMS)
{ {
static char buffer[BUFLEN]; static char *buffer;
static size_t buffer_size;
static LOOKUP_TYPE resbuf; static LOOKUP_TYPE resbuf;
LOOKUP_TYPE *result; LOOKUP_TYPE *result;
int save;
if (INTERNAL (REENTRANT_NAME) (ADD_VARIABLES, &resbuf, buffer, /* Get lock. */
BUFLEN, &result H_ERRNO_VAR) != 0) __libc_lock_lock (lock);
/* Error occured. */
return NULL; 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;
}
/* Release lock. Preserve error value. */
save = errno;
__libc_lock_unlock (lock);
__set_errno (save);
return result; return result;
} }

View File

@@ -71,7 +71,7 @@
/* Type of the lookup function we need here. */ /* 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); H_ERRNO_PARM);
/* Some usages of this file might use this variable. */ /* Some usages of this file might use this variable. */

View File

@@ -1,20 +1,24 @@
/* Copyright (C) 1996 Free Software Foundation, Inc. /* 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 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 modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version. License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful, The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU Library General Public 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 License along with the GNU C Library; see the file COPYING.LIB. If not,
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
#include <errno.h>
#include <libc-lock.h>
#include <stdlib.h>
#include "nsswitch.h" #include "nsswitch.h"
@@ -55,18 +59,47 @@ extern int INTERNAL (REENTRANT_GETNAME) (LOOKUP_TYPE *resbuf, char *buffer,
size_t buflen, LOOKUP_TYPE **result size_t buflen, LOOKUP_TYPE **result
H_ERRNO_PARM); H_ERRNO_PARM);
/* We need to protect the dynamic buffer handling. */
__libc_lock_define_initialized (static, lock);
LOOKUP_TYPE * LOOKUP_TYPE *
GETFUNC_NAME (void) GETFUNC_NAME (void)
{ {
static char buffer[BUFLEN]; static char *buffer;
static size_t buffer_size;
static LOOKUP_TYPE resbuf; static LOOKUP_TYPE resbuf;
LOOKUP_TYPE *result; LOOKUP_TYPE *result = NULL;
int save;
if (INTERNAL (REENTRANT_GETNAME) (&resbuf, buffer, BUFLEN, &result /* Get lock. */
H_ERRNO_VAR) != 0) __libc_lock_lock (lock);
/* Errors occured. */
return NULL; 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;
}
/* Release lock. Preserve error value. */
save = errno;
__libc_lock_unlock (lock);
__set_errno (save);
return result; return result;
} }

View File

@@ -90,7 +90,7 @@ typedef int (*set_function) (STAYOPEN);
typedef int (*end_function) (void); typedef int (*end_function) (void);
/* Prototype for the setXXXent functions we use here. */ /* 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 /* This handle for the NSS data base is shared between all

View File

@@ -1,21 +1,21 @@
/* Common code for DB-based databases in nss_db module. /* Common code for DB-based databases in nss_db module.
Copyright (C) 1996 Free Software Foundation, Inc. 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 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 modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version. License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful, The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU Library General Public 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 License along with the GNU C Library; see the file COPYING.LIB. If not,
not, write to the Free Software Foundation, Inc., 675 Mass Ave, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Cambridge, MA 02139, USA. */ Boston, MA 02111-1307, USA. */
#include <db.h> #include <db.h>
#include <fcntl.h> #include <fcntl.h>
@@ -168,7 +168,7 @@ lookup (const DBT *key, struct STRUCTURE *result,
enum nss_status \ enum nss_status \
_nss_db_get##name##_r (proto, \ _nss_db_get##name##_r (proto, \
struct STRUCTURE *result, \ struct STRUCTURE *result, \
char *buffer, int buflen H_ERRNO_PROTO) \ char *buffer, size_t buflen H_ERRNO_PROTO) \
{ \ { \
DBT key; \ DBT key; \
enum nss_status status; \ enum nss_status status; \
@@ -189,7 +189,7 @@ _nss_db_get##name##_r (proto, \
/* Return the next entry from the database file, doing locking. */ /* Return the next entry from the database file, doing locking. */
enum nss_status enum nss_status
CONCAT(_nss_db_get,ENTNAME_r) (struct STRUCTURE *result, 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. */ /* Return next entry in host file. */
enum nss_status status; enum nss_status status;

235
nss/nss_db/db-alias.c Normal file
View File

@@ -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;
}

View File

@@ -20,6 +20,7 @@
#include <stdio.h> #include <stdio.h>
#include <ctype.h> #include <ctype.h>
#include <assert.h> #include <assert.h>
#include <errno.h>
#include <libc-lock.h> #include <libc-lock.h>
#include "nsswitch.h" #include "nsswitch.h"
@@ -39,13 +40,13 @@
#define DATAFILE "/etc/" DATABASE #define DATAFILE "/etc/" DATABASE
#ifdef NEED_H_ERRNO #ifdef NEED_H_ERRNO
#define H_ERRNO_PROTO , int *herrnop # define H_ERRNO_PROTO , int *herrnop
#define H_ERRNO_ARG , herrnop # define H_ERRNO_ARG , herrnop
#define H_ERRNO_SET(val) (*herrnop = (val)) # define H_ERRNO_SET(val) (*herrnop = (val))
#else #else
#define H_ERRNO_PROTO # define H_ERRNO_PROTO
#define H_ERRNO_ARG # define H_ERRNO_ARG
#define H_ERRNO_SET(val) ((void) 0) # define H_ERRNO_SET(val) ((void) 0)
#endif #endif
/* Locks the static variables in this file. */ /* Locks the static variables in this file. */
@@ -59,10 +60,10 @@ static enum { none, getent, getby } last_use;
static int keep_stream; static int keep_stream;
/* Open database file if not already opened. */ /* Open database file if not already opened. */
static int static enum nss_status
internal_setent (int stayopen) internal_setent (int stayopen)
{ {
int status = NSS_STATUS_SUCCESS; enum nss_status status = NSS_STATUS_SUCCESS;
if (stream == NULL) if (stream == NULL)
{ {
@@ -83,10 +84,10 @@ internal_setent (int stayopen)
/* Thread-safe, exported version of that. */ /* Thread-safe, exported version of that. */
int enum nss_status
CONCAT(_nss_files_set,ENTNAME) (int stayopen) CONCAT(_nss_files_set,ENTNAME) (int stayopen)
{ {
int status; enum nss_status status;
__libc_lock_lock (lock); __libc_lock_lock (lock);
@@ -120,7 +121,7 @@ internal_endent (void)
/* Thread-safe, exported version of that. */ /* Thread-safe, exported version of that. */
int enum nss_status
CONCAT(_nss_files_end,ENTNAME) (void) CONCAT(_nss_files_end,ENTNAME) (void)
{ {
__libc_lock_lock (lock); __libc_lock_lock (lock);
@@ -145,16 +146,6 @@ internal_getent (struct STRUCTURE *result,
struct parser_data *data = (void *) buffer; struct parser_data *data = (void *) buffer;
int linebuflen = buffer + buflen - data->linebuffer; 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) if (buflen < (int) sizeof *data + 1)
{ {
__set_errno (ERANGE); __set_errno (ERANGE);
@@ -163,6 +154,9 @@ internal_getent (struct STRUCTURE *result,
do do
{ {
/* Terminate the line so that we can test for overflow. */
data->linebuffer[linebuflen - 1] = '\0';
p = fgets (data->linebuffer, linebuflen, stream); p = fgets (data->linebuffer, linebuflen, stream);
if (p == NULL) if (p == NULL)
{ {
@@ -170,17 +164,23 @@ internal_getent (struct STRUCTURE *result,
H_ERRNO_SET (HOST_NOT_FOUND); H_ERRNO_SET (HOST_NOT_FOUND);
return NSS_STATUS_NOTFOUND; return NSS_STATUS_NOTFOUND;
} }
else if (data->linebuffer[linebuflen - 1] != '\0')
/* Terminate the line for any case. */ {
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. */ /* Skip leading blanks. */
while (isspace (*p)) while (isspace (*p))
++p; ++p;
} while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */ }
/* Parse the line. If it is invalid, loop to while (*p == '\0' || *p == '#' /* Ignore empty and comment lines. */
get the next line of the file to parse. */ /* Parse the line. If it is invalid, loop to get the next
! parse_line (p, result, data, buflen)); line of the file to parse. */
|| ! parse_line (p, result, data, buflen));
/* Filled in RESULT with the next entry from the database file. */ /* Filled in RESULT with the next entry from the database file. */
return NSS_STATUS_SUCCESS; return NSS_STATUS_SUCCESS;
@@ -188,15 +188,21 @@ internal_getent (struct STRUCTURE *result,
/* Return the next entry from the database file, doing locking. */ /* Return the next entry from the database file, doing locking. */
int enum nss_status
CONCAT(_nss_files_get,ENTNAME_r) (struct STRUCTURE *result, 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. */ /* Return next entry in host file. */
int status = NSS_STATUS_SUCCESS; enum nss_status status = NSS_STATUS_SUCCESS;
__libc_lock_lock (lock); __libc_lock_lock (lock);
/* Be prepared that the set*ent function was not called before. */
if (stream == NULL)
status = internal_setent (0);
if (status != NSS_STATUS_SUCCESS)
{
/* If the last use was not by the getent function we need the /* If the last use was not by the getent function we need the
position the stream. */ position the stream. */
if (last_use != getent) if (last_use != getent)
@@ -209,8 +215,15 @@ CONCAT(_nss_files_get,ENTNAME_r) (struct STRUCTURE *result,
{ {
status = internal_getent (result, buffer, buflen H_ERRNO_ARG); status = internal_getent (result, buffer, buflen H_ERRNO_ARG);
/* Remember this position. */ /* 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); fgetpos (stream, &position);
else
/* We must make sure we reposition the stream the next call. */
last_use = none;
}
} }
__libc_lock_unlock (lock); __libc_lock_unlock (lock);
@@ -234,15 +247,17 @@ CONCAT(_nss_files_get,ENTNAME_r) (struct STRUCTURE *result,
enum nss_status \ enum nss_status \
_nss_files_get##name##_r (proto, \ _nss_files_get##name##_r (proto, \
struct STRUCTURE *result, \ struct STRUCTURE *result, \
char *buffer, int buflen H_ERRNO_PROTO) \ char *buffer, size_t buflen H_ERRNO_PROTO) \
{ \ { \
enum nss_status status; \ enum nss_status status; \
\ \
__libc_lock_lock (lock); \ __libc_lock_lock (lock); \
\ \
/* Reset file pointer to beginning or open file. */ \ /* Reset file pointer to beginning or open file. */ \
internal_setent (keep_stream); \ status = internal_setent (keep_stream); \
\ \
if (status == NSS_STATUS_SUCCESS) \
{ \
/* Tell getent function that we have repositioned the file pointer. */ \ /* Tell getent function that we have repositioned the file pointer. */ \
last_use = getby; \ last_use = getby; \
\ \
@@ -252,6 +267,7 @@ _nss_files_get##name##_r (proto, \
\ \
if (! keep_stream) \ if (! keep_stream) \
internal_endent (); \ internal_endent (); \
} \
\ \
__libc_lock_unlock (lock); \ __libc_lock_unlock (lock); \
\ \

424
nss/nss_files/files-alias.c Normal file
View File

@@ -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;
}

View File

@@ -39,7 +39,7 @@
#define CONCAT1(a,b) a##b #define CONCAT1(a,b) a##b
#ifndef STRUCTURE #ifndef STRUCTURE
#define STRUCTURE ENTNAME # define STRUCTURE ENTNAME
#endif #endif
@@ -47,9 +47,9 @@ struct parser_data
{ {
#ifdef ENTDATA #ifdef ENTDATA
struct ENTDATA 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 #else
#define ENTDATA_DECL(data) # define ENTDATA_DECL(data)
#endif #endif
char linebuffer[0]; char linebuffer[0];
}; };
@@ -57,11 +57,11 @@ struct parser_data
#ifdef ENTDATA #ifdef ENTDATA
/* The function can't be exported, because the entdata structure /* The function can't be exported, because the entdata structure
is defined only in files-foo.c. */ is defined only in files-foo.c. */
#define parser_stclass static inline # define parser_stclass static inline
#else #else
/* Export the line parser function so it can be used in nss_db. */ /* Export the line parser function so it can be used in nss_db. */
#define parser_stclass /* Global */ # define parser_stclass /* Global */
#define parse_line CONCAT(_nss_files_parse_,ENTNAME) # define parse_line CONCAT(_nss_files_parse_,ENTNAME)
#endif #endif
@@ -71,20 +71,20 @@ struct parser_data
extern int parse_line (char *line, struct STRUCTURE *result, extern int parse_line (char *line, struct STRUCTURE *result,
struct parser_data *data, int datalen); struct parser_data *data, int datalen);
#define LINE_PARSER(EOLSET, BODY) /* Do nothing */ # define LINE_PARSER(EOLSET, BODY) /* Do nothing */
#else #else
/* Define a line parsing function. */ /* Define a line parsing function. */
#define LINE_PARSER(EOLSET, BODY) \ # define LINE_PARSER(EOLSET, BODY) \
parser_stclass int \ parser_stclass int \
parse_line (char *line, struct STRUCTURE *result, \ parse_line (char *line, struct STRUCTURE *result, \
struct parser_data *data, int datalen) \ struct parser_data *data, int datalen) \
{ \ { \
ENTDATA_DECL (data) \ ENTDATA_DECL (data) \
char *p = strpbrk (line, EOLSET "\n"); \ char *p = strpbrk (line, EOLSET "\n"); \
if (p) \ if (p != NULL) \
*p = '\0'; \ *p = '\0'; \
BODY; \ BODY; \
TRAILING_LIST_PARSER; \ 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; \ variable = line; \
while (*line != '\0' && !terminator_p (*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; \ char *endp; \
variable = convert (strtol (line, &endp, base)); \ variable = convert (strtol (line, &endp, base)); \
@@ -121,7 +121,7 @@ parse_line (char *line, struct STRUCTURE *result, \
line = endp; \ 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; \ char *endp; \
if (*line == '\0') \ if (*line == '\0') \
@@ -139,14 +139,14 @@ parse_line (char *line, struct STRUCTURE *result, \
line = endp; \ line = endp; \
} }
#define ISCOLON(c) ((c) == ':') # define ISCOLON(c) ((c) == ':')
#ifndef TRAILING_LIST_MEMBER # ifndef TRAILING_LIST_MEMBER
#define TRAILING_LIST_PARSER /* Nothing to do. */ # define TRAILING_LIST_PARSER /* Nothing to do. */
#else # else
#define TRAILING_LIST_PARSER \ # define TRAILING_LIST_PARSER \
{ \ { \
char **list = parse_list (line, data, datalen); \ char **list = parse_list (line, data, datalen); \
if (list) \ if (list) \
@@ -198,10 +198,10 @@ parse_list (char *line, struct parser_data *data, int datalen)
*line = '\0'; *line = '\0';
do do
++line; ++line;
while (TRAILING_LIST_SEPARATOR_P (*line)); while (isspace (*line));
elt = line; elt = line;
} }
else if (*line == '\0' || *line == '\n') else if (*line == '\0')
{ {
/* End of the line. */ /* End of the line. */
if (line > elt) if (line > elt)
@@ -219,7 +219,7 @@ parse_list (char *line, struct parser_data *data, int datalen)
return list; return list;
} }
#endif /* TRAILING_LIST_MEMBER */ # endif /* TRAILING_LIST_MEMBER */
#endif /* EXTERN_PARSER */ #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. */ /* This is defined by db-*.c to include "../nss_db/db-XXX.c" instead. */
#ifndef GENERIC #ifndef GENERIC
#define GENERIC "files-XXX.c" # define GENERIC "files-XXX.c"
#endif #endif

View File

@@ -72,7 +72,7 @@ __BEGIN_DECLS
/* Encryption is present. */ /* Encryption is present. */
#define _XOPEN_CRYPT 1 #define _XOPEN_CRYPT 1
/* The enchanced internationalization capabilities accoring to XPG4.2 /* The enchanced internationalization capabilities according to XPG4.2
are present. */ are present. */
#define _XOPEN_ENH_I18N 1 #define _XOPEN_ENH_I18N 1

View File

@@ -1 +1 @@
BIND-4.9.5-T6B BIND-4.9.5-REL

View File

@@ -97,9 +97,7 @@ inet_net_pton_ipv4(src, dst, size)
int n, ch, tmp, dirty, bits; int n, ch, tmp, dirty, bits;
const u_char *odst = dst; const u_char *odst = dst;
bits = -1;
ch = *src++; ch = *src++;
if (ch == '0' && (src[0] == 'x' || src[0] == 'X') if (ch == '0' && (src[0] == 'x' || src[0] == 'X')
&& isascii(src[1]) && isxdigit(src[1])) { && isascii(src[1]) && isxdigit(src[1])) {
/* Hexadecimal: Eat nybble string. */ /* Hexadecimal: Eat nybble string. */
@@ -150,6 +148,7 @@ inet_net_pton_ipv4(src, dst, size)
} else } else
goto enoent; goto enoent;
bits = -1;
if (ch == '/' && isascii(src[0]) && isdigit(src[0]) && dst > odst) { if (ch == '/' && isascii(src[0]) && isdigit(src[0]) && dst > odst) {
/* CIDR width specifier. Nothing can follow it. */ /* CIDR width specifier. Nothing can follow it. */
ch = *src++; /* Skip over the /. */ ch = *src++; /* Skip over the /. */
@@ -163,6 +162,8 @@ inet_net_pton_ipv4(src, dst, size)
isascii(ch) && isdigit(ch)); isascii(ch) && isdigit(ch));
if (ch != '\0') if (ch != '\0')
goto enoent; goto enoent;
if (bits > 32)
goto emsgsize;
} }
/* Firey death and destruction unless we prefetched EOS. */ /* Firey death and destruction unless we prefetched EOS. */
@@ -174,14 +175,19 @@ inet_net_pton_ipv4(src, dst, size)
goto enoent; goto enoent;
/* If no CIDR spec was given, infer width from net class. */ /* If no CIDR spec was given, infer width from net class. */
if (bits == -1) { if (bits == -1) {
if (*odst >= 224) if (*odst >= 240) /* Class E */
bits = 32;
else if (*odst >= 224) /* Class D */
bits = 4; bits = 4;
else if (*odst >= 192) else if (*odst >= 192) /* Class C */
bits = 24; bits = 24;
else if (*odst >= 128) else if (*odst >= 128) /* Class B */
bits = 16; bits = 16;
else else /* Class A */
bits = 8; 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. */ /* Extend network to cover the actual mask. */
while (bits > ((dst - odst) * 8)) { while (bits > ((dst - odst) * 8)) {

View File

@@ -295,7 +295,7 @@ __fp_nquery(msg, len, file)
*/ */
hp = (HEADER *)msg; hp = (HEADER *)msg;
cp = msg + HFIXEDSZ; cp = msg + HFIXEDSZ;
endMark = cp + len; endMark = msg + len;
if ((!_res.pfcode) || (_res.pfcode & RES_PRF_HEADX) || hp->rcode) { if ((!_res.pfcode) || (_res.pfcode & RES_PRF_HEADX) || hp->rcode) {
fprintf(file, ";; ->>HEADER<<- opcode: %s, status: %s, id: %d", fprintf(file, ";; ->>HEADER<<- opcode: %s, status: %s, id: %d",
_res_opcodes[hp->opcode], _res_opcodes[hp->opcode],

View File

@@ -50,9 +50,9 @@ typedef unsigned long int __sigset_t;
call we know fails with EINVAL (kludge city!), so as to avoid referring call we know fails with EINVAL (kludge city!), so as to avoid referring
to `errno' in this file (sigh). */ to `errno' in this file (sigh). */
extern __sigismember (__const __sigset_t *, int); extern int __sigismember (__const __sigset_t *, int);
extern __sigaddset (__sigset_t *, int); extern int __sigaddset (__sigset_t *, int);
extern __sigdelset (__sigset_t *, int); extern int __sigdelset (__sigset_t *, int);
#ifndef _EXTERN_INLINE #ifndef _EXTERN_INLINE
#define _EXTERN_INLINE extern __inline #define _EXTERN_INLINE extern __inline

View File

@@ -25,7 +25,7 @@ cded-objdir-includes = $(patsubst -I$$cwd//%,-I/%,\
$(patsubst -I%,-I$$cwd/%,$(+includes))) $(patsubst -I%,-I$$cwd/%,$(+includes)))
# $(BUILD_CFLAGS) needs to come last because it contains unwanted -Is. # $(BUILD_CFLAGS) needs to come last because it contains unwanted -Is.
$(common-objpfx)mk-stdiolim: $(sysdep_dir)/posix/mk-stdiolim.c \ $(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).; \ cwd=`pwd`; cd $(objpfx).; \
$(BUILD_CC) $(cded-objdir-includes) $(BUILD_CFLAGS) \ $(BUILD_CC) $(cded-objdir-includes) $(BUILD_CFLAGS) \
$$cwd/$< -o $(patsubst $(common-objpfx)%,$(..)%,$@) $$cwd/$< -o $(patsubst $(common-objpfx)%,$(..)%,$@)

View File

@@ -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, not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
typedef FILE; typedef int FILE;
void void

View File

@@ -302,8 +302,7 @@ ifndef no_deps
endif endif
endif endif
$(common-objpfx)s-proto.d: $(common-objpfx)%.d: $(..)sysdeps/unix/%.S \ $(common-objpfx)s-proto.d: $(common-objpfx)%.d: $(..)sysdeps/unix/%.S
$(before-compile)
$(+make-deps) $(+make-deps)
endif endif

View File

@@ -19,7 +19,7 @@
#include <sysdep.h> #include <sysdep.h>
/* Please consult the file sysdeps/unix/sysv/linux/m68k/sysdep.h for /* 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 .text
ENTRY (syscall) ENTRY (syscall)
@@ -27,8 +27,7 @@ ENTRY (syscall)
_DOARGS_5 (24) /* Frob arguments. */ _DOARGS_5 (24) /* Frob arguments. */
trap &0 /* Do the system call. */ trap &0 /* Do the system call. */
UNDOARGS_5 /* Unfrob arguments. */ UNDOARGS_5 /* Unfrob arguments. */
moveq.l &-4096, %d1 cmp.l &-4095, %d0 /* Check %d0 for error. */
cmp.l %d1, %d0 /* Check %d0 for error. */
jcc syscall_error /* Jump to error handler if negative. */ jcc syscall_error /* Jump to error handler if negative. */
rts /* Return to caller. */ rts /* Return to caller. */
PSEUDO_END (syscall) PSEUDO_END (syscall)

View File

@@ -75,13 +75,12 @@ Cambridge, MA 02139, USA. */
a large offset. Therefore we must not anymore test for < 0, but test 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 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 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) \ #define PSEUDO(name, syscall_name, args) \
.text; \ .text; \
ENTRY (name) \ ENTRY (name) \
DO_CALL (&SYS_ify (syscall_name), args); \ DO_CALL (&SYS_ify (syscall_name), args); \
moveq.l &-4096, %d1; \ cmp.l &-4095, %d0; \
cmp.l %d1, %d0; \
jcc syscall_error jcc syscall_error
#undef PSEUDO_END #undef PSEUDO_END

View File

@@ -1,20 +1,20 @@
/* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc. /* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or 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 modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version. License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful, The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU Library General Public 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 License along with the GNU C Library; see the file COPYING.LIB. If not,
not, write to the Free Software Foundation, Inc., 675 Mass Ave, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Cambridge, MA 02139, USA. */ Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
# include <config.h> # include <config.h>
@@ -808,7 +808,7 @@ strftime (s, maxsize, format, tp)
DO_NUMBER (2, (tp->tm_year % 100 + 100) % 100); DO_NUMBER (2, (tp->tm_year % 100 + 100) % 100);
case 'Z': case 'Z':
cpy(zonelen, zone); cpy (zonelen, zone);
break; break;
case 'z': /* GNU extension. */ case 'z': /* GNU extension. */