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:
107
ChangeLog
107
ChangeLog
@@ -1,3 +1,110 @@
|
|||||||
|
Thu Nov 14 02:00:33 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* inet/Makefile (headers): Add aliases.h.
|
||||||
|
(routines): Add getaliasent_r, getaliasent, getaliasname, and
|
||||||
|
getaliasname_r.
|
||||||
|
* aliases.h: New file.
|
||||||
|
* inet/aliases.h: New file.
|
||||||
|
* inet/getaliasent.c: New file.
|
||||||
|
* inet/getaliasent_r.c: New file.
|
||||||
|
* inet/getaliasname.c: New file.
|
||||||
|
* inet/getaliasname_r.c: New file.
|
||||||
|
* nss/Makefile (databases): Add alias.
|
||||||
|
* nss/alias-lookup.c: New file.
|
||||||
|
* nss/databases.def: Add aliases and publickey.
|
||||||
|
* nss/nss_db/db-alias.c: New file.
|
||||||
|
* nss/nss_files/files-alias.c: New file.
|
||||||
|
|
||||||
|
* inet/getnetgrent_r.c (__internal_getnetgrent): Buffer length
|
||||||
|
argument to lookup function is of type size_t.
|
||||||
|
(innetgr): Likewise.
|
||||||
|
* nss/getXXbyYY_r.c: Likewise.
|
||||||
|
* nss/getXXent_r.c: Likewise.
|
||||||
|
* nss/nss_db/db-XXX.c: Likewise.
|
||||||
|
|
||||||
|
* nss/getXXbyYY.c: Don't provide static buffer. Resize if call
|
||||||
|
failed because buffer was too small.
|
||||||
|
* nss/getXXent.c: Likewise.
|
||||||
|
|
||||||
|
* nss/nss_files/files-XXX.c: Correct handling of shared file. The
|
||||||
|
getXXent_r function now uses f[gs]etpos to get to the correct
|
||||||
|
position.
|
||||||
|
|
||||||
|
* nss/nss_files/files-parse.c: Indent lines for better readability.
|
||||||
|
|
||||||
|
* malloc/obstack.c: Add new variable obstack_alloc_failed_handler
|
||||||
|
and new function print_and_abort. Remove all references to
|
||||||
|
alloc_failed field.
|
||||||
|
Add new function _obstack_memory_used.
|
||||||
|
* malloc/obstack.h (struct obstack): Remove field alloc_field.
|
||||||
|
Remove all references to alloc_failed field.
|
||||||
|
Add prototype for _obstack_memory_used.
|
||||||
|
|
||||||
|
* posix/unistd.h: Correct typo.
|
||||||
|
|
||||||
|
Wed Nov 13 03:09:16 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* configure.in: Require at least autoconf-2.10.2.
|
||||||
|
|
||||||
|
Tue Nov 12 03:35:01 1996 Christian von Roques <roques@pond.sub.org>
|
||||||
|
|
||||||
|
* malloc/obstack.h: Add new macro `obstack_make_room'.
|
||||||
|
* malloc/obstack.c: Add function implementation for
|
||||||
|
`obstack_make_room'.
|
||||||
|
|
||||||
|
Mon Nov 11 13:54:04 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
Update to BIND-4.9.5-REL.
|
||||||
|
* resolv/Banner: Set to 4.9.5-REL.
|
||||||
|
* resolv/inet_net_pton.c: Was doing bad things to subnets and b'casts.
|
||||||
|
* resolv/res_debug.c (__fp_nquery): Could read past end of buffer.
|
||||||
|
(fix from BIND 8.1)
|
||||||
|
|
||||||
|
* config.make.in: Add definition for top_absdir.
|
||||||
|
* Makerules (make-link): Fix path to rellns-sh script.
|
||||||
|
|
||||||
|
Sat Nov 9 02:15:24 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* posix/unistd.h: Fix comment.
|
||||||
|
|
||||||
|
* manual/arith.texi: Fix misspellings. Use `zero', not `null',
|
||||||
|
when talking about numbers.
|
||||||
|
* manual/users.texi: Likewise.
|
||||||
|
* manual/creature.texi: Likewise. Use @defvarx for a secondary
|
||||||
|
description header.
|
||||||
|
|
||||||
|
Sat Nov 9 19:25:11 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* sysdeps/posix/Makefile ($(common-objpfx)mk-stdiolim): Depend on
|
||||||
|
the real posix1_lim.h file so that it works in all subdirs, not
|
||||||
|
only in posix.
|
||||||
|
|
||||||
|
Sat Nov 9 02:08:34 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* Makefile ($(includedir)/gnu/lib-names.h): Quote arguments of tr.
|
||||||
|
|
||||||
|
Sat Nov 9 02:06:17 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* sysdeps/unix/Makefile ($(common-objpfx)s-proto.d): Don't depend
|
||||||
|
on $(before-compile) which hasn't been properly setup yet at this
|
||||||
|
point.
|
||||||
|
|
||||||
|
Sat Nov 9 02:02:48 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* sysdeps/generic/sigset.h: Don't use implicit int which will
|
||||||
|
probably require a diagnostic in the next revision of the C
|
||||||
|
standard.
|
||||||
|
* sysdeps/stub/lockfile.c: Likewise.
|
||||||
|
|
||||||
|
Sat Nov 9 01:57:17 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/m68k/syscall.S: Correct last change.
|
||||||
|
* sysdeps/unix/sysv/linux/m68k/sysdep.h: Likewise.
|
||||||
|
|
||||||
|
Mon Nov 11 02:53:14 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* time/strftime.c: Update copyright. Small cosmetic changes.
|
||||||
|
|
||||||
Sun Nov 10 23:28:16 1996 Ulrich Drepper <drepper@cygnus.com>
|
Sun Nov 10 23:28:16 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
* inet/getprtname_r.c: Reformat copyright.
|
* inet/getprtname_r.c: Reformat copyright.
|
||||||
|
3
Makefile
3
Makefile
@@ -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; \
|
||||||
|
@@ -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
|
||||||
|
4
PROJECTS
4
PROJECTS
@@ -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.
|
||||||
|
|
||||||
|
@@ -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
150
configure
vendored
@@ -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.
|
||||||
|
10
configure.in
10
configure.in
@@ -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, :)
|
||||||
|
@@ -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
61
inet/aliases.h
Normal 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
26
inet/getaliasent.c
Normal 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
29
inet/getaliasent_r.c
Normal 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
30
inet/getaliasname.c
Normal 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
29
inet/getaliasname_r.c
Normal 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"
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
22
nss/alias-lookup.c
Normal 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"
|
@@ -14,12 +14,13 @@ 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)
|
||||||
|
@@ -12,11 +12,15 @@ 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;
|
||||||
}
|
}
|
||||||
|
@@ -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. */
|
||||||
|
@@ -12,10 +12,14 @@ 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;
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
@@ -13,9 +13,9 @@ 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
235
nss/nss_db/db-alias.c
Normal 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;
|
||||||
|
}
|
@@ -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"
|
||||||
|
|
||||||
@@ -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
424
nss/nss_files/files-alias.c
Normal 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;
|
||||||
|
}
|
@@ -84,7 +84,7 @@ parse_line (char *line, struct STRUCTURE *result, \
|
|||||||
{ \
|
{ \
|
||||||
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; \
|
||||||
@@ -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)
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -1 +1 @@
|
|||||||
BIND-4.9.5-T6B
|
BIND-4.9.5-REL
|
||||||
|
@@ -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)) {
|
||||||
|
@@ -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],
|
||||||
|
@@ -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
|
||||||
|
@@ -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)%,$(..)%,$@)
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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)
|
||||||
|
@@ -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
|
||||||
|
@@ -12,9 +12,9 @@ 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>
|
||||||
|
Reference in New Issue
Block a user