summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--BUGS7
-rw-r--r--ChangeLog116
-rw-r--r--assert/Makefile1
-rw-r--r--assert/assert-perr.c8
-rw-r--r--bits/errno.h17
-rwxr-xr-xconfigure195
-rw-r--r--configure.in40
-rw-r--r--ctype/Makefile1
-rw-r--r--elf/dl-error.c10
-rw-r--r--elf/dl-lookup.c5
-rw-r--r--elf/rtld.c3
-rw-r--r--glibcbug.in2
-rw-r--r--grp/Makefile1
-rw-r--r--intl/localealias.c36
-rw-r--r--libc.map2
-rw-r--r--manual/creature.texi33
-rw-r--r--manual/filesys.texi4
-rw-r--r--pwd/Makefile1
-rw-r--r--stdlib/strfmon.c34
-rw-r--r--sysdeps/generic/bits/errno.h17
-rw-r--r--sysdeps/generic/make_siglist.c8
-rw-r--r--sysdeps/generic/readdir_r.c2
-rw-r--r--sysdeps/standalone/bits/errno.h62
-rw-r--r--sysdeps/unix/readdir_r.c2
-rw-r--r--sysdeps/unix/sysv/linux/alpha/Dist2
-rw-r--r--time/strftime.c140
-rw-r--r--time/strptime.c6
-rw-r--r--wcsmbs/wchar.h18
28 files changed, 581 insertions, 192 deletions
diff --git a/BUGS b/BUGS
index 701acf0..efe407b 100644
--- a/BUGS
+++ b/BUGS
@@ -1,7 +1,7 @@
List of known bugs (certainly very incomplete)
----------------------------------------------
-Time-stamp: <1997-10-31T16:49:39+0100 drepper>
+Time-stamp: <1997-11-02T15:10:48+0100 drepper>
This following list contains those bugs which I'm aware of. Please
make sure that bugs you report are not listed here. If you can fix one
@@ -58,11 +58,6 @@ Severity: [ *] to [***]
checked for errors, but the whole file containing the same
category.
[PR libc/207]
-
-[ *] configuring with CFLAGS="-pipe" configure doesn't work
- with gcc. This seems to be a bug in gcc 2.7.2.x (egcs doesn't
- have this bug).
- [PR libc/245]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ulrich Drepper
drepper@cygnus.com
diff --git a/ChangeLog b/ChangeLog
index 1b9fa7d..6b54555 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,122 @@
+1997-11-04 Ulrich Drepper <drepper@cygnus.com>
+
+ * manual/filesys.texi: Correct description of return value for
+ readdir_r.
+ * sysdeps/unix/readdir_r.c (__readdir_r): Return value of errno
+ not -1 in error case.
+ * sysdeps/generic/readdir_r.c (__readdir_r): Return ENOSYS not -1.
+ Reported by Jim Meyering <meyering@eng.ascend.com>.
+
+1997-11-02 Paul Eggert <eggert@twinsun.com>
+
+ * strftime.c: Use host's underlying strftime to access
+ locale-specific info. This is useful e.g. when building GNU
+ Emacs under Solaris 2.6.
+ (weekday_name, month_name): Omit if HAVE_STRFTIME.
+ (my_strftime): New macro, which names the strftime function that
+ this source file produces.
+ (strftime): #undef if emacs is defined; this works around Emacs 20.2's
+ method of compiling with -Dstrftime=emacs_strftime.
+ Also, declare as a function returning size_t, for similar reasons.
+ (my_strftime): If HAVE_STRFTIME, use underlying strftime to handle
+ locale-dependent formats like %a and %Ec.
+
+1997-11-02 Paul Eggert <eggert@twinsun.com>
+
+ * strftime.c (memcpy_lowcase, memcpy_uppcase, strftime):
+ Ensure that args to islower and isupper are valid unsigned
+ chars, even if char is signed.
+
+1997-11-04 Ulrich Drepper <drepper@cygnus.com>
+
+ * assert/Makefile (headers): Add assert.h, necessary after patch
+ to Makefiles.
+ * ctype/Makefile (headers): Likewise.
+ * pwd/Makefile (headers): Likewise.
+ * grp/Makefile (headers): Likewise.
+ Patch by NIIBE Yutaka <gniibe@mri.co.jp>.
+
+1997-11-04 03:08 Ulrich Drepper <drepper@cygnus.com>
+
+ * glibcbug.in: Add information about configured target.
+ Patch by Zack Weinberg <zack@rabi.phys.columbia.edu>.
+
+ * elf/dl-lookup.c (_dl_lookup_versioned_symbol): Be prepared for
+ empty string as `reference_name' parameter.
+ * elf/rtld.c: Don't set real program name in l_name of main object.
+
+ * manual/creature.texi: Apply Paul Eggert's patch for better
+ _POSIX_C_SOURCE description.
+
+ * stdlib/strfmon.c: Fix numerous bugs in formatting.
+
+ * time/strptime.c [%Y]: Treat all years, not only those which fit
+ in time_t.
+ [%Oy]: Really store value.
+ Patches by Paul Eggert.
+
+ * wcsmbs/wchar.h: Fix documentation bugs. Declare wcsdup only
+ is __USE_GNU.
+
+1997-11-03 02:48 Ulrich Drepper <drepper@cygnus.com>
+
+ * sysdeps/generic/bits/errno.h: Remove all error definitions. This
+ is only meant as a stub.
+
+1997-10-31 Andreas Jaeger <aj@arthur.rhein-neckar.de>
+
+ * sysdeps/standalone/bits/errno.h: Copied from
+ sysdeps/generic/bits/errno.h and added all know error codes that
+ are used in glibc.
+
+1997-11-03 02:23 Ulrich Drepper <drepper@cygnus.com>
+
+ * sysdeps/generic/make_siglist.c: Add comment to clarify use and
+ make sure the correct _NSIG value is used.
+ Patch by Klaus Espenlaub <kespenla@student.informatik.uni-ulm.de>.
+
+1997-11-03 00:20 Ulrich Drepper <drepper@cygnus.com>
+
+ * intl/localealias.c (read_alias_file): Correct handling of line
+ reader which sometimes skipped complete lines (PR 205).
+ Optimize a bit by using mempcpy.
+
+1997-11-02 16:59 Philipp Thomas <kthomas@gwdg.de>
+
+ * intl/localealias.c (read_alias_file): Correctly set map[].value
+ instead of overwriting map[].alias
+
+1997-11-02 15:32 Ulrich Drepper <drepper@cygnus.com>
+
+ * libc.map: Add _IO_flockfile and _IO_funlockfile.
+ Suggested by H.J. Lu <hjl@lucon.org>.
+
+1997-11-02 15:17 Ulrich Drepper <drepper@cygnus.com>
+
+ * elf/dl-error.c (_dl_signal_error): Use _strerror_internal instead
+ of strerror.
+ * assert/assert-perr.c: Use _strerror_internal directly instead of
+ __strerror_r.
+ Suggested by Joe Keane <jgk@jgk.org>.
+
+1997-11-01 16:46 Zack Weinberg <zack@rabi.phys.columbia.edu>
+
+ * configure.in: Check for gcc-2.7.2 -pipe bug and hack around it
+ (PR 245).
+
+1997-11-01 Paul Eggert <eggert@twinsun.com>
+
+ * time/strptime.c (strptime_internal): Fix bug: %Oy forgot to
+ assign tm_year. Do not restrict %Y to years less than 2037 even
+ on 32-bit time_t hosts, as strptime returns an int tm_year, not a
+ time_t, and it's possible for programs to use the year without
+ having to use time_t.
+
1997-10-31 23:16 Ulrich Drepper <drepper@cygnus.com>
* posix/glob.c (glob): If calling glob_in_dir for a list which was
generated by a glob call disable GLOB_ERR since there might be
- non-directories in the list (PR203).
+ non-directories in the list (PR 203).
* posix/glob.h (GLOB_ONLYDIR): New flag.
(__GLOB_FLAGS): Add GLOB_ONLYDIR.
diff --git a/assert/Makefile b/assert/Makefile
index 208a71a..5780457 100644
--- a/assert/Makefile
+++ b/assert/Makefile
@@ -20,6 +20,7 @@
# Sub-makefile for assert portion of the library.
#
subdir := assert
+headers := assert.h
routines := assert assert-perr
diff --git a/assert/assert-perr.c b/assert/assert-perr.c
index c62ae46..246727e 100644
--- a/assert/assert-perr.c
+++ b/assert/assert-perr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1994, 1995, 1996, 1997 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
@@ -22,6 +22,10 @@
#include <sysdep.h>
+/* This is the internal function we use to generate the error string. */
+extern char *_strerror_internal __P ((int, char *, size_t));
+
+
extern const char *__assert_program_name; /* In assert.c. */
/* This function, when passed an error number, a filename, and a line
@@ -49,7 +53,7 @@ __assert_perror_fail (int errnum,
__assert_program_name ? ": " : "",
file, line,
function ? function : "", function ? ": " : "",
- __strerror_r (errnum, errbuf, sizeof errbuf));
+ _strerror_internal (errnum, errbuf, sizeof errbuf));
(void) fflush (stderr);
abort ();
diff --git a/bits/errno.h b/bits/errno.h
index cb61da7..622c2c9 100644
--- a/bits/errno.h
+++ b/bits/errno.h
@@ -22,20 +22,15 @@
#undef __need_Emath
#define __Emath_defined 1
-# define EDOM 1
-# define ERANGE 2
+# define EDOM XXX <--- fill in what is actually needed
+# define ERANGE XXX <--- fill in what is actually needed
#endif
#ifdef _ERRNO_H
-# define ENOSYS 3
-# define EINVAL 4
-# define ESPIPE 5
-# define EBADF 6
-# define ENOMEM 7
-# define EACCES 8
-# define ENFILE 9
-# define EMFILE 10
-# define ENOMSG 11
+# error "Define here all the missing error messages for the port. These"
+# error "must match the numbers of the kernel."
+# define Exxxx XXX
+...
#endif
#define __set_errno(val) errno = (val)
diff --git a/configure b/configure
index 3b1a139..2955226 100755
--- a/configure
+++ b/configure
@@ -558,14 +558,6 @@ else
ac_n= ac_c='\c' ac_t=
fi
- if test -r /vmunix; then
- kernel_id=`strings /vmunix | grep UNIX`
- elif test -r /dynix; then
- kernel_id=`strings /dynix | grep DYNIX`
- else
- kernel_id=
- fi
-
@@ -760,7 +752,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:764: checking host system type" >&5
+echo "configure:756: checking host system type" >&5
host_alias=$host
case "$host_alias" in
@@ -879,7 +871,7 @@ fi
# This can take a while to compute.
sysdep_dir=$srcdir/sysdeps
echo $ac_n "checking sysdep dirs""... $ac_c" 1>&6
-echo "configure:883: checking sysdep dirs" >&5
+echo "configure:875: 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'`"
@@ -1080,7 +1072,7 @@ echo "$ac_t""sysdeps/generic" 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:1084: checking for a BSD compatible install" >&5
+echo "configure:1076: 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
@@ -1134,7 +1126,7 @@ if test "$INSTALL" = "${srcdir}/install-sh -c"; then
INSTALL='\$(..)./install-sh -c'
fi
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1138: checking whether ln -s works" >&5
+echo "configure:1130: 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
@@ -1159,7 +1151,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:1163: checking for $ac_word" >&5
+echo "configure:1155: 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
@@ -1192,7 +1184,7 @@ test -n "$MSGFMT" || MSGFMT=":"
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1196: checking for $ac_word" >&5
+echo "configure:1188: 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
@@ -1221,7 +1213,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1225: checking for $ac_word" >&5
+echo "configure:1217: 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
@@ -1269,7 +1261,7 @@ fi
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1273: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1265: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1279,11 +1271,11 @@ ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS
cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext <<EOF
-#line 1283 "configure"
+#line 1275 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:1287: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1279: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@@ -1306,13 +1298,13 @@ else
cross_linkable=yes
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1310: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1302: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1316: checking whether we are using GNU C" >&5
+echo "configure:1308: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1321,7 +1313,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1325: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1317: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@@ -1338,7 +1330,7 @@ if test $ac_cv_prog_gcc = yes; then
yes;
#endif
EOF
- if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1342: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+ if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1334: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
if test -z "$CFLAGS"; then
CFLAGS="-g -O2"
fi
@@ -1350,7 +1342,7 @@ else
fi
echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:1354: checking build system type" >&5
+echo "configure:1346: checking build system type" >&5
build_alias=$build
case "$build_alias" in
@@ -1373,7 +1365,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:1377: checking for $ac_word" >&5
+echo "configure:1369: 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
@@ -1404,7 +1396,7 @@ done
fi
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1408: checking how to run the C preprocessor" >&5
+echo "configure:1400: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -1419,13 +1411,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 1423 "configure"
+#line 1415 "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:1429: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1421: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
:
@@ -1436,13 +1428,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 1440 "configure"
+#line 1432 "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:1446: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1438: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
:
@@ -1475,7 +1467,7 @@ LD=`$CC -print-file-name=ld`
# Determine whether we are using GNU binutils.
echo $ac_n "checking whether $AS is GNU as""... $ac_c" 1>&6
-echo "configure:1479: checking whether $AS is GNU as" >&5
+echo "configure:1471: checking whether $AS is GNU as" >&5
if eval "test \"`echo '$''{'libc_cv_prog_as_gnu'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1493,7 +1485,7 @@ rm -f a.out
gnu_as=$libc_cv_prog_as_gnu
echo $ac_n "checking whether $LD is GNU ld""... $ac_c" 1>&6
-echo "configure:1497: checking whether $LD is GNU ld" >&5
+echo "configure:1489: checking whether $LD is GNU ld" >&5
if eval "test \"`echo '$''{'libc_cv_prog_ld_gnu'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1517,7 +1509,7 @@ fi
# 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:1521: checking for $ac_word" >&5
+echo "configure:1513: 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
@@ -1548,7 +1540,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:1552: checking for $ac_word" >&5
+echo "configure:1544: 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
@@ -1579,7 +1571,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:1583: checking for $ac_word" >&5
+echo "configure:1575: 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
@@ -1614,7 +1606,7 @@ fi
# Extract the first word of "bash", so it can be a program name with args.
set dummy bash; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1618: checking for $ac_word" >&5
+echo "configure:1610: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_BASH'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1655,7 +1647,7 @@ if test "$BASH" = no; then
# Extract the first word of "ksh", so it can be a program name with args.
set dummy ksh; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1659: checking for $ac_word" >&5
+echo "configure:1651: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_KSH'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1701,7 +1693,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:1705: checking for $ac_word" >&5
+echo "configure:1697: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1736,7 +1728,7 @@ test -n "$PERL" || PERL="no"
echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6
-echo "configure:1740: checking for signed size_t type" >&5
+echo "configure:1732: 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
@@ -1760,12 +1752,12 @@ EOF
fi
echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6
-echo "configure:1764: checking for libc-friendly stddef.h" >&5
+echo "configure:1756: 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 1769 "configure"
+#line 1761 "configure"
#include "confdefs.h"
#define __need_size_t
#define __need_wchar_t
@@ -1780,7 +1772,7 @@ size_t size; wchar_t wchar;
if (&size == NULL || &wchar == NULL) abort ();
; return 0; }
EOF
-if { (eval echo configure:1784: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1776: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libc_cv_friendly_stddef=yes
else
@@ -1799,7 +1791,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:1803: checking whether we need to use -P to assemble .S files" >&5
+echo "configure:1795: 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
@@ -1821,8 +1813,44 @@ if test $libc_cv_need_minus_P = yes; then
asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives."
fi
+# gcc 2.7.x has a bug where if -pipe is set, the assembler will always
+# be told to read stdin. This causes the compiler to hang when fed an
+# .s file.
+if test $ac_cv_prog_gcc = yes; then
+ case `${CC-cc} -v 2>&1` in
+ *2.7*)
+ # We must check this even if -pipe is not given here, because the user
+ # might do `make CFLAGS=-pipe'.
+ echo $ac_n "checking for gcc 2.7.x -pipe bug""... $ac_c" 1>&6
+echo "configure:1826: checking for gcc 2.7.x -pipe bug" >&5
+if eval "test \"`echo '$''{'libc_cv_gcc_pipe_bug'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat >conftest.s <<EOF
+foo:
+EOF
+ if ${CC-cc} -pipe -c conftest.s <conftest.s 2>/dev/null; then
+ libc_cv_gcc_pipe_bug=no
+ else
+ libc_cv_gcc_pipe_bug=yes
+ fi
+ rm -f conftest*
+fi
+
+echo "$ac_t""$libc_cv_gcc_pipe_bug" 1>&6
+ if test $libc_cv_gcc_pipe_bug = yes; then
+ makeCC="${CC-cc} -B\$(common-objpfx)"
+ makeCFLAGS=$CFLAGS
+ CFLAGS=`echo $CFLAGS |sed 's/-pipe//'`
+ fi;;
+ *) libc_cv_gcc_pipe_bug=no;;
+ esac
+else
+ libc_cv_gcc_pipe_bug=no
+fi
+
echo $ac_n "checking for assembler global-symbol directive""... $ac_c" 1>&6
-echo "configure:1826: checking for assembler global-symbol directive" >&5
+echo "configure:1854: 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
@@ -1852,7 +1880,7 @@ EOF
fi
echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6
-echo "configure:1856: checking for .set assembler directive" >&5
+echo "configure:1884: 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
@@ -1886,7 +1914,7 @@ EOF
fi
echo $ac_n "checking for .symver assembler directive""... $ac_c" 1>&6
-echo "configure:1890: checking for .symver assembler directive" >&5
+echo "configure:1918: checking for .symver assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_symver_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1905,7 +1933,7 @@ fi
echo "$ac_t""$libc_cv_asm_symver_directive" 1>&6
echo $ac_n "checking for ld --version-script""... $ac_c" 1>&6
-echo "configure:1909: checking for ld --version-script" >&5
+echo "configure:1937: checking for ld --version-script" >&5
if eval "test \"`echo '$''{'libc_cv_ld_version_script_option'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1924,7 +1952,7 @@ EOF
if { ac_try='${CC-cc} $CFLAGS -shared -o conftest.so conftest.o
-nostartfiles -nostdlib
-Wl,--version-script,conftest.map
- 1>&5'; { (eval echo configure:1928: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
+ 1>&5'; { (eval echo configure:1956: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
then
libc_cv_ld_version_script_option=yes
else
@@ -1955,7 +1983,7 @@ fi
if test $elf = yes; then
echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6
-echo "configure:1959: checking for .previous assembler directive" >&5
+echo "configure:1987: checking for .previous assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_previous_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1963,7 +1991,7 @@ else
.section foo_section
.previous
EOF
- if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1967: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+ if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1995: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_asm_previous_directive=yes
else
libc_cv_asm_previous_directive=no
@@ -1979,7 +2007,7 @@ EOF
else
echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6
-echo "configure:1983: checking for .popsection assembler directive" >&5
+echo "configure:2011: checking for .popsection assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_popsection_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1987,7 +2015,7 @@ else
.pushsection foo_section
.popsection
EOF
- if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1991: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+ if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2019: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_asm_popsection_directive=yes
else
libc_cv_asm_popsection_directive=no
@@ -2007,12 +2035,12 @@ fi
if test $elf != yes; then
echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
-echo "configure:2011: checking for .init and .fini sections" >&5
+echo "configure:2039: 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 2016 "configure"
+#line 2044 "configure"
#include "confdefs.h"
int main() {
@@ -2021,7 +2049,7 @@ asm (".section .init");
asm (".text");
; return 0; }
EOF
-if { (eval echo configure:2025: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2053: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libc_cv_have_initfini=yes
else
@@ -2049,19 +2077,19 @@ if test $elf = yes; then
else
if test $ac_cv_prog_cc_works = yes; then
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
-echo "configure:2053: checking for _ prefix on C symbol names" >&5
+echo "configure:2081: 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 2058 "configure"
+#line 2086 "configure"
#include "confdefs.h"
asm ("_glibc_foobar:");
int main() {
glibc_foobar ();
; return 0; }
EOF
-if { (eval echo configure:2065: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2093: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
libc_cv_asm_underscores=yes
else
@@ -2076,17 +2104,17 @@ fi
echo "$ac_t""$libc_cv_asm_underscores" 1>&6
else
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
-echo "configure:2080: checking for _ prefix on C symbol names" >&5
+echo "configure:2108: 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 2085 "configure"
+#line 2113 "configure"
#include "confdefs.h"
void underscore_test(void) {
return; }
EOF
-if { (eval echo configure:2090: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2118: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if grep _underscore_test conftest* >/dev/null; then
rm -f conftest*
libc_cv_asm_underscores=yes
@@ -2119,7 +2147,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:2123: checking for assembler .weak directive" >&5
+echo "configure:2151: 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
@@ -2142,7 +2170,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:2146: checking for assembler .weakext directive" >&5
+echo "configure:2174: 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
@@ -2179,7 +2207,7 @@ EOF
fi
echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
-echo "configure:2183: checking for ld --no-whole-archive" >&5
+echo "configure:2211: 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
@@ -2190,7 +2218,7 @@ __throw () {}
EOF
if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -Wl,--no-whole-archive
- -o conftest conftest.c 1>&5'; { (eval echo configure:2194: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+ -o conftest conftest.c 1>&5'; { (eval echo configure:2222: \"$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
@@ -2201,7 +2229,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:2205: checking for gcc -fno-exceptions" >&5
+echo "configure:2233: 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
@@ -2212,7 +2240,7 @@ __throw () {}
EOF
if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -fno-exceptions
- -o conftest conftest.c 1>&5'; { (eval echo configure:2216: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+ -o conftest conftest.c 1>&5'; { (eval echo configure:2244: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_no_exceptions=yes
else
libc_cv_gcc_no_exceptions=no
@@ -2223,12 +2251,12 @@ fi
echo "$ac_t""$libc_cv_gcc_no_exceptions" 1>&6
echo $ac_n "checking for DWARF2 unwind info support""... $ac_c" 1>&6
-echo "configure:2227: checking for DWARF2 unwind info support" >&5
+echo "configure:2255: checking for DWARF2 unwind info support" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_dwarf2_unwind_info'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
-#line 2232 "configure"
+#line 2260 "configure"
static char __EH_FRAME_BEGIN__;
_start ()
{
@@ -2249,7 +2277,7 @@ __bzero () {}
EOF
if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles
- -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2253: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+ -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2281: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_dwarf2_unwind_info=yes
else
libc_cv_gcc_dwarf2_unwind_info=no
@@ -2307,7 +2335,7 @@ if test "$uname" = "sysdeps/generic"; then
fi
echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
-echo "configure:2311: checking OS release for uname" >&5
+echo "configure:2339: 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
@@ -2329,7 +2357,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:2333: checking OS version for uname" >&5
+echo "configure:2361: 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
@@ -2351,7 +2379,7 @@ else
fi
echo $ac_n "checking stdio selection""... $ac_c" 1>&6
-echo "configure:2355: checking stdio selection" >&5
+echo "configure:2383: checking stdio selection" >&5
case $stdio in
libio) cat >> confdefs.h <<\EOF
@@ -2363,7 +2391,7 @@ esac
echo "$ac_t""$stdio" 1>&6
echo $ac_n "checking ldap selection""... $ac_c" 1>&6
-echo "configure:2367: checking ldap selection" >&5
+echo "configure:2395: checking ldap selection" >&5
case $add_ons in
*ldap*)
@@ -2428,6 +2456,21 @@ fi
VERSION=`sed -e 's/^#define VERSION "\([^"]*\)"/\1/p' -e d < $srcdir/version.h`
+if test $libc_cv_gcc_pipe_bug = yes; then
+ realCC=$CC
+ CC=$makeCC
+ CFLAGS=$makeCFLAGS
+fi
+ if test -r /vmunix; then
+ kernel_id=`strings /vmunix | grep UNIX`
+ elif test -r /dynix; then
+ kernel_id=`strings /dynix | grep DYNIX`
+ else
+ kernel_id=
+ fi
+
+
+
trap '' 1 2 15
cat > confcache <<\EOF
# This file is a shell script that caches the results of configure
@@ -2867,10 +2910,16 @@ while test -n "$ac_sources"; do
done
EOF
cat >> $CONFIG_STATUS <<EOF
+realCC=$realCC
echo '$config_vars' >> config.make; test -d bits || mkdir bits
EOF
cat >> $CONFIG_STATUS <<\EOF
+if test "$realCC"; then
+ sed -e 's/%{pipe:-}/%|/g' `$realCC -print-file-name=specs` >specsT
+ mv specsT specs
+fi
+
exit 0
EOF
chmod +x $CONFIG_STATUS
diff --git a/configure.in b/configure.in
index 3f810bd..d0659bf 100644
--- a/configure.in
+++ b/configure.in
@@ -500,6 +500,35 @@ if test $libc_cv_need_minus_P = yes; then
asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives."
fi
+# gcc 2.7.x has a bug where if -pipe is set, the assembler will always
+# be told to read stdin. This causes the compiler to hang when fed an
+# .s file.
+if test $ac_cv_prog_gcc = yes; then
+ case `${CC-cc} -v 2>&1` in
+ *2.7*)
+ # We must check this even if -pipe is not given here, because the user
+ # might do `make CFLAGS=-pipe'.
+ AC_CACHE_CHECK(for gcc 2.7.x -pipe bug, libc_cv_gcc_pipe_bug, [dnl
+ cat >conftest.s <<EOF
+foo:
+EOF
+ if ${CC-cc} -pipe -c conftest.s <conftest.s 2>/dev/null; then
+ libc_cv_gcc_pipe_bug=no
+ else
+ libc_cv_gcc_pipe_bug=yes
+ fi
+ rm -f conftest*])
+ if test $libc_cv_gcc_pipe_bug = yes; then
+ makeCC="${CC-cc} -B\$(common-objpfx)"
+ makeCFLAGS=$CFLAGS
+ CFLAGS=`echo $CFLAGS |sed 's/-pipe//'`
+ fi;;
+ *) libc_cv_gcc_pipe_bug=no;;
+ esac
+else
+ libc_cv_gcc_pipe_bug=no
+fi
+
AC_CACHE_CHECK(for assembler global-symbol directive,
libc_cv_asm_global_directive, [dnl
libc_cv_asm_global_directive=UNKNOWN
@@ -958,5 +987,16 @@ fi
VERSION=`sed -e 's/^#define VERSION "\([^"]*\)"/\1/p' -e d < $srcdir/version.h`
AC_SUBST(VERSION)
+if test $libc_cv_gcc_pipe_bug = yes; then
+ realCC=$CC
+ CC=$makeCC
+ CFLAGS=$makeCFLAGS
+fi
+AC_OUTPUT_COMMANDS([
+if test "$realCC"; then
+ sed -e 's/%{pipe:-}/%|/g' `$realCC -print-file-name=specs` >specsT
+ mv specsT specs
+fi], [realCC=$realCC])
+
AC_OUTPUT(config.make glibcbug ${config_makefile} ${config_uname}, ,
[echo '$config_vars' >> config.make; test -d bits || mkdir bits])
diff --git a/ctype/Makefile b/ctype/Makefile
index a17ce2c..8907db8 100644
--- a/ctype/Makefile
+++ b/ctype/Makefile
@@ -20,6 +20,7 @@
# Sub-makefile for ctype portion of the library.
#
subdir := ctype
+headers := ctype.h
routines := ctype ctype-extn ctype_l
aux := ctype-info
diff --git a/elf/dl-error.c b/elf/dl-error.c
index 72af859..5e76d7d 100644
--- a/elf/dl-error.c
+++ b/elf/dl-error.c
@@ -23,6 +23,9 @@
#include <stdlib.h>
#include <string.h>
+/* This is the internal function we use to generate the error string. */
+extern char *_strerror_internal __P ((int, char *, size_t));
+
/* This structure communicates state between _dl_catch_error and
_dl_signal_error. */
struct catch
@@ -74,11 +77,14 @@ _dl_signal_error (int errcode,
{
/* Lossage while resolving the program's own symbols is always fatal. */
extern char **_dl_argv; /* Set in rtld.c at startup. */
+ char buffer[1024];
_dl_sysdep_fatal (_dl_argv[0] ?: "<program name unknown>",
": error in loading shared libraries: ",
objname ?: "", objname ? ": " : "",
errstring, errcode ? ": " : "",
- errcode ? strerror (errcode) : "", "\n", NULL);
+ (errcode
+ ? _strerror_internal (errcode, buffer, sizeof buffer)
+ : ""), "\n", NULL);
}
}
@@ -93,7 +99,7 @@ _dl_catch_error (char **errstring,
/* We need not handle `receiver' since setting a `catch' is handled
before it. */
- /* Some systems (.e.g, SPARC) handle constructors to local variables
+ /* Some systems (e.g., SPARC) handle constructors to local variables
inefficient. So we initialize `c' by hand. */
c.errstring = NULL;
c.objname = NULL;
diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c
index 2ec7e3a..ef34479 100644
--- a/elf/dl-lookup.c
+++ b/elf/dl-lookup.c
@@ -279,6 +279,7 @@ _dl_lookup_versioned_symbol (const char *undef_name, const ElfW(Sym) **ref,
const struct r_found_version *version,
int reloc_type)
{
+ extern char **_dl_argv;
const unsigned long int hash = _dl_elf_hash (undef_name);
struct sym_val current_value = { 0, NULL };
struct link_map **scope;
@@ -295,7 +296,9 @@ _dl_lookup_versioned_symbol (const char *undef_name, const ElfW(Sym) **ref,
if (res < 0)
/* Oh, oh. The file named in the relocation entry does not
contain the needed symbol. */
- _dl_signal_error (0, reference_name,
+ _dl_signal_error (0, (*reference_name
+ ? reference_name
+ : (_dl_argv[0] ?: "<main program>")),
make_string ("symbol ", undef_name, ", version ",
version->name,
" not defined in file ",
diff --git a/elf/rtld.c b/elf/rtld.c
index 48d8575..b1538aa 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -395,8 +395,7 @@ of this helper program; chances are you did not intend to run this program.\n",
{
/* Create a link_map for the executable itself.
This will be what dlopen on "" returns. */
- main_map = _dl_new_object (_dl_argv[0] ?: (char *) "<main program>",
- "", lt_executable);
+ main_map = _dl_new_object ((char *) "", "", lt_executable);
if (main_map == NULL)
_dl_sysdep_fatal ("cannot allocate memory for link map\n", NULL);
main_map->l_phdr = phdr;
diff --git a/glibcbug.in b/glibcbug.in
index 1d7eed7..69496b6 100644
--- a/glibcbug.in
+++ b/glibcbug.in
@@ -8,6 +8,7 @@
VERSION="@VERSION@"
BUGGLIBC="bugs@gnu.org"
ADDONS="@subdirs@"
+HOST="@host@"
PATH=/bin:/usr/bin:/usr/local/bin:$PATH
export PATH
@@ -119,6 +120,7 @@ ${ORGANIZATION- $ORGANIZATION_C}
>Release: libc-${VERSION}
>Environment:
$ENVIRONMENT_C
+`[ -n "$HOST" ] && echo Host type: $HOST`
`[ -n "$SYSTEM" ] && echo System: $SYSTEM`
`[ -n "$ARCH" ] && echo Architecture: $ARCH`
`[ -n "$MACHINE" ] && echo Machine: $MACHINE`
diff --git a/grp/Makefile b/grp/Makefile
index 20b58fb..8c63a4c 100644
--- a/grp/Makefile
+++ b/grp/Makefile
@@ -20,6 +20,7 @@
# Sub-makefile for grp portion of the library.
#
subdir := grp
+headers := grp.h
routines := fgetgrent initgroups setgroups \
getgrent getgrgid getgrnam \
diff --git a/intl/localealias.c b/intl/localealias.c
index 05832f0..58ed270 100644
--- a/intl/localealias.c
+++ b/intl/localealias.c
@@ -84,6 +84,9 @@ void free ();
# define strcasecmp __strcasecmp
# define strdup __strdup
+# define mempcpy __mempcpy
+# define HAVE_MEMPCPY 1
+
/* We need locking here since we can be called from different palces. */
# include <bits/libc-lock.h>
@@ -231,8 +234,13 @@ read_alias_file (fname, fname_len)
full_fname = (char *) alloca (fname_len + sizeof aliasfile);
ADD_BLOCK (block_list, full_fname);
+#ifdef HAVE_MEMPCPY
+ mempcpy (mempcpy (full_fname, fname, fname_len),
+ aliasfile, sizeof aliasfile);
+#else
memcpy (full_fname, fname, fname_len);
memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
+#endif
fp = fopen (full_fname, "r");
if (fp == NULL)
@@ -254,10 +262,23 @@ read_alias_file (fname, fname_len)
char *value;
char *cp;
- if (fgets (buf, BUFSIZ, fp) == NULL)
+ if (fgets (buf, sizeof buf, fp) == NULL)
/* EOF reached. */
break;
+ /* Possibly not the whole line fits into the buffer. Ignore
+ the rest of the line. */
+ if (strchr (buf, '\n') == NULL)
+ {
+ char altbuf[BUFSIZ];
+ do
+ if (fgets (altbuf, sizeof altbuf, fp) == NULL)
+ /* Make sure the inner loop will be left. The outer loop
+ will exit at the `feof' test. */
+ break;
+ while (strchr (altbuf, '\n') == NULL);
+ }
+
cp = buf;
/* Ignore leading white space. */
while (isspace (cp[0]))
@@ -324,7 +345,7 @@ read_alias_file (fname, fname_len)
alias, alias_len);
string_space_act += alias_len;
- map[nmap].alias = memcpy (&string_space[string_space_act],
+ map[nmap].value = memcpy (&string_space[string_space_act],
value, value_len);
string_space_act += value_len;
@@ -332,17 +353,6 @@ read_alias_file (fname, fname_len)
++added;
}
}
-
- /* Possibly not the whole line fits into the buffer. Ignore
- the rest of the line. */
- while (strchr (cp, '\n') == NULL)
- {
- cp = buf;
- if (fgets (buf, BUFSIZ, fp) == NULL)
- /* Make sure the inner loop will be left. The outer loop
- will exit at the `feof' test. */
- *cp = '\n';
- }
}
/* Should we test for ferror()? I think we have to silently ignore
diff --git a/libc.map b/libc.map
index 57ac588..d77be20 100644
--- a/libc.map
+++ b/libc.map
@@ -86,7 +86,7 @@ GLIBC_2.0 {
_IO_seekmark; _IO_unsave_markers; _IO_str_overflow;
_IO_str_underflow; _IO_str_init_static; _IO_str_init_readonly;
_IO_str_seekoff; _IO_str_pbackfail; _IO_file_jumps;
- _IO_peekc_locked;
+ _IO_peekc_locked; _IO_flockfile; _IO_funlockfile;
__vsscanf; __vfscanf; __vsnprintf;
_rpc_dtablesize; _null_auth; _seterr_reply;
__res_randomid;
diff --git a/manual/creature.texi b/manual/creature.texi
index 03f79ed..1efd1f5 100644
--- a/manual/creature.texi
+++ b/manual/creature.texi
@@ -25,17 +25,36 @@ self-contained way.
If you define this macro, then the functionality from the POSIX.1
standard (IEEE Standard 1003.1) is available, as well as all of the
@w{ISO C} facilities.
+
+The state of @code{_POSIX_SOURCE} is irrelevant if you define the
+macro @code{_POSIX_C_SOURCE} to a positive integer.
@end defvr
@comment (none)
@comment POSIX.2
-@defvr Macro _POSIX_C_SOURCE
-If you define this macro with a value of @code{1}, then the
-functionality from the POSIX.1 standard (IEEE Standard 1003.1) is made
-available. If you define this macro with a value of @code{2}, then both
-the functionality from the POSIX.1 standard and the functionality from
-the POSIX.2 standard (IEEE Standard 1003.2) are made available. This is
-in addition to the @w{ISO C} facilities.
+Define this macro to a positive integer to control which POSIX
+functionality is made available. The greater the value of this macro,
+the more functionality is made available.
+
+If you define this macro to a value greater than or equal to @code{1},
+then the functionality from the 1990 edition of the POSIX.1 standard
+(IEEE Standard 1003.1-1990) is made available.
+
+If you define this macro to a value greater than or equal to @code{2},
+then the functionality from the 1992 edition of the POSIX.2 standard
+(IEEE Standard 1003.2-1992) is made available.
+
+If you define this macro to a value greater than or equal to @code{199309L},
+then the functionality from the 1993 edition of the POSIX.1b standard
+(IEEE Standard 1003.1b-1993) is made available.
+
+Greater values for @code{_POSIX_C_SOURCE} will enable future extensions.
+The POSIX standards process will define these values as necessary, and
+the GNU C Library should support them some time after they become standardized.
+The 1996 edition of POSIX.1 (ISO/IEC 9945-1: 1996) states that
+if you define @code{_POSIX_C_SOURCE} to a value greater than
+or equal to @code{199506L}, then the functionality from the 1996
+edition is made available.
The Single Unix Specification specify that setting this macro to the
value @code{199506L} selects all the values specified by the POSIX
diff --git a/manual/filesys.texi b/manual/filesys.texi
index c33bad8..2921a53 100644
--- a/manual/filesys.texi
+++ b/manual/filesys.texi
@@ -351,8 +351,8 @@ The return value is @code{0} in case the next entry was read
successfully. In this case a pointer to the result is returned in
*@var{result}. It is not required that *@var{result} is the same as
@var{entry}. If something goes wrong while executing @code{readdir_r}
-the function returns @code{-1}. The @code{errno} variable is set like
-described for @code{readdir}.
+the function returns a value indicating the error (as described for
+@code{readdir}).
@strong{Portability Note:} On some systems, @code{readdir_r} may not
return a terminated string as the file name even if no @code{d_reclen}
diff --git a/pwd/Makefile b/pwd/Makefile
index 3372632..6b3eeab 100644
--- a/pwd/Makefile
+++ b/pwd/Makefile
@@ -20,6 +20,7 @@
# Sub-makefile for pwd portion of the library.
#
subdir := pwd
+headers := pwd.h
routines := fgetpwent getpw putpwent \
getpwent getpwnam getpwuid \
diff --git a/stdlib/strfmon.c b/stdlib/strfmon.c
index c956ae3..4f8b5b7 100644
--- a/stdlib/strfmon.c
+++ b/stdlib/strfmon.c
@@ -204,7 +204,8 @@ __strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
va_end (ap);
return -1;
}
- n_sign_posn = 5; /* This is a else unused value. */
+ p_sign_posn = 0;
+ n_sign_posn = 0;
continue;
case '!': /* Don't print the currency symbol. */
print_curr_symbol = 0;
@@ -218,6 +219,13 @@ __strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
break;
}
+ /* If not specified by the format string now find the values for
+ the format specification. */
+ if (p_sign_posn == -1)
+ p_sign_posn = *_NL_CURRENT (LC_MONETARY, P_SIGN_POSN);
+ if (n_sign_posn == -1)
+ n_sign_posn = *_NL_CURRENT (LC_MONETARY, N_SIGN_POSN);
+
if (isdigit (*fmt))
{
/* Parse field width. */
@@ -341,13 +349,7 @@ __strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
sign_char = '-';
cs_precedes = *_NL_CURRENT (LC_MONETARY, N_CS_PRECEDES);
sep_by_space = *_NL_CURRENT (LC_MONETARY, N_SEP_BY_SPACE);
- /* If the '(' flag is not given use the sign position from
- the current locale. */
- if (n_sign_posn == -1)
- sign_posn = *_NL_CURRENT (LC_MONETARY, N_SIGN_POSN);
- else
- /* This means use parentheses. */
- sign_posn = 0;
+ sign_posn = n_sign_posn;
}
else
{
@@ -358,13 +360,7 @@ __strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
sign_char = ' ';
cs_precedes = *_NL_CURRENT (LC_MONETARY, P_CS_PRECEDES);
sep_by_space = *_NL_CURRENT (LC_MONETARY, P_SEP_BY_SPACE);
- if (n_sign_posn == -1)
- sign_posn = *_NL_CURRENT (LC_MONETARY, P_SIGN_POSN);
- else
- /* Here we don't set SIGN_POSN to 0 because we don'want to
- print <SP> instead of the braces and this is what the
- value 5 means. */
- sign_posn = 5;
+ sign_posn = p_sign_posn;
}
/* Set default values for unspecified information. */
@@ -384,9 +380,7 @@ __strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
startp = dest; /* Remember start so we can compute length. */
if (sign_posn == 0)
- out_char (left_paren);
- if (sign_posn == 5) /* This is for positive number and ( flag. */
- out_char (' ');
+ out_char (is_negative ? left_paren : ' ');
if (cs_precedes)
{
@@ -495,9 +489,7 @@ __strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
}
if (sign_posn == 0)
- out_char (right_paren);
- if (sign_posn == 5)
- out_char (' '); /* This is for positive number and ( flag. */
+ out_char (is_negative ? right_paren : ' ');
/* Now test whether the output width is filled. */
if (dest - startp < width)
diff --git a/sysdeps/generic/bits/errno.h b/sysdeps/generic/bits/errno.h
index cb61da7..622c2c9 100644
--- a/sysdeps/generic/bits/errno.h
+++ b/sysdeps/generic/bits/errno.h
@@ -22,20 +22,15 @@
#undef __need_Emath
#define __Emath_defined 1
-# define EDOM 1
-# define ERANGE 2
+# define EDOM XXX <--- fill in what is actually needed
+# define ERANGE XXX <--- fill in what is actually needed
#endif
#ifdef _ERRNO_H
-# define ENOSYS 3
-# define EINVAL 4
-# define ESPIPE 5
-# define EBADF 6
-# define ENOMEM 7
-# define EACCES 8
-# define ENFILE 9
-# define EMFILE 10
-# define ENOMSG 11
+# error "Define here all the missing error messages for the port. These"
+# error "must match the numbers of the kernel."
+# define Exxxx XXX
+...
#endif
#define __set_errno(val) errno = (val)
diff --git a/sysdeps/generic/make_siglist.c b/sysdeps/generic/make_siglist.c
index b670baf..2cfd498 100644
--- a/sysdeps/generic/make_siglist.c
+++ b/sysdeps/generic/make_siglist.c
@@ -17,6 +17,11 @@
Boston, MA 02111-1307, USA. */
#include <stdio.h>
+
+/* Include signal.h now so that we can safely reinclude it again in
+ signame.c later on. We completely override the definitions, we
+ just have to be sure that the include guard in signal.h keeps it
+ from redefining the signal values. */
#include <signal.h>
/* Get this configuration's defns of the signal numbers. */
@@ -32,6 +37,9 @@
#define HAVE_PSIGNAL
#define sys_siglist my_siglist /* Avoid clash with signal.h. */
+#undef NSIG
+#define NSIG _NSIG /* make sure that the value from SIGNUM_H is used. */
+
#include "signame.c"
diff --git a/sysdeps/generic/readdir_r.c b/sysdeps/generic/readdir_r.c
index ae14d18..41bf87f 100644
--- a/sysdeps/generic/readdir_r.c
+++ b/sysdeps/generic/readdir_r.c
@@ -27,7 +27,7 @@ __readdir_r (DIR *dirp, struct dirent *entry, struct dirent **result)
{
__set_errno (ENOSYS);
*result = NULL;
- return -1;
+ return ENOSYS;
}
weak_alias (__readdir_r, readdir_r)
diff --git a/sysdeps/standalone/bits/errno.h b/sysdeps/standalone/bits/errno.h
new file mode 100644
index 0000000..30eec43
--- /dev/null
+++ b/sysdeps/standalone/bits/errno.h
@@ -0,0 +1,62 @@
+/* Copyright (C) 1991, 1994, 1996, 1997 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. */
+
+/* This file defines the `errno' constants. */
+
+#if !defined __Emath_defined && (defined _ERRNO_H || defined __need_Emath)
+#undef __need_Emath
+#define __Emath_defined 1
+
+# define EDOM 1
+# define ERANGE 2
+#endif
+
+#ifdef _ERRNO_H
+# define ENOSYS 3
+# define EINVAL 4
+# define ESPIPE 5
+# define EBADF 6
+# define ENOMEM 7
+# define EACCES 8
+# define ENFILE 9
+# define EMFILE 10
+# define ENOMSG 11
+# define ENAMETOOLONG 12
+# define ELOOP 13
+# define ENOMSG 14
+# define E2BIG 15
+# define EINTR 16
+# define EILSEQ 17
+# define ENOEXEC 18
+# define ENOENT 19
+# define EPROTOTYPE 20
+# define ESRCH 21
+# define EPERM 22
+# define EEXIST 23
+# define ENOTDIR 24
+# define ESTALE 25
+# define ENOTTY 26
+# define EISDIR 27
+# define EOPNOTSUPP 28
+# define EAGAIN 29
+# define EIO 30
+# define ENOSPC 31
+# define EBUSY 32
+#endif
+
+#define __set_errno(val) errno = (val)
diff --git a/sysdeps/unix/readdir_r.c b/sysdeps/unix/readdir_r.c
index fa26db6..a4462f7 100644
--- a/sysdeps/unix/readdir_r.c
+++ b/sysdeps/unix/readdir_r.c
@@ -103,6 +103,6 @@ __readdir_r (DIR *dirp, struct dirent *entry, struct dirent **result)
__libc_lock_unlock (dirp->lock);
- return dp != NULL ? 0 : -1;
+ return dp != NULL ? 0 : errno;
}
weak_alias (__readdir_r, readdir_r)
diff --git a/sysdeps/unix/sysv/linux/alpha/Dist b/sysdeps/unix/sysv/linux/alpha/Dist
index ebbf300..715fda7 100644
--- a/sysdeps/unix/sysv/linux/alpha/Dist
+++ b/sysdeps/unix/sysv/linux/alpha/Dist
@@ -12,4 +12,4 @@ kernel_termios.h
sys/acct.h
sys/io.h
sys/procfs.h
-xstatconv.c \ No newline at end of file
+xstatconv.c
diff --git a/time/strftime.c b/time/strftime.c
index 1da36e1..fdf0500 100644
--- a/time/strftime.c
+++ b/time/strftime.c
@@ -275,7 +275,7 @@ memcpy_lowcase (dest, src, len)
size_t len;
{
while (len-- > 0)
- dest[len] = TOLOWER (src[len]);
+ dest[len] = TOLOWER ((unsigned char) src[len]);
return dest;
}
@@ -288,7 +288,7 @@ memcpy_uppcase (dest, src, len)
size_t len;
{
while (len-- > 0)
- dest[len] = TOUPPER (src[len]);
+ dest[len] = TOUPPER ((unsigned char) src[len]);
return dest;
}
@@ -348,7 +348,7 @@ iso_week_days (yday, wday)
}
-#ifndef _NL_CURRENT
+#if !(defined _NL_CURRENT || HAVE_STRFTIME)
static char const weekday_name[][10] =
{
"Sunday", "Monday", "Tuesday", "Wednesday",
@@ -362,13 +362,27 @@ static char const month_name[][10] =
#endif
+#ifdef emacs
+# define my_strftime emacs_strftime
+ /* Emacs 20.2 uses `-Dstrftime=emacs_strftime' when compiling,
+ because that's how strftime used to be configured.
+ Undo this, since it gets in the way of accessing the underlying strftime,
+ which is needed for things like %Ec in Solaris.
+ The following two lines can be removed once Emacs stops compiling with
+ `-Dstrftime=emacs_strftime'. */
+# undef strftime
+size_t strftime __P ((char *, size_t, const char *, const struct tm *));
+#else
+# define my_strftime strftime
+#endif
+
#if !defined _LIBC && HAVE_TZNAME && HAVE_TZSET
/* Solaris 2.5 tzset sometimes modifies the storage returned by localtime.
Work around this bug by copying *tp before it might be munged. */
size_t _strftime_copytm __P ((char *, size_t, const char *,
const struct tm *));
size_t
- strftime (s, maxsize, format, tp)
+ my_strftime (s, maxsize, format, tp)
char *s;
size_t maxsize;
const char *format;
@@ -378,10 +392,8 @@ static char const month_name[][10] =
tmcopy = *tp;
return _strftime_copytm (s, maxsize, format, &tmcopy);
}
-# ifdef strftime
-# undef strftime
-# endif
-# define strftime(S, Maxsize, Format, Tp) \
+# undef my_strftime
+# define my_strftime(S, Maxsize, Format, Tp) \
_strftime_copytm (S, Maxsize, Format, Tp)
#endif
@@ -393,7 +405,7 @@ static char const month_name[][10] =
anywhere, so to determine how many characters would be
written, use NULL for S and (size_t) UINT_MAX for MAXSIZE. */
size_t
-strftime (s, maxsize, format, tp)
+my_strftime (s, maxsize, format, tp)
char *s;
size_t maxsize;
const char *format;
@@ -411,6 +423,7 @@ strftime (s, maxsize, format, tp)
size_t am_len = strlen (a_month);
size_t ap_len = strlen (ampm);
#else
+# if !HAVE_STRFTIME
const char *const f_wkday = weekday_name[tp->tm_wday];
const char *const f_month = month_name[tp->tm_mon];
const char *const a_wkday = f_wkday;
@@ -419,9 +432,12 @@ strftime (s, maxsize, format, tp)
size_t aw_len = 3;
size_t am_len = 3;
size_t ap_len = 2;
+# endif
#endif
+#if defined _NL_CURRENT || !HAVE_STRFTIME
size_t wkday_len = strlen (f_wkday);
size_t month_len = strlen (f_month);
+#endif
const char *zone;
size_t zonelen;
size_t i = 0;
@@ -475,6 +491,7 @@ strftime (s, maxsize, format, tp)
int to_lowcase = 0;
int to_uppcase = 0;
int change_case = 0;
+ int format_char;
#if DO_MULTIBYTE
@@ -603,7 +620,8 @@ strftime (s, maxsize, format, tp)
}
/* Now do the specified format. */
- switch (*f)
+ format_char = *f;
+ switch (format_char)
{
#define DO_NUMBER(d, v) \
digits = width == -1 ? d : width; \
@@ -626,8 +644,12 @@ strftime (s, maxsize, format, tp)
to_uppcase = 1;
to_lowcase = 0;
}
+#if defined _NL_CURRENT || !HAVE_STRFTIME
cpy (aw_len, a_wkday);
break;
+#else
+ goto underlying_strftime;
+#endif
case 'A':
if (modifier != 0)
@@ -637,15 +659,23 @@ strftime (s, maxsize, format, tp)
to_uppcase = 1;
to_lowcase = 0;
}
+#if defined _NL_CURRENT || !HAVE_STRFTIME
cpy (wkday_len, f_wkday);
break;
+#else
+ goto underlying_strftime;
+#endif
case 'b':
case 'h': /* POSIX.2 extension. */
if (modifier != 0)
goto bad_format;
+#if defined _NL_CURRENT || !HAVE_STRFTIME
cpy (am_len, a_month);
break;
+#else
+ goto underlying_strftime;
+#endif
case 'B':
if (modifier != 0)
@@ -655,8 +685,12 @@ strftime (s, maxsize, format, tp)
to_uppcase = 1;
to_lowcase = 0;
}
+#if defined _NL_CURRENT || !HAVE_STRFTIME
cpy (month_len, f_month);
break;
+#else
+ goto underlying_strftime;
+#endif
case 'c':
if (modifier == 'O')
@@ -666,32 +700,58 @@ strftime (s, maxsize, format, tp)
&& *(subfmt = _NL_CURRENT (LC_TIME, ERA_D_T_FMT)) != '\0'))
subfmt = _NL_CURRENT (LC_TIME, D_T_FMT);
#else
+# if HAVE_STRFTIME
+ goto underlying_strftime;
+# else
subfmt = "%a %b %e %H:%M:%S %Y";
+# endif
#endif
subformat:
{
char *old_start = p;
- size_t len = strftime (NULL, maxsize - i, subfmt, tp);
+ size_t len = my_strftime (NULL, maxsize - i, subfmt, tp);
if (len == 0 && *subfmt)
return 0;
- add (len, strftime (p, maxsize - i, subfmt, tp));
+ add (len, my_strftime (p, maxsize - i, subfmt, tp));
if (to_uppcase)
while (old_start < p)
{
- *old_start = TOUPPER (*old_start);
+ *old_start = TOUPPER ((unsigned char) *old_start);
++old_start;
}
}
break;
+#if HAVE_STRFTIME && ! (defined _NL_CURRENT && HAVE_STRUCT_ERA_ENTRY)
+ underlying_strftime:
+ {
+ /* The relevant information is available only via the
+ underlying strftime implementation, so use that. */
+ char ufmt[4];
+ char *u = ufmt;
+ char ubuf[1024]; /* enough for any single format in practice */
+ size_t len;
+ *u++ = '%';
+ if (modifier != 0)
+ *u++ = modifier;
+ *u++ = format_char;
+ *u = '\0';
+ len = strftime (ubuf, sizeof ubuf, ufmt, tp);
+ if (len == 0)
+ return 0;
+ cpy (len, ubuf);
+ }
+ break;
+#endif
+
case 'C': /* POSIX.2 extension. */
if (modifier == 'O')
goto bad_format;
-#if HAVE_STRUCT_ERA_ENTRY
if (modifier == 'E')
{
+#if HAVE_STRUCT_ERA_ENTRY
struct era_entry *era = _nl_get_era_entry (tp);
if (era)
{
@@ -699,8 +759,13 @@ strftime (s, maxsize, format, tp)
cpy (len, era->name_fmt);
break;
}
- }
+#else
+# if HAVE_STRFTIME
+ goto underlying_strftime;
+# endif
#endif
+ }
+
{
int year = tp->tm_year + TM_YEAR_BASE;
DO_NUMBER (1, year / 100 - (year % 100 < 0));
@@ -714,8 +779,13 @@ strftime (s, maxsize, format, tp)
&& *(subfmt = _NL_CURRENT (LC_TIME, ERA_D_FMT)) != '\0'))
subfmt = _NL_CURRENT (LC_TIME, D_FMT);
goto subformat;
-#endif
+#else
+# if HAVE_STRFTIME
+ goto underlying_strftime;
+# else
/* Fall through. */
+# endif
+#endif
case 'D': /* POSIX.2 extension. */
if (modifier != 0)
goto bad_format;
@@ -745,9 +815,9 @@ strftime (s, maxsize, format, tp)
do_number:
/* Format the number according to the MODIFIER flag. */
-#ifdef _NL_CURRENT
if (modifier == 'O' && 0 <= number_value)
{
+#ifdef _NL_CURRENT
/* Get the locale specific alternate representation of
the number NUMBER_VALUE. If none exist NULL is returned. */
const char *cp = _nl_get_alt_digit (number_value);
@@ -761,8 +831,12 @@ strftime (s, maxsize, format, tp)
break;
}
}
- }
+#else
+# if HAVE_STRFTIME
+ goto underlying_strftime;
+# endif
#endif
+ }
{
unsigned int u = number_value;
@@ -852,6 +926,9 @@ strftime (s, maxsize, format, tp)
case 'P':
to_lowcase = 1;
+#if !defined _NL_CURRENT && HAVE_STRFTIME
+ format_char = 'p';
+#endif
/* FALLTHROUGH */
case 'p':
@@ -860,8 +937,12 @@ strftime (s, maxsize, format, tp)
to_uppcase = 0;
to_lowcase = 1;
}
+#if defined _NL_CURRENT || !HAVE_STRFTIME
cpy (ap_len, ampm);
break;
+#else
+ goto underlying_strftime;
+#endif
case 'R': /* GNU extension. */
subfmt = "%H:%M";
@@ -927,8 +1008,13 @@ strftime (s, maxsize, format, tp)
&& *(subfmt = _NL_CURRENT (LC_TIME, ERA_T_FMT)) != '\0'))
subfmt = _NL_CURRENT (LC_TIME, T_FMT);
goto subformat;
-#endif
+#else
+# if HAVE_STRFTIME
+ goto underlying_strftime;
+# else
/* Fall through. */
+# endif
+#endif
case 'T': /* POSIX.2 extension. */
subfmt = "%H:%M:%S";
goto subformat;
@@ -1000,26 +1086,30 @@ strftime (s, maxsize, format, tp)
DO_NUMBER (1, tp->tm_wday);
case 'Y':
-#if HAVE_STRUCT_ERA_ENTRY
if (modifier == 'E')
{
+#if HAVE_STRUCT_ERA_ENTRY
struct era_entry *era = _nl_get_era_entry (tp);
if (era)
{
subfmt = strchr (era->name_fmt, '\0') + 1;
goto subformat;
}
- }
+#else
+# if HAVE_STRFTIME
+ goto underlying_strftime;
+# endif
#endif
+ }
if (modifier == 'O')
goto bad_format;
else
DO_NUMBER (1, tp->tm_year + TM_YEAR_BASE);
case 'y':
-#if HAVE_STRUCT_ERA_ENTRY
if (modifier == 'E')
{
+#if HAVE_STRUCT_ERA_ENTRY
struct era_entry *era = _nl_get_era_entry (tp);
if (era)
{
@@ -1027,8 +1117,12 @@ strftime (s, maxsize, format, tp)
DO_NUMBER (1, (era->offset
+ (era->direction == '-' ? -delta : delta)));
}
- }
+#else
+# if HAVE_STRFTIME
+ goto underlying_strftime;
+# endif
#endif
+ }
DO_NUMBER (2, (tp->tm_year % 100 + 100) % 100);
case 'Z':
diff --git a/time/strptime.c b/time/strptime.c
index 30b0156..36f42c9 100644
--- a/time/strptime.c
+++ b/time/strptime.c
@@ -549,10 +549,7 @@ strptime_internal (buf, format, tm, decided)
break;
case 'Y':
/* Match year including century number. */
- if (sizeof (time_t) > 4)
- get_number (0, 9999);
- else
- get_number (0, 2036);
+ get_number (0, 9999);
tm->tm_year = val - 1900;
break;
case 'Z':
@@ -712,6 +709,7 @@ strptime_internal (buf, format, tm, decided)
case 'y':
/* Match year within century using alternate numeric symbols. */
get_alt_number (0, 99);
+ tm->tm_year = val >= 69 ? val : val + 100;
break;
default:
return NULL;
diff --git a/wcsmbs/wchar.h b/wcsmbs/wchar.h
index c7ab509..82e51fa 100644
--- a/wcsmbs/wchar.h
+++ b/wcsmbs/wchar.h
@@ -127,10 +127,10 @@ extern int __wcscoll_l __P ((__const wchar_t *__s1, __const wchar_t *__s2,
`wcscoll' to the original strings. */
extern size_t __wcsxfrm_l __P ((wchar_t *__s1, __const wchar_t *__s2,
size_t __n, __locale_t __loc));
-#endif
/* Duplicate S, returning an identical malloc'd string. */
extern wchar_t *wcsdup __P ((__const wchar_t *__s));
+#endif
/* Find the first occurrence of WC in WCS. */
extern wchar_t *wcschr __P ((__const wchar_t *__wcs, wchar_t __wc));
@@ -138,11 +138,11 @@ extern wchar_t *wcschr __P ((__const wchar_t *__wcs, wchar_t __wc));
extern wchar_t *wcsrchr __P ((__const wchar_t *__wcs, wchar_t __wc));
/* Return the length of the initial segmet of WCS which
- consists entirely of wide-characters not in REJECT. */
+ consists entirely of wide characters not in REJECT. */
extern size_t wcscspn __P ((__const wchar_t *__wcs,
__const wchar_t *__reject));
/* Return the length of the initial segmet of WCS which
- consists entirely of wide-characters in ACCEPT. */
+ consists entirely of wide characters in ACCEPT. */
extern size_t wcsspn __P ((__const wchar_t *__wcs, __const wchar_t *__accept));
/* Find the first occurrence in WCS of any character in ACCEPT. */
extern wchar_t *wcspbrk __P ((__const wchar_t *__wcs,
@@ -155,27 +155,27 @@ extern wchar_t *wcstok __P ((wchar_t *__restrict __s,
__const wchar_t *__restrict __delim,
wchar_t **__restrict __ptr));
-/* Return the number of wide-characters in S. */
+/* Return the number of wide characters in S. */
extern size_t wcslen __P ((__const wchar_t *__s));
-/* Search N bytes of S for C. */
+/* Search N wide characters of S for C. */
extern wchar_t *wmemchr __P ((__const wchar_t *__s, wchar_t __c, size_t __n));
-/* Compare N bytes of S1 and S2. */
+/* Compare N wide characters of S1 and S2. */
extern int wmemcmp __P ((__const wchar_t *__restrict __s1,
__const wchar_t *__restrict __s2, size_t __n));
-/* Copy N bytes of SRC to DEST. */
+/* Copy N wide characters of SRC to DEST. */
extern wchar_t *wmemcpy __P ((wchar_t *__restrict __s1,
__const wchar_t *__restrict __s2, size_t __n));
-/* Copy N bytes of SRC to DEST, guaranteeing
+/* Copy N wide characters of SRC to DEST, guaranteeing
correct behavior for overlapping strings. */
extern wchar_t *wmemmove __P ((wchar_t *__s1, __const wchar_t *__s2,
size_t __n));
-/* Set N bytes of S to C. */
+/* Set N wide characters of S to C. */
extern wchar_t *wmemset __P ((wchar_t *__s, wchar_t __c, size_t __n));