update from main archive 961113

Thu Nov 14 02:00:33 1996  Ulrich Drepper  <drepper@cygnus.com>

	* inet/Makefile (headers): Add aliases.h.
	(routines): Add getaliasent_r, getaliasent, getaliasname, and
	getaliasname_r.
	* aliases.h: New file.
	* inet/aliases.h: New file.
	* inet/getaliasent.c: New file.
	* inet/getaliasent_r.c: New file.
	* inet/getaliasname.c: New file.
	* inet/getaliasname_r.c: New file.
	* nss/Makefile (databases): Add alias.
	* nss/alias-lookup.c: New file.
	* nss/databases.def: Add aliases and publickey.
	* nss/nss_db/db-alias.c: New file.
	* nss/nss_files/files-alias.c: New file.

	* inet/getnetgrent_r.c (__internal_getnetgrent): Buffer length
	argument to lookup function is of type size_t.
	(innetgr): Likewise.
	* nss/getXXbyYY_r.c: Likewise.
	* nss/getXXent_r.c: Likewise.
	* nss/nss_db/db-XXX.c: Likewise.

	* nss/getXXbyYY.c: Don't provide static buffer.  Resize if call
	failed because buffer was too small.
	* nss/getXXent.c: Likewise.

	* nss/nss_files/files-XXX.c: Correct handling of shared file.  The
	getXXent_r function now uses f[gs]etpos to get to the correct
	position.

	* nss/nss_files/files-parse.c: Indent lines for better readability.

	* malloc/obstack.c: Add new variable obstack_alloc_failed_handler
	and new function print_and_abort.  Remove all references to
	alloc_failed field.
	Add new function _obstack_memory_used.
	* malloc/obstack.h (struct obstack): Remove field alloc_field.
	Remove all references to alloc_failed field.
	Add prototype for _obstack_memory_used.

	* posix/unistd.h: Correct typo.

Wed Nov 13 03:09:16 1996  Ulrich Drepper  <drepper@cygnus.com>

	* configure.in: Require at least autoconf-2.10.2.

Tue Nov 12 03:35:01 1996  Christian von Roques  <roques@pond.sub.org>

	* malloc/obstack.h: Add new macro `obstack_make_room'.
	* malloc/obstack.c: Add function implementation for
	`obstack_make_room'.

Mon Nov 11 13:54:04 1996  Ulrich Drepper  <drepper@cygnus.com>

	Update to BIND-4.9.5-REL.
	* resolv/Banner: Set to 4.9.5-REL.
	* resolv/inet_net_pton.c: Was doing bad things to subnets and b'casts.
	* resolv/res_debug.c (__fp_nquery): Could read past end of buffer.
	(fix from BIND 8.1)

	* config.make.in: Add definition for top_absdir.
	* Makerules (make-link): Fix path to rellns-sh script.

Sat Nov  9 02:15:24 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* posix/unistd.h: Fix comment.

	* manual/arith.texi: Fix misspellings.  Use `zero', not `null',
	when talking about numbers.
	* manual/users.texi: Likewise.
	* manual/creature.texi: Likewise.  Use @defvarx for a secondary
	description header.

Sat Nov  9 19:25:11 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/posix/Makefile ($(common-objpfx)mk-stdiolim): Depend on
	the real posix1_lim.h file so that it works in all subdirs, not
	only in posix.

Sat Nov  9 02:08:34 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makefile ($(includedir)/gnu/lib-names.h): Quote arguments of tr.

Sat Nov  9 02:06:17 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/Makefile ($(common-objpfx)s-proto.d): Don't depend
	on $(before-compile) which hasn't been properly setup yet at this
	point.

Sat Nov  9 02:02:48 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/generic/sigset.h: Don't use implicit int which will
	probably require a diagnostic in the next revision of the C
	standard.
	* sysdeps/stub/lockfile.c: Likewise.

Sat Nov  9 01:57:17 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/m68k/syscall.S: Correct last change.
	* sysdeps/unix/sysv/linux/m68k/sysdep.h: Likewise.

Mon Nov 11 02:53:14 1996  Ulrich Drepper  <drepper@cygnus.com>

	* time/strftime.c: Update copyright.  Small cosmetic changes.

	char *' and `int'.
	PROJ_ID are used.
This commit is contained in:
Ulrich Drepper 1996-11-14 02:04:07 +00:00
parent b8591d1bdf
commit 26761c287f
42 changed files with 1396 additions and 257 deletions

111
ChangeLog
View file

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

View file

@ -188,7 +188,8 @@ $(includedir)/gnu/lib-names.h: $(common-objpfx)soversions.mk
echo; \
(libs='$(all-sonames)';\
for l in $$libs; do \
upname=`echo $$l | sed 's/[.]so.*//' | tr [:lower:]- [:upper:]_`; \
upname=`echo $$l | sed 's/[.]so.*//' | \
tr '[:lower:]-' '[:upper:]_'`; \
echo "#define $${upname}_SO $$l"; \
done;) | sort; \
echo; \

View file

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

View file

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

1
aliases.h Normal file
View file

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

View file

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

150
configure vendored
View file

@ -2,7 +2,7 @@
# From configure.in CVSid
# Guess values for system-dependent variables and create Makefiles.
# Generated automatically using autoconf version 2.10
# Generated automatically using autoconf version 2.10.3
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
#
# This configure script is free software; the Free Software Foundation
@ -355,7 +355,7 @@ EOF
verbose=yes ;;
-version | --version | --versio | --versi | --vers)
echo "configure generated by autoconf version 2.10"
echo "configure generated by autoconf version 2.10.3"
exit 0 ;;
-with-* | --with-*)
@ -550,6 +550,10 @@ fi
# This will get text that should go into config.make.
config_vars=
# We need a variable with the absolute path to the toplevel build directory.
top_absdir=`cd $srcdir; pwd`
# Check for a --with-gmp argument and set gmp-srcdir in config.make.
# Check whether --with-gmp or --without-gmp was given.
if test "${with_gmp+set}" = set; then
@ -682,7 +686,6 @@ done
if test -z "$ac_aux_dir"; then
{ echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
fi
ac_config_mkinstalldirs=$ac_aux_dir/mkinstalldirs
ac_config_guess=$ac_aux_dir/config.guess
ac_config_sub=$ac_aux_dir/config.sub
ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
@ -703,6 +706,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
echo "configure:710: checking host system type" >&5
host_alias=$host
case "$host_alias" in
@ -768,6 +772,7 @@ esac
# This can take a while to compute.
sysdep_dir=$srcdir/sysdeps
echo $ac_n "checking sysdep dirs""... $ac_c" 1>&6
echo "configure:776: checking sysdep dirs" >&5
# Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1.
os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`"
@ -968,6 +973,7 @@ echo "$ac_t""sysdeps/generic sysdeps/stub" 1>&6
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
echo "configure:977: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@ -1010,21 +1016,18 @@ fi
fi
echo "$ac_t""$INSTALL" 1>&6
# The purpose of this command is only to make sure the auxiliary path
# is set and that the symbol AC_REQUIRE_AC_PROG_MKINSTALLDIRS is set.
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
if test "$INSTALL" = "${srcdir}/install-sh"; then
if test "$INSTALL" = "${srcdir}/install-sh -c"; then
# The makefiles need to use a different form to find it in $srcdir.
INSTALL='$(..)./install-sh'
INSTALL="$top_absdir/install-sh -c"
fi
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
echo "configure:1031: checking whether ln -s works" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1049,6 +1052,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1056: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_MSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1079,6 +1083,7 @@ test -n "$MSGFMT" || MSGFMT=":"
echo $ac_n "checking build system type""... $ac_c" 1>&6
echo "configure:1087: checking build system type" >&5
build_alias=$build
case "$build_alias" in
@ -1104,6 +1109,7 @@ fi
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1113: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1135,6 +1141,7 @@ if test $host != $build; then
# Extract the first word of "gcc cc", so it can be a program name with args.
set dummy gcc cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1145: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_BUILD_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1161,6 +1168,7 @@ fi
fi
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
echo "configure:1172: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@ -1175,33 +1183,37 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
#line 1179 "configure"
#line 1187 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1185: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:1193: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
:
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
#line 1194 "configure"
#line 1204 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1200: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:1210: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
:
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
CPP=/lib/cpp
fi
@ -1219,6 +1231,7 @@ echo "$ac_t""$CPP" 1>&6
# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
set dummy ${ac_tool_prefix}ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1235: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1249,6 +1262,7 @@ fi
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1266: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1279,6 +1293,7 @@ if test -n "$ac_tool_prefix"; then
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1297: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1311,6 +1326,7 @@ fi
echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6
echo "configure:1330: checking for signed size_t type" >&5
if eval "test \"`echo '$''{'libc_cv_signed_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1334,19 +1350,19 @@ EOF
fi
echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6
echo "configure:1354: checking for libc-friendly stddef.h" >&5
if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1342 "configure"
#line 1359 "configure"
#include "confdefs.h"
#define __need_size_t
#define __need_wchar_t
#include <stddef.h>
#define __need_NULL
#include <stddef.h>
int main() { return 0; }
int t() {
int main() {
size_t size; wchar_t wchar;
#ifdef offsetof
#error stddef.h ignored __need_*
@ -1354,10 +1370,12 @@ size_t size; wchar_t wchar;
if (&size == NULL || &wchar == NULL) abort ();
; return 0; }
EOF
if { (eval echo configure:1358: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:1374: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libc_cv_friendly_stddef=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
libc_cv_friendly_stddef=no
fi
@ -1372,6 +1390,7 @@ override stddef.h = # The installed <stddef.h> seems to be libc-friendly."
fi
echo $ac_n "checking whether we need to use -P to assemble .S files""... $ac_c" 1>&6
echo "configure:1394: checking whether we need to use -P to assemble .S files" >&5
if eval "test \"`echo '$''{'libc_cv_need_minus_P'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1394,6 +1413,7 @@ asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives."
fi
echo $ac_n "checking for assembler global-symbol directive""... $ac_c" 1>&6
echo "configure:1417: checking for assembler global-symbol directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_global_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1423,6 +1443,7 @@ EOF
fi
echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6
echo "configure:1447: checking for .set assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_set_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1457,24 +1478,26 @@ fi
if test $elf != yes; then
echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
echo "configure:1482: checking for .init and .fini sections" >&5
if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1465 "configure"
#line 1487 "configure"
#include "confdefs.h"
int main() { return 0; }
int t() {
int main() {
asm (".section .init");
asm (".section .fini");
asm (".text");
; return 0; }
EOF
if { (eval echo configure:1475: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:1496: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libc_cv_have_initfini=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
libc_cv_have_initfini=no
fi
@ -1495,22 +1518,24 @@ if test $elf = yes; then
libc_cv_asm_underscores=no
else
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
echo "configure:1522: checking for _ prefix on C symbol names" >&5
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1503 "configure"
#line 1527 "configure"
#include "confdefs.h"
asm ("_glibc_foobar:");
int main() { return 0; }
int t() {
int main() {
glibc_foobar ();
; return 0; }
EOF
if { (eval echo configure:1511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
if { (eval echo configure:1534: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
libc_cv_asm_underscores=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
libc_cv_asm_underscores=no
fi
@ -1533,6 +1558,7 @@ if test $elf = yes; then
libc_cv_asm_weakext_directive=no
else
echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6
echo "configure:1562: checking for assembler .weak directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1555,6 +1581,7 @@ echo "$ac_t""$libc_cv_asm_weak_directive" 1>&6
if test $libc_cv_asm_weak_directive = no; then
echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6
echo "configure:1585: checking for assembler .weakext directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1591,6 +1618,7 @@ EOF
fi
echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
echo "configure:1622: checking for ld --no-whole-archive" >&5
if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1601,7 +1629,7 @@ __throw () {}
EOF
if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -Wl,--no-whole-archive
-o conftest conftest.c'; { (eval echo configure:1605: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c'; { (eval echo configure:1633: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_ld_no_whole_archive=yes
else
libc_cv_ld_no_whole_archive=no
@ -1612,6 +1640,7 @@ fi
echo "$ac_t""$libc_cv_ld_no_whole_archive" 1>&6
echo $ac_n "checking for gcc -fno-exceptions""... $ac_c" 1>&6
echo "configure:1644: checking for gcc -fno-exceptions" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_no_exceptions'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1622,7 +1651,7 @@ __throw () {}
EOF
if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -fno-exceptions
-o conftest conftest.c'; { (eval echo configure:1626: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c'; { (eval echo configure:1655: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_no_exceptions=yes
else
libc_cv_gcc_no_exceptions=no
@ -1674,6 +1703,7 @@ if test "$uname" = generic; then
fi
echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
echo "configure:1707: checking OS release for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1695,6 +1725,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>&6
uname_release="$libc_cv_uname_release"
echo $ac_n "checking OS version for uname""... $ac_c" 1>&6
echo "configure:1729: checking OS version for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1716,6 +1747,7 @@ else
fi
echo $ac_n "checking stdio selection""... $ac_c" 1>&6
echo "configure:1751: checking stdio selection" >&5
case $stdio in
libio) cat >> confdefs.h <<\EOF
@ -1782,8 +1814,9 @@ cat > confcache <<\EOF
EOF
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
# HP-UX 10.01 sh prints single quotes around any value that contains spaces.
(set) 2>&1 |
sed -n "s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=\${\1='\2'}/p" \
sed -n "s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)='*\([^']*\)'*/\1=\${\1='\2'}/p"\
>> confcache
if cmp -s $cache_file confcache; then
:
@ -1839,7 +1872,7 @@ do
echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-version | --version | --versio | --versi | --vers | --ver | --ve | --v)
echo "$CONFIG_STATUS generated by autoconf version 2.10"
echo "$CONFIG_STATUS generated by autoconf version 2.10.3"
exit 0 ;;
-help | --help | --hel | --he | --h)
echo "\$ac_cs_usage"; exit 0 ;;
@ -1880,6 +1913,7 @@ s%@includedir@%$includedir%g
s%@oldincludedir@%$oldincludedir%g
s%@infodir@%$infodir%g
s%@mandir@%$mandir%g
s%@top_absdir@%$top_absdir%g
s%@subdirs@%$subdirs%g
s%@host@%$host%g
s%@host_alias@%$host_alias%g
@ -1919,6 +1953,42 @@ s%@DEFINES@%$DEFINES%g
CEOF
EOF
cat >> $CONFIG_STATUS <<\EOF
# Split the substitutions into bite-sized pieces for seds with
# small command number limits, like on Digital OSF/1 and HP-UX.
ac_file=1 # Number of current file.
ac_inc=90 # Lines per file.
ac_beg=1 # First line for current file.
ac_end=$ac_inc # Line after last line for current file.
ac_more_lines=:
ac_sed_cmds=""
while $ac_more_lines; do
if test $ac_beg -gt 1; then
sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
else
sed "${ac_end}q" conftest.subs > conftest.s$ac_file
fi
if test ! -s conftest.s$ac_file; then
ac_more_lines=false
rm -f conftest.s$ac_file
else
if test -z "$ac_sed_cmds"; then
ac_sed_cmds="sed -f conftest.s$ac_file"
else
ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
fi
ac_file=`expr $ac_file + 1`
ac_beg=$ac_end
ac_end=`expr $ac_end + $ac_inc`
fi
done
if test -z "$ac_sed_cmds"; then
ac_sed_cmds=cat
fi
EOF
cat >> $CONFIG_STATUS <<EOF
CONFIG_FILES=\${CONFIG_FILES-"config.make ${config_makefile} ${config_uname}"}
@ -1932,7 +2002,7 @@ for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
*) ac_file_in="${ac_file}.in" ;;
esac
# Adjust relative srcdir, etc. for subdirectories.
# Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
# Remove last slash and all that follows it. Not all systems have dirname.
ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
@ -1960,6 +2030,7 @@ for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
[/$]*) INSTALL="$ac_given_INSTALL" ;;
*) INSTALL="$ac_dots$ac_given_INSTALL" ;;
esac
echo creating "$ac_file"
rm -f "$ac_file"
configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
@ -1973,9 +2044,9 @@ s%@configure_input@%$configure_input%g
s%@srcdir@%$srcdir%g
s%@top_srcdir@%$top_srcdir%g
s%@INSTALL@%$INSTALL%g
" -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file
" $ac_given_srcdir/$ac_file_in | eval "$ac_sed_cmds" > $ac_file
fi; done
rm -f conftest.subs
rm -f conftest.s*
# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
# NAME is the cpp macro being defined and VALUE is the value it is being given.
@ -1996,7 +2067,13 @@ ac_eB='$%\1#\2define\3'
ac_eC=' '
ac_eD='%g'
CONFIG_HEADERS=${CONFIG_HEADERS-"config.h"}
if test -z "$CONFIG_HEADERS"; then
EOF
cat >> $CONFIG_STATUS <<EOF
CONFIG_HEADERS="config.h"
EOF
cat >> $CONFIG_STATUS <<\EOF
fi
for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
# Support "outfile[:infile]", defaulting infile="outfile.in".
case "$ac_file" in
@ -2184,13 +2261,16 @@ if test "$no_recursion" != yes; then
ac_popdir=`pwd`
cd $ac_config_dir
# A "../" for each directory in /$ac_config_dir.
ac_dots=`echo $ac_config_dir|sed -e 's%^\./%%' -e 's%[^/]$%&/%' -e 's%[^/]*/%../%g'`
case "$srcdir" in
.) # No --srcdir option. We are building in place.
ac_sub_srcdir=$srcdir ;;
/*) # Absolute path.
ac_sub_srcdir=$srcdir/$ac_config_dir ;;
*) # Relative path.
ac_sub_srcdir=../$srcdir/$ac_config_dir ;;
ac_sub_srcdir=$ac_dots$srcdir/$ac_config_dir ;;
esac
# Check for guested configure; otherwise get Cygnus style configure.
@ -2207,8 +2287,6 @@ if test "$no_recursion" != yes; then
if test -n "$ac_sub_configure"; then
# Make the cache file name correct relative to the subdirectory.
# A "../" for each directory in /$ac_config_dir.
ac_dots=`echo $ac_config_dir|sed -e 's%^\./%%' -e 's%[^/]$%&/%' -e 's%[^/]*/%../%g'`
case "$cache_file" in
/*) ac_sub_cache_file=$cache_file ;;
*) # Relative path.

View file

@ -1,12 +1,16 @@
Dnl Process this file with autoconf to produce a configure script.
AC_REVISION([$CVSid$])
AC_PREREQ(2.10)dnl dnl Minimum Autoconf version required.
AC_PREREQ(2.10.2)dnl dnl Minimum Autoconf version required.
AC_INIT(features.h)
AC_CONFIG_HEADER(config.h)
# This will get text that should go into config.make.
config_vars=
# We need a variable with the absolute path to the toplevel build directory.
top_absdir=`cd $srcdir; pwd`
AC_SUBST(top_absdir)
# Check for a --with-gmp argument and set gmp-srcdir in config.make.
AC_ARG_WITH(gmp, dnl
--with-gmp=DIRECTORY find GMP source code in DIRECTORY (not needed),
@ -330,9 +334,9 @@ AC_MSG_RESULT(sysdeps/generic sysdeps/stub)
### Locate tools.
AC_PROG_INSTALL
if test "$INSTALL" = "${srcdir}/install-sh"; then
if test "$INSTALL" = "${srcdir}/install-sh -c"; then
# The makefiles need to use a different form to find it in $srcdir.
INSTALL='$(..)./install-sh'
INSTALL="$top_absdir/install-sh -c"
fi
AC_PROG_LN_S
AC_CHECK_PROGS(MSGFMT, msgfmt gmsgfmt, :)

View file

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

61
inet/aliases.h Normal file
View file

@ -0,0 +1,61 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifndef _ALIASES_H
#define _ALIASES_H 1
#include <features.h>
#include <sys/types.h>
/* Structure to represent one entry of the alias data base. */
struct aliasent
{
char *alias_name;
size_t alias_members_len;
char **alias_members;
int alias_local;
};
/* Open alias data base files. */
extern void setaliasent __P ((void));
/* Close alias data base files. */
extern void endaliasent __P ((void));
/* Get the next entry from the alias data base. */
extern struct aliasent *getaliasent __P ((void));
/* Get alias entry corresponding to NAME. */
extern struct aliasent *getaliasbyname __P ((__const char *__name));
#ifdef __USE_REENTRANT
/* Reentrant versions of some of the functions above. */
extern int getaliasent_r __P ((struct aliasent *__result_buf, char *__buffer,
size_t __buflen, struct aliasent **__result));
extern int getaliasbyname_r __P ((__const char *__name,
struct aliasent *__result_buf,
char *__buffer, size_t __buflen,
struct aliasent **__result));
#endif /* reentrant */
#endif /* aliases.h */

26
inet/getaliasent.c Normal file
View file

@ -0,0 +1,26 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <aliases.h>
#define LOOKUP_TYPE struct aliasent
#define GETFUNC_NAME getaliasent
#define BUFLEN 1024
#include "../nss/getXXent.c"

29
inet/getaliasent_r.c Normal file
View file

@ -0,0 +1,29 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <aliases.h>
#define LOOKUP_TYPE struct aliasent
#define SETFUNC_NAME setaliasent
#define GETFUNC_NAME getaliasent
#define ENDFUNC_NAME endaliasent
#define DATABASE_NAME aliases
#include "../nss/getXXent_r.c"

30
inet/getaliasname.c Normal file
View file

@ -0,0 +1,30 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <aliases.h>
#define LOOKUP_TYPE struct aliasent
#define FUNCTION_NAME getaliasbyname
#define DATABASE_NAME aliases
#define ADD_PARAMS const char *name
#define ADD_VARIABLES name
#define BUFLEN 1024
#include "../nss/getXXbyYY.c"

29
inet/getaliasname_r.c Normal file
View file

@ -0,0 +1,29 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <aliases.h>
#define LOOKUP_TYPE struct aliasent
#define FUNCTION_NAME getaliasbyname
#define DATABASE_NAME aliases
#define ADD_PARAMS const char *name
#define ADD_VARIABLES name
#include "../nss/getXXbyYY_r.c"

View file

@ -190,7 +190,7 @@ __internal_getnetgrent (char **hostp, char **userp, char **domainp,
struct __netgrent *datap,
char *buffer, size_t buflen)
{
enum nss_status (*fct) (struct __netgrent *, char *, int);
enum nss_status (*fct) (struct __netgrent *, char *, size_t);
int no_more;
/* Initialize status to return if no more functions are found. */
@ -293,7 +293,7 @@ innetgr (const char *netgroup, const char *host, const char *user,
{
int (*setfct) (const char *, struct __netgrent *);
void (*endfct) (struct __netgrent *);
int (*getfct) (struct __netgrent *, char *, int);
int (*getfct) (struct __netgrent *, char *, size_t);
struct name_list *known;
struct name_list *needed;
int result = 0;

View file

@ -1328,7 +1328,7 @@ collate_order_elem (struct linereader *lr, struct localedef_t *locale,
{
lr_error (lr, _("\
collation element `%.*s' appears more than once: ignore line"),
code->val.str.len, code->val.str.start);
(int) code->val.str.len, code->val.str.start);
lr_ignore_rest (lr, 0);
result = -1;
break;

View file

@ -588,9 +588,9 @@ In these situation one could use the function
@code{__strto@var{XXX}_internal}. @var{XXX} here stands for any of the
above forms. All numeric conversion functions (including the functions
to process floating-point numbers) have such a counterpart. The
difference to the normal for is the extra argument at the end of the
difference to the normal form is the extra argument at the end of the
parameter list. If this value has an non-zero value the handling of
number grouping is enabled. The advantage from using these functions is
number grouping is enabled. The advantage of using these functions is
that the @var{tailptr} parameters allow to determine which part of the
input is processed. The @code{scanf} functions don't provide this
information. The drawback of using these functions is that they are not
@ -678,7 +678,7 @@ number, no conversion is performed. In this case, @code{strtod} returns
a value of zero and the value returned in @code{*@var{tailptr}} is the
value of @var{string}.
In a locale other than the standard @code{"C"} or @code{"POSIX"} locale,
In a locale other than the standard @code{"C"} or @code{"POSIX"} locales,
this function may recognize additional locale-dependent syntax.
If the string has valid syntax for a floating-point number but the value
@ -689,7 +689,7 @@ because of underflow, @code{strtod} returns zero. It also sets @code{errno}
to @code{ERANGE} if there was overflow or underflow.
Since the value zero which is returned in the error case is also a valid
result the user should set the global variable @code{errno} to null
result the user should set the global variable @code{errno} to zero
before calling this function. So one can test for failures after the
call since all failures set @code{errno} to a non-zero value.
@end deftypefun

View file

@ -78,7 +78,7 @@ Portability Guide is included. This is an superset of the POSIX.1 and
POSIX.2 functionality and in fact @code{_POSIX_SOURCE} and
@code{_POSIX_C_SOURCE} get automatically be defined.
But as the great unifaction of all Unices there is also functionality
But as the great unifiction of all Unices there is also functionality
only available in BSD and SVID is included.
If the macro @code{_XOPEN_SOURCE_EXTENDED} is also defined, even more
@ -111,8 +111,9 @@ get very strange errors at run time.
@comment (none)
@comment GNU
@defvr Macro _REENTRANT,_THREAD_SAFE
If you define one this macro, reentrant versions of several functions get
@defvr Macro _REENTRANT
@defvrx Macro _THREAD_SAFE
If you define one of these macros, reentrant versions of several functions get
declared. Some of the functions are specified in POSIX.1c but many others
are only available on a few other systems or are unique to GNU libc.
The problem is that the standardization of the thread safe C library

View file

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

View file

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

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

@ -0,0 +1,22 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#define DATABASE_NAME aliases
#include "XXX-lookup.c"

View file

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

View file

@ -1,22 +1,26 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "../nss/nsswitch.h"
#include <errno.h>
#include <libc-lock.h>
#include <stdlib.h>
#include "nsswitch.h"
/*******************************************************************\
|* Here we assume several symbols to be defined: *|
@ -64,17 +68,47 @@ extern int INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf,
char *buffer, size_t buflen,
LOOKUP_TYPE **result H_ERRNO_PARM);
/* We need to protect the dynamic buffer handling. */
__libc_lock_define_initialized (static, lock);
LOOKUP_TYPE *
FUNCTION_NAME (ADD_PARAMS)
{
static char buffer[BUFLEN];
static char *buffer;
static size_t buffer_size;
static LOOKUP_TYPE resbuf;
LOOKUP_TYPE *result;
int save;
if (INTERNAL (REENTRANT_NAME) (ADD_VARIABLES, &resbuf, buffer,
BUFLEN, &result H_ERRNO_VAR) != 0)
/* Error occured. */
return NULL;
/* Get lock. */
__libc_lock_lock (lock);
if (buffer == NULL)
{
buffer_size = BUFLEN;
buffer = malloc (buffer_size);
}
while (buffer != NULL
&& INTERNAL (REENTRANT_NAME) (ADD_VARIABLES, &resbuf, buffer,
buffer_size, &result H_ERRNO_VAR) != 0
&& errno == ERANGE)
{
char *new_buf;
buffer_size += BUFLEN;
new_buf = realloc (buffer, buffer_size);
if (new_buf == NULL)
/* We are out of memory. Free the current buffer so that the
process gets a chance for a normal termination. */
free (buffer);
buffer = new_buf;
}
/* Release lock. Preserve error value. */
save = errno;
__libc_lock_unlock (lock);
__set_errno (save);
return result;
}

View file

@ -71,7 +71,7 @@
/* Type of the lookup function we need here. */
typedef int (*lookup_function) (ADD_PARAMS, LOOKUP_TYPE *, char *, int
typedef int (*lookup_function) (ADD_PARAMS, LOOKUP_TYPE *, char *, size_t
H_ERRNO_PARM);
/* Some usages of this file might use this variable. */

View file

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

View file

@ -90,7 +90,7 @@ typedef int (*set_function) (STAYOPEN);
typedef int (*end_function) (void);
/* Prototype for the setXXXent functions we use here. */
typedef int (*get_function) (LOOKUP_TYPE *, char *, int H_ERRNO_PARM);
typedef int (*get_function) (LOOKUP_TYPE *, char *, size_t H_ERRNO_PARM);
/* This handle for the NSS data base is shared between all

View file

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

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

@ -0,0 +1,235 @@
/* Mail alias file parser in nss_db module.
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <aliases.h>
#include <alloca.h>
#include <ctype.h>
#include <db.h>
#include <errno.h>
#include <fcntl.h>
#include <libc-lock.h>
#include <paths.h>
#include <string.h>
#include "nsswitch.h"
/* Locks the static variables in this file. */
__libc_lock_define_initialized (static, lock)
/* Maintenance of the shared handle open on the database. */
static DB *db;
static int keep_db;
static unsigned int entidx; /* Index for `getaliasent_r'. */
/* Open database file if not already opened. */
static enum nss_status
internal_setent (int stayopen)
{
enum nss_status status = NSS_STATUS_SUCCESS;
if (db == NULL)
{
db = dbopen (_PATH_VARDB "aliases.db", O_RDONLY, 0, DB_BTREE, NULL);
if (db == NULL)
status = NSS_STATUS_UNAVAIL;
}
/* Remember STAYOPEN flag. */
if (db != NULL)
keep_db |= stayopen;
return status;
}
/* Thread-safe, exported version of that. */
enum nss_status
_nss_db_setaliasent (int stayopen)
{
enum nss_status status;
__libc_lock_lock (lock);
status = internal_setent (stayopen);
/* Reset the sequential index. */
entidx = 0;
__libc_lock_unlock (lock);
return status;
}
/* Close the database file. */
static void
internal_endent (void)
{
if (db != NULL)
{
(*db->close) (db);
db = NULL;
}
}
/* Thread-safe, exported version of that. */
enum nss_status
_nss_db_endaliasent (void)
{
__libc_lock_lock (lock);
internal_endent ();
/* Reset STAYOPEN flag. */
keep_db = 0;
__libc_lock_unlock (lock);
return NSS_STATUS_SUCCESS;
}
/* We provide the parse function here. The parser in libnss_files
cannot be used. The generation of the db file already resolved all
:include: statements so we simply have to parse the list and store
the result. */
static enum nss_status
lookup (const DBT *key, struct aliasent *result, char *buffer,
size_t buflen)
{
enum nss_status status;
DBT value;
/* Open the database. */
status = internal_setent (keep_db);
if (status != NSS_STATUS_SUCCESS)
return status;
if ((*db->get) (db, key, &value, 0) == 0)
{
const char *src = value.data;
result->alias_members_len = 0;
/* We now have to fill the BUFFER with all the information. */
if (buflen < key->size + 1)
{
no_more_room:
__set_errno (ERANGE);
return NSS_STATUS_TRYAGAIN;
}
if (status == NSS_STATUS_SUCCESS)
{
char *cp;
size_t cnt;
buffer = stpncpy (buffer, key->data, key->size) + 1;
buflen -= key->size + 1;
while (*src != '\0')
{
const char *end, *upto;
while (isspace (*src))
++src;
end = strchr (src, ',');
if (end == NULL)
end = strchr (src, '\0');
for (upto = end; upto > src && isspace (upto[-1]); --upto);
if (upto != src)
{
if ((upto - src) + __alignof__ (char *) > buflen)
goto no_more_room;
buffer = stpncpy (buffer, src, upto - src) + 1;
buflen -= (upto - src) + __alignof (char *);
++result->alias_members_len;
}
src = end + (*end != '\0');
}
/* Now prepare the return. Provide string pointers for the
currently selected aliases. */
/* Adjust the pointer so it is aligned for storing pointers. */
buffer += __alignof__ (char *) - 1;
buffer -= ((buffer - (char *) 0) % __alignof__ (char *));
result->alias_members = (char **) buffer;
/* Compute addresses of alias entry strings. */
cp = result->alias_name;
for (cnt = 0; cnt < result->alias_members_len; ++cnt)
{
cp = strchr (cp, '\0') + 1;
result->alias_members[cnt] = cp;
}
status = (result->alias_members_len == 0
? NSS_STATUS_RETURN : NSS_STATUS_SUCCESS);
}
}
else
status = NSS_STATUS_NOTFOUND;
if (! keep_db)
internal_endent ();
return status;
}
enum nss_status
_nss_db_getaliasent_r (struct aliasent *result, char *buffer, size_t buflen)
{
/* Return next entry in host file. */
enum nss_status status;
char buf[20];
DBT key;
__libc_lock_lock (lock);
key.size = 1 + snprintf (key.data = buf, sizeof buf, "0%u", entidx++);
status = lookup (&key, result, buffer, buflen);
__libc_lock_unlock (lock);
return status;
}
enum nss_status
_nss_db_getaliasbyname_r (const char *name, struct aliasent *result,
char *buffer, size_t buflen)
{
DBT key;
enum nss_status status;
key.size = 1 + strlen (name);
key.data = __alloca (key.size);
((char *) key.data)[0] = '.';
memcpy (&((char *) key.data)[1], name, key.size - 1);
__libc_lock_lock (lock);
status = lookup (&key, result, buffer, buflen);
__libc_lock_unlock (lock);
return status;
}

View file

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

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

@ -0,0 +1,424 @@
/* Mail alias file parser in nss_files module.
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <aliases.h>
#include <ctype.h>
#include <libc-lock.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "nsswitch.h"
/* Locks the static variables in this file. */
__libc_lock_define_initialized (static, lock)
/* Maintenance of the shared stream open on the database file. */
static FILE *stream;
static fpos_t position;
static enum { none, getent, getby } last_use;
static enum nss_status
internal_setent (void)
{
enum nss_status status = NSS_STATUS_SUCCESS;
if (stream == NULL)
{
stream = fopen ("/etc/aliases", "r");
if (stream == NULL)
status = NSS_STATUS_UNAVAIL;
}
else
rewind (stream);
return status;
}
/* Thread-safe, exported version of that. */
enum nss_status
_nss_files_setaliasent (void)
{
enum nss_status status;
__libc_lock_lock (lock);
status = internal_setent ();
if (status == NSS_STATUS_SUCCESS && fgetpos (stream, &position) < 0)
{
fclose (stream);
stream = NULL;
status = NSS_STATUS_UNAVAIL;
}
last_use = getent;
__libc_lock_unlock (lock);
return status;
}
/* Close the database file. */
static void
internal_endent (void)
{
if (stream != NULL)
{
fclose (stream);
stream = NULL;
}
}
/* Thread-safe, exported version of that. */
enum nss_status
_nss_files_endaliasent (void)
{
__libc_lock_lock (lock);
internal_endent ();
__libc_lock_unlock (lock);
return NSS_STATUS_SUCCESS;
}
/* Parsing the database file into `struct aliasent' data structures. */
static enum nss_status
get_next_alias (const char *match, struct aliasent *result,
char *buffer, size_t buflen)
{
enum nss_status status = NSS_STATUS_NOTFOUND;
int ignore = 0;
result->alias_members_len = 0;
while (1)
{
/* Now we are ready to process the input. We have to read a
line and all its continuations and construct the array of
string pointers. This pointers and the names itself have to
be placed in BUFFER. */
char *first_unused = buffer;
size_t room_left = buflen - (buflen % __alignof__ (char *));
char *line;
/* Read the first line. It must contain the alias name and
possibly some alias names. */
first_unused[room_left - 1] = '\0';
line = fgets (first_unused, room_left, stream);
if (line == NULL)
/* Nothing to read. */
break;
else if (first_unused[room_left - 1] != '\0')
{
/* The line is too long for our buffer. */
no_more_room:
__set_errno (ERANGE);
status = NSS_STATUS_TRYAGAIN;
break;
}
else
{
char *cp;
/* If we are in IGNORE mode and the first character in the
line is a white space we ignore the line and start
reading the next. */
if (ignore && isspace (first_unused))
continue;
/* Terminate the line for any case. */
cp = strpbrk (first_unused, "#\n");
if (cp != NULL)
*cp = '\0';
/* Skip leading blanks. */
while (isspace (*line))
++line;
result->alias_name = first_unused;
while (*line != '\0' && *line != ':')
*first_unused++ = *line++;
if (*line == '\0' || result->alias_name == first_unused)
/* No valid name. Ignore the line. */
continue;
*first_unused++ = '\0';
if (room_left < (size_t) (first_unused - result->alias_name))
goto no_more_room;
room_left -= first_unused - result->alias_name;
++line;
/* When we search for a specific alias we can avoid all the
difficult parts and compare now with the name we are
looking for. If it does not match we simply ignore all
lines until the next line containing the start of a new
alias is found. */
ignore = match != NULL && strcmp (result->alias_name, match) == 0;
while (! ignore)
{
while (isspace (*line))
++line;
cp = first_unused;
while (*line != '\0' && *line != ',')
*first_unused++ = *line++;
if (first_unused != cp)
{
if (*line != '\0')
{
/* OK, we can have a regular entry or an include
request. */
*first_unused++ = '\0';
++line;
}
else
++first_unused;
if (strncmp (cp, ":include:", 9) != 0)
{
if (room_left < (first_unused - cp) + sizeof (char *))
goto no_more_room;
room_left -= (first_unused - cp) + sizeof (char *);
++result->alias_members_len;
}
else
{
/* Oh well, we have to read the addressed file. */
FILE *listfile;
char *old_line = NULL;
first_unused = cp;
listfile = fopen (&cp[9], "r");
/* If the file does not exist we simply ignore
the statement. */
if (listfile != NULL
&& (old_line = strdup (line)) != NULL)
{
while (! feof (listfile))
{
first_unused[room_left - 1] = '\0';
line = fgets (first_unused, room_left, listfile);
if (line == NULL)
break;
if (first_unused[room_left - 1] != '\0')
{
free (old_line);
goto no_more_room;
}
/* Parse the line. */
cp = strpbrk (line, "#\n");
if (cp != NULL)
*cp = '\0';
do
{
while (isspace (*line))
++line;
cp = first_unused;
while (*line != '\0' && *line != ',')
*first_unused++ = *line++;
if (*line != '\0')
++line;
if (first_unused != cp)
{
*first_unused++ = '\0';
if (room_left < ((first_unused - cp)
+ __alignof__ (char *)))
{
free (old_line);
goto no_more_room;
}
room_left -= ((first_unused - cp)
+ __alignof__ (char *));
++result->alias_members_len;
}
}
while (*line != '\0');
}
fclose (listfile);
first_unused[room_left - 1] = '\0';
strncpy (first_unused, old_line, room_left);
if (old_line != NULL)
free (old_line);
if (first_unused[room_left - 1] != '\0')
goto no_more_room;
}
}
}
if (*line == '\0')
{
/* Get the next line. But we must be careful. We
must not read the whole line at once since it
might belong to the current alias. Simply read
the first character. If it is a white space we
have a continuation line. Otherwise it is the
beginning of a new alias and we can push back the
just read character. */
int ch;
first_unused[room_left - 1] = '\0';
line = first_unused;
ch = fgetc (stream);
if (ch == EOF || !isspace (ch))
{
size_t cnt;
/* Now prepare the return. Provide string
pointers for the currently selected aliases. */
if (ch != EOF)
ungetc (ch, stream);
/* Adjust the pointer so it is aligned for
storing pointers. */
first_unused += __alignof__ (char *) - 1;
first_unused -= ((first_unused - (char *) 0)
% __alignof__ (char *));
result->alias_members = (char **) first_unused;
/* Compute addresses of alias entry strings. */
cp = result->alias_name;
for (cnt = 0; cnt < result->alias_members_len; ++cnt)
{
cp = strchr (cp, '\0') + 1;
result->alias_members[cnt] = cp;
}
status = (result->alias_members_len == 0
? NSS_STATUS_RETURN : NSS_STATUS_SUCCESS);
break;
}
/* The just read character is a white space and so
can be ignored. */
cp = strpbrk (line, "#\n");
if (cp != NULL)
*cp = '\0';
}
}
}
if (status != NSS_STATUS_NOTFOUND)
/* We read something. In any case break here. */
break;
}
return status;
}
enum nss_status
_nss_files_getaliasent_r (struct aliasent *result, char *buffer, size_t buflen)
{
/* Return next entry in host file. */
enum nss_status status = NSS_STATUS_SUCCESS;
__libc_lock_lock (lock);
/* Be prepared that the set*ent function was not called before. */
if (stream == NULL)
status = internal_setent ();
if (status == NSS_STATUS_SUCCESS)
{
/* If the last use was not by the getent function we need the
position the stream. */
if (last_use != getent)
if (fsetpos (stream, &position) < 0)
status = NSS_STATUS_UNAVAIL;
else
last_use = getent;
if (status == NSS_STATUS_SUCCESS)
{
result->alias_local = 1;
/* Read lines until we get a definite result. */
do
status = get_next_alias (NULL, result, buffer, buflen);
while (status == NSS_STATUS_RETURN);
/* If we successfully read an entry remember this position. */
if (status == NSS_STATUS_SUCCESS)
fgetpos (stream, &position);
else
last_use = none;
}
}
__libc_lock_unlock (lock);
return status;
}
enum nss_status
_nss_files_getaliasbyname_r (const char *name, struct aliasent *result,
char *buffer, size_t buflen)
{
/* Return next entry in host file. */
enum nss_status status = NSS_STATUS_SUCCESS;
if (name == NULL)
{
__set_errno (EINVAL);
return NSS_STATUS_UNAVAIL;
}
__libc_lock_lock (lock);
/* Open the stream or rest it. */
status = internal_setent ();
last_use = getby;
if (status == NSS_STATUS_SUCCESS)
{
result->alias_local = 1;
/* Read lines until we get a definite result. */
do
status = get_next_alias (name, result, buffer, buflen);
while (status == NSS_STATUS_RETURN);
}
__libc_lock_unlock (lock);
return status;
}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -17,7 +17,7 @@ License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
typedef FILE;
typedef int FILE;
void

View file

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

View file

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

View file

@ -75,13 +75,12 @@ Cambridge, MA 02139, USA. */
a large offset. Therefore we must not anymore test for < 0, but test
for a real error by making sure the value in %d0 is a real error
number. Linus said he will make sure the no syscall returns a value
in -1 .. -4095 as a valid result so we can savely test with -4096. */
in -1 .. -4095 as a valid result so we can savely test with -4095. */
#define PSEUDO(name, syscall_name, args) \
.text; \
ENTRY (name) \
DO_CALL (&SYS_ify (syscall_name), args); \
moveq.l &-4096, %d1; \
cmp.l %d1, %d0; \
cmp.l &-4095, %d0; \
jcc syscall_error
#undef PSEUDO_END

View file

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