summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1996-09-20 01:58:09 +0000
committerUlrich Drepper <drepper@redhat.com>1996-09-20 01:58:09 +0000
commitec4b0518a39f46354c0d75b4c3e2f507c9af261e (patch)
tree642ad0e74e2222c3750073d7827cfc0aead1372e
parentd66b7b41b83e89e9ef27950adc31891c11800144 (diff)
downloadglibc-ec4b0518a39f46354c0d75b4c3e2f507c9af261e.tar.gz
glibc-ec4b0518a39f46354c0d75b4c3e2f507c9af261e.tar.xz
glibc-ec4b0518a39f46354c0d75b4c3e2f507c9af261e.zip
update from main archive 960919 cvs/libc-960920
Thu Sep 19 21:50:55 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/posix/gettimeofday.c (__gettimeofday): Use localtime_r
	instead of localtime.
	Reported by Matthias Urlichs.

	* shlib-versions: Remove version number for libcrypt.
	* features.h: Define __USE_REENTRANT if _REENTRANT or _THREAD_SAFE.
	* libc-symbols.h: Define _REENTRANT while compiling libc.

	* sysdeps/unix/sysv/linux/i386/sysdep.S (__errno_location):
	Define even if !_LIBC_REENTRANT.
	* sysdeps/unix/sysv/linux/i386/sysdep.S (__errno_location):
	Likewise.

	* sysdeps/posix/cuserid.h: Remove prototype for geteuid().
	De-ANSI-fy.

	* MakeTAGS ($P/libc.pot): Generate correctly formed header.
	* po/header.pot: Correct title line.
	* po/nl.po: Update.

Thu Sep 19 18:59:55 1996  Ulrich Drepper  <drepper@cygnus.com>

	* Makeconfig (soversions.mk): Prefer shared lib version numbers
	is add ons over version in libc itself.

	* sysdeps/unix/sysv/linux/i386/sysdep.S: Include <sysdep.h>.
	* sysdeps/unix/sysv/linux/i386/sysdep.h: Prevent multiple
	inclusion.

	* libio/iofgets.c: Use __flockfile and __funlockfile instead of
 	_IO_flockfile and _IO_funlockfile resp.

	* locale/categories.def: Partly support for correct `era' handling
	in LC_TIME category.
	* locale/langinfo.h: Likewise.
	* locale/programs/ld-time.c: Likewise.
	* locale/localeinfo.h: Change comment a bit.

	* malloc/memalign.c: Don't use goto, not necessary anymore.

1996-09-18  Paul Eggert  <eggert@twinsun.com>

	* time/mktime.c (ydhms_tm_diff):  Work correctly even if year
	is negative, or if time_t is unsigned.
	* time/strftime.c (tm_diff): Work correctly even if tm_year
	is near INT_MIN.

Tue Sep 17 16:14:34 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/fpu/__math.h (__inline_mathop): Changed to generate
 	all three versions of the math function.
	(__inline_mathopf, __inline_mathopl): Removed.
	(__inline_functions): New temporary definition containing all
 	non-trivial inline functions.

Wed Sep 18 00:25:41 1996  Ulrich Drepper  <drepper@cygnus.com>

	* time/strftime.c (strftime): The T_FMT_AMPM string may be empty.

Tue Sep 17 20:27:18 1996  Ulrich Drepper  <drepper@cygnus.com>

	* math/Makefile (extra-libs-others): Use $(extra-libs) instead
	of $(extra-libc).

Tue Sep 17 17:09:44 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/stub/fpu_control.h: Correct end of file comment.

Tue Sep 17 05:39:18 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdio-common/bug3.c, stdio-common/bug4.c, stdio-common/bug5.c,
	stdio-common/test-popen.c: Remove temporary files after test.
	* stdio-common/bug5.c: Use `system' instead of `execlp'.
	Patches by Andreas Jaeger.

	* stdio-common/bug5.c: Create string for `system' argument to
	make sure the input and output file names are really correct.

Sun Sep 15 12:46:44 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* configure.in: If $os contains a hyphen add the part before the
	hyphen to $ostry.

Sun Sep 15 18:14:02 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/fpu/__math.h (__ieee754_pow, __ieee754_powf,
	__ieee754_powl): Rename local variable i to __i.
	(__ieee754_atan2, __ieee754_atan2f, __ieee754_atan2l): New inline
	functions.
	* sysdeps/m68k/fpu/e_atan2.c, sysdeps/m68k/fpu/e_atan2f.c,
	sysdeps/m68k/fpu/e_atan2l.c: New files.

1996-09-15  Paul Eggert  <eggert@twinsun.com>

	* manual/time.texi: Change `range X to Y' to `range X through
	Y', to avoid ambiguity in English.

	(strftime): Numbers that do not have a range indicated are not padded.
	Describe E and O modifiers.
	%g, %G, %u: New formats.
	%C, %y, %Y: Describe behavior on negative years.
	%e: Fix typo (was labeled %d).
	%l, %V: Fix typo in range.
	%M, %S, %U, %w, %W: Give ranges.
	%p: Clarify how noon and midnight are handled for AM and PM.
	%s: Clarify leap second handling.
	%r: Now locale-defined.
	%C, %D, %e, %h, %n, %r, %t, %T: Say that they are POSIX.2 extensions.
	%z: Say that it is a GNU extension.
	%Z: Wording fix.

	* time/strftime.c: (strftime):
		%V: Fix mishandling of week numbers near year boundaries.
		%g, %G: New formats (suggested by Arthur David Olson).
		%U, %W: Use inline expression instead of `week' function.
		%C, %y: Handle negative years portably.
		%C, %Y: Use width 1, since values can be arbitrarily wide.
		%r: Use T_FMT_AMPM format if _NL_CURRENT is defined.
		%u: New Posix.2 format.
		%w: Width is 1, not 2.
	(iso_week_days): New function, for %V, %G, %g.
	(week): Remove; it didn't handle %V correctly.
	(__isleap): New macro.
	(mbsinit): Use arg, to pacify GCC -Wall.

1996-09-13  Paul Eggert  <eggert@twinsun.com>

	* time/strftime.c (strftime):
	If using the GNU C library, do not bother to check for
	multibyte encodings, since they're safe in formats.  Otherwise:
	  - Check for multibyte encodings when encountering any character that
	  is not in the basic execution character set of the C Standard.
	  - Use mbrlen (if available) instead of mblen, to avoid modifying
	  mblen's internal state.
	  - Do not assume that '%' cannot appear as the first character of a
	  multibyte character sequence, since this is possible when not in the
	  initial shift state.
	(HAVE_MBRLEN, MULTIBYTE_IS_FORMAT_SAFE): Define if _LIBC is defined.
	(DO_MULTIBYTE): New macro.
	(<ctype.h>): Do not include.
	(<wchar.h>): Include if HAVE_MBRLEN.
	(mbstate_t, mbrlen, mbsinit): Define if ! HAVE_MBRLEN.
	(mbstate_zero): New constant.

1996-09-12  Paul Eggert  <eggert@twinsun.com>

	* time/strftime.c (strftime):
	Use an empty zone if it can't be determined; POSIX.2 requires this.
	Use plain `int' for pad and modifier (which now contain char value).
	Use plain `int' for number_value, to print negative values correctly.
	Use plain `int' for digits; there was no need to make it unsigned.
	Initialize subfmt consistently.
	Remove incorrect code for %EC and %Ey; they aren't implemented yet.
	For %O, if there is no alternate digit, output Ascii instead of "".
	Output the `%' of an unknown format; this is most likely the right
	thing to do if a multibyte string has been misparsed.

Thu Sep 12 23:23:13 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* stdio-common/scanf7.c (main): Remove extra conversion from
	printf format string.

Thu Sep 12 23:01:16 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* stdlib/test-canon.c (tests): Rename structure member from errno
	to error, all uses changed.

Thu Sep 12 20:08:06 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/fpu/__math.h (__ldexp, __ldexpf, __ldexpl):
	Removed.
	* sysdeps/m68k/fpu/s_ldexp.c, sysdeps/m68k/fpu/s_ldexpf.c,
	sysdeps/m68k/fpu/s_ldexpl.c: Removed, use generic implementation
	instead.
	* sysdeps/m68k/fpu/s_scalbn.c, sysdeps/m68k/fpu/s_scalbnf.c,
	sysdeps/m68k/fpu/s_scalbnl.c: Replaced with old contents of
	s_ldexp.c, s_ldexpf.c and s_ldexpl.c, resp., suitably adpted.

	* sysdeps/m68k/fpu/__math.h (__frexp, __frexpf, __frexpl):
	Return value must be in [0.5, 1), not [1, 2).  Reported by Chris
	Lawrence.
	(__ilogb, __ilogbf, __ilogbl): Check for argument being zero.
	(__scalbn, __scalbnf, __scalbnl): Use second argument directly.

Thu Sep 12 19:59:24 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/libm-ieee754/e_acoshl.c: Fix typos.
	* sysdeps/libm-ieee754/s_cbrtl.c: Remove unused variable.

Thu Sep 12 19:59:24 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/libm-ieee754/e_acoshl.c: Fix typos.
	* sysdeps/libm-ieee754/s_cbrtl.c: Remove unused variable.

Thu Sep 12 19:56:07 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* inet/herrno.c (__h_errno_location): Fix return type.

Tue Sep 17 10:51:58 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* malloc/memalign.c (memalign): Only acquire __libc_malloc_lock
	for actual modifications to global state.

Fri Sep 13 01:21:36 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/Makefile (includes): Add -I$(common-objpfx)mach/.
	* sysdeps/mach/hurd/Makefile (includes): Add
	-I$(common-objpfx)hurd/.  Reported by Marcus Daniels.

	* sysdeps/generic/schedbits.h (struct sched_param): Renamed from
	struct sched_params.
	* sysdeps/stub/sched_setp.c (__sched_setparam): struct
	sched_params -> struct sched_param.
	* sysdeps/stub/sched_getp.c (__sched_getparam): Likewise.
	* sysdeps/stub/sched_sets.c (__sched_setscheduler): Likewise.

Thu Sep 12 23:58:25 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/libc-lock.h (__libc_cleanup_region_start): Fix
	syntax error.

	* stdio-common/Makefile: Put lockfile in routines
	unconditionally.
	Define _MT_SAFE_IO if using for libio and compiling reentrant
	libc.

	* stdio-common/vfprintf.c (__flockfile, __funlockfile): Declare
	this always, not just if _LIBC_REENTRANT.
	(__funlockfile): Don't use weak_extern for this one;
	__libc_cleanup_region_end might be defined and the use of
	__funlockfile can't be protected the way the use of __flockfile
	can be.

	* sched.h: New file.  Helper to access posix/sched.h.
Thu Sep 12 12:33:52 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/dl-cache.c: Delete second copy of file
	accidentally added on.

	* sysdeps/stub/intr-msg.h: New file.

	* stdio-common/vfprintf.c: Include <libc-lock.h>.
	* stdio-common/vfscanf.c: Include <libc-lock.h>.

	* sysdeps/mach/libc-lock.h (__libc_cleanup_region_start): New
	macro.
	(__libc_cleanup_region_end): New macro.
-rw-r--r--ChangeLog251
-rw-r--r--MakeTAGS5
-rw-r--r--Makeconfig4
-rwxr-xr-xconfigure47
-rw-r--r--configure.in5
-rw-r--r--features.h4
-rw-r--r--inet/herrno.c2
-rw-r--r--libc-symbols.h2
-rw-r--r--libio/iofgets.c4
-rw-r--r--locale/categories.def5
-rw-r--r--locale/langinfo.h4
-rw-r--r--locale/localeinfo.h2
-rw-r--r--locale/programs/ld-time.c42
-rw-r--r--manual/time.texi171
-rw-r--r--math/Makefile2
-rw-r--r--po/header.pot2
-rw-r--r--po/nl.po1612
-rw-r--r--shlib-versions7
-rw-r--r--stdio-common/Makefile6
-rw-r--r--stdio-common/bug3.c4
-rw-r--r--stdio-common/bug4.c4
-rw-r--r--stdio-common/bug5.c13
-rw-r--r--stdio-common/scanf7.c2
-rw-r--r--stdio-common/test-popen.c6
-rw-r--r--stdlib/test-canon.c6
-rw-r--r--sysdeps/libm-ieee754/e_acoshl.c8
-rw-r--r--sysdeps/libm-ieee754/s_cbrtl.c1
-rw-r--r--sysdeps/m68k/fpu/__math.h775
-rw-r--r--sysdeps/m68k/fpu/s_ldexp.c39
-rw-r--r--sysdeps/m68k/fpu/s_ldexpf.c5
-rw-r--r--sysdeps/m68k/fpu/s_ldexpl.c5
-rw-r--r--sysdeps/m68k/fpu/s_scalbn.c38
-rw-r--r--sysdeps/m68k/fpu/s_scalbnf.c4
-rw-r--r--sysdeps/m68k/fpu/s_scalbnl.c4
-rw-r--r--sysdeps/posix/cuserid.c13
-rw-r--r--sysdeps/posix/gettimeofday.c2
-rw-r--r--sysdeps/stub/fpu_control.h2
-rw-r--r--sysdeps/unix/sysv/linux/i386/sysdep.S12
-rw-r--r--sysdeps/unix/sysv/linux/i386/sysdep.h5
-rw-r--r--sysdeps/unix/sysv/linux/m68k/sysdep.S2
-rw-r--r--time/mktime.c18
-rw-r--r--time/strftime.c436
42 files changed, 2462 insertions, 1119 deletions
diff --git a/ChangeLog b/ChangeLog
index 98eb138801..cfb7ae8026 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -31,9 +31,244 @@ Thu Sep 12 23:58:25 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>
 	__funlockfile can't be protected the way the use of __flockfile
 	can be. 
 	
+Thu Sep 19 21:50:55 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* sysdeps/posix/gettimeofday.c (__gettimeofday): Use localtime_r
+	instead of localtime.
+	Reported by Matthias Urlichs.
+
+	* shlib-versions: Remove version number for libcrypt.
+	* features.h: Define __USE_REENTRANT if _REENTRANT or _THREAD_SAFE.
+	* libc-symbols.h: Define _REENTRANT while compiling libc.
+
+	* sysdeps/unix/sysv/linux/i386/sysdep.S (__errno_location):
+	Define even if !_LIBC_REENTRANT.
+	* sysdeps/unix/sysv/linux/i386/sysdep.S (__errno_location):
+	Likewise.
+
+	* sysdeps/posix/cuserid.h: Remove prototype for geteuid().
+	De-ANSI-fy.
+
+	* MakeTAGS ($P/libc.pot): Generate correctly formed header.
+	* po/header.pot: Correct title line.
+	* po/nl.po: Update.
+
+Thu Sep 19 18:59:55 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* Makeconfig (soversions.mk): Prefer shared lib version numbers
+	is add ons over version in libc itself.
+
+	* sysdeps/unix/sysv/linux/i386/sysdep.S: Include <sysdep.h>.
+	* sysdeps/unix/sysv/linux/i386/sysdep.h: Prevent multiple
+	inclusion.
+
+	* libio/iofgets.c: Use __flockfile and __funlockfile instead of
+ 	_IO_flockfile and _IO_funlockfile resp.
+
+	* locale/categories.def: Partly support for correct `era' handling
+	in LC_TIME category.
+	* locale/langinfo.h: Likewise.
+	* locale/programs/ld-time.c: Likewise.
+	* locale/localeinfo.h: Change comment a bit.
+
+	* malloc/memalign.c: Don't use goto, not necessary anymore.
+
+1996-09-18  Paul Eggert  <eggert@twinsun.com>
+
+	* time/mktime.c (ydhms_tm_diff):  Work correctly even if year
+	is negative, or if time_t is unsigned.
+	* time/strftime.c (tm_diff): Work correctly even if tm_year
+	is near INT_MIN.
+
+Tue Sep 17 16:14:34 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* sysdeps/m68k/fpu/__math.h (__inline_mathop): Changed to generate
+ 	all three versions of the math function.
+	(__inline_mathopf, __inline_mathopl): Removed.
+	(__inline_functions): New temporary definition containing all
+ 	non-trivial inline functions.
+
+Wed Sep 18 00:25:41 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* time/strftime.c (strftime): The T_FMT_AMPM string may be empty.
+
+Tue Sep 17 20:27:18 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* math/Makefile (extra-libs-others): Use $(extra-libs) instead
+	of $(extra-libc).
+
+Tue Sep 17 17:09:44 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* sysdeps/stub/fpu_control.h: Correct end of file comment.
+
+Tue Sep 17 05:39:18 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* stdio-common/bug3.c, stdio-common/bug4.c, stdio-common/bug5.c,
+	stdio-common/test-popen.c: Remove temporary files after test.
+	* stdio-common/bug5.c: Use `system' instead of `execlp'.
+	Patches by Andreas Jaeger.
+
+	* stdio-common/bug5.c: Create string for `system' argument to
+	make sure the input and output file names are really correct.
+
+Sun Sep 15 12:46:44 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* configure.in: If $os contains a hyphen add the part before the
+	hyphen to $ostry.
+
+Sun Sep 15 18:14:02 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* sysdeps/m68k/fpu/__math.h (__ieee754_pow, __ieee754_powf,
+	__ieee754_powl): Rename local variable i to __i.
+	(__ieee754_atan2, __ieee754_atan2f, __ieee754_atan2l): New inline
+	functions.
+	* sysdeps/m68k/fpu/e_atan2.c, sysdeps/m68k/fpu/e_atan2f.c,
+	sysdeps/m68k/fpu/e_atan2l.c: New files.
+
+1996-09-15  Paul Eggert  <eggert@twinsun.com>
+
+	* manual/time.texi: Change `range X to Y' to `range X through
+	Y', to avoid ambiguity in English.
+
+	(strftime): Numbers that do not have a range indicated are not padded.
+	Describe E and O modifiers.
+	%g, %G, %u: New formats.
+	%C, %y, %Y: Describe behavior on negative years.
+	%e: Fix typo (was labeled %d).
+	%l, %V: Fix typo in range.
+	%M, %S, %U, %w, %W: Give ranges.
+	%p: Clarify how noon and midnight are handled for AM and PM.
+	%s: Clarify leap second handling.
+	%r: Now locale-defined.
+	%C, %D, %e, %h, %n, %r, %t, %T: Say that they are POSIX.2 extensions.
+	%z: Say that it is a GNU extension.
+	%Z: Wording fix.
+
+	* time/strftime.c: (strftime):
+		%V: Fix mishandling of week numbers near year boundaries.
+		%g, %G: New formats (suggested by Arthur David Olson).
+		%U, %W: Use inline expression instead of `week' function.
+		%C, %y: Handle negative years portably.
+		%C, %Y: Use width 1, since values can be arbitrarily wide.
+		%r: Use T_FMT_AMPM format if _NL_CURRENT is defined.
+		%u: New Posix.2 format.
+		%w: Width is 1, not 2.
+	(iso_week_days): New function, for %V, %G, %g.
+	(week): Remove; it didn't handle %V correctly.
+	(__isleap): New macro.
+	(mbsinit): Use arg, to pacify GCC -Wall.
+
+1996-09-13  Paul Eggert  <eggert@twinsun.com>
+
+	* time/strftime.c (strftime):
+	If using the GNU C library, do not bother to check for
+	multibyte encodings, since they're safe in formats.  Otherwise:
+	  - Check for multibyte encodings when encountering any character that
+	  is not in the basic execution character set of the C Standard.
+	  - Use mbrlen (if available) instead of mblen, to avoid modifying
+	  mblen's internal state.
+	  - Do not assume that '%' cannot appear as the first character of a
+	  multibyte character sequence, since this is possible when not in the
+	  initial shift state.
+	(HAVE_MBRLEN, MULTIBYTE_IS_FORMAT_SAFE): Define if _LIBC is defined.
+	(DO_MULTIBYTE): New macro.
+	(<ctype.h>): Do not include.
+	(<wchar.h>): Include if HAVE_MBRLEN.
+	(mbstate_t, mbrlen, mbsinit): Define if ! HAVE_MBRLEN.
+	(mbstate_zero): New constant.
+
+1996-09-12  Paul Eggert  <eggert@twinsun.com>
+
+	* time/strftime.c (strftime):
+	Use an empty zone if it can't be determined; POSIX.2 requires this.
+	Use plain `int' for pad and modifier (which now contain char value).
+	Use plain `int' for number_value, to print negative values correctly.
+	Use plain `int' for digits; there was no need to make it unsigned.
+	Initialize subfmt consistently.
+	Remove incorrect code for %EC and %Ey; they aren't implemented yet.
+	For %O, if there is no alternate digit, output Ascii instead of "".
+	Output the `%' of an unknown format; this is most likely the right
+	thing to do if a multibyte string has been misparsed.
+
+Thu Sep 12 23:23:13 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* stdio-common/scanf7.c (main): Remove extra conversion from
+	printf format string.
+
+Thu Sep 12 23:01:16 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* stdlib/test-canon.c (tests): Rename structure member from errno
+	to error, all uses changed.
+
+Thu Sep 12 20:08:06 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* sysdeps/m68k/fpu/__math.h (__ldexp, __ldexpf, __ldexpl):
+	Removed.
+	* sysdeps/m68k/fpu/s_ldexp.c, sysdeps/m68k/fpu/s_ldexpf.c,
+	sysdeps/m68k/fpu/s_ldexpl.c: Removed, use generic implementation
+	instead.
+	* sysdeps/m68k/fpu/s_scalbn.c, sysdeps/m68k/fpu/s_scalbnf.c,
+	sysdeps/m68k/fpu/s_scalbnl.c: Replaced with old contents of
+	s_ldexp.c, s_ldexpf.c and s_ldexpl.c, resp., suitably adpted.
+
+	* sysdeps/m68k/fpu/__math.h (__frexp, __frexpf, __frexpl):
+	Return value must be in [0.5, 1), not [1, 2).  Reported by Chris
+	Lawrence.
+	(__ilogb, __ilogbf, __ilogbl): Check for argument being zero.
+	(__scalbn, __scalbnf, __scalbnl): Use second argument directly.
+
+Thu Sep 12 19:59:24 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* sysdeps/libm-ieee754/e_acoshl.c: Fix typos.
+	* sysdeps/libm-ieee754/s_cbrtl.c: Remove unused variable.
+
+Thu Sep 12 19:59:24 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* sysdeps/libm-ieee754/e_acoshl.c: Fix typos.
+	* sysdeps/libm-ieee754/s_cbrtl.c: Remove unused variable.
+
+Thu Sep 12 19:56:07 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* inet/herrno.c (__h_errno_location): Fix return type.
+
+Tue Sep 17 10:51:58 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>
+
+	* malloc/memalign.c (memalign): Only acquire __libc_malloc_lock
+	for actual modifications to global state.
+
+Fri Sep 13 01:21:36 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>
+
+	* sysdeps/mach/Makefile (includes): Add -I$(common-objpfx)mach/.
+	* sysdeps/mach/hurd/Makefile (includes): Add
+	-I$(common-objpfx)hurd/.  Reported by Marcus Daniels.
+
+	* sysdeps/generic/schedbits.h (struct sched_param): Renamed from
+	struct sched_params.
+	* sysdeps/stub/sched_setp.c (__sched_setparam): struct
+	sched_params -> struct sched_param.
+	* sysdeps/stub/sched_getp.c (__sched_getparam): Likewise.
+	* sysdeps/stub/sched_sets.c (__sched_setscheduler): Likewise.
+
+Thu Sep 12 23:58:25 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>
+
+	* sysdeps/mach/libc-lock.h (__libc_cleanup_region_start): Fix
+	syntax error.
+
+	* stdio-common/Makefile: Put lockfile in routines
+	unconditionally.
+	Define _MT_SAFE_IO if using for libio and compiling reentrant
+	libc.
+
+	* stdio-common/vfprintf.c (__flockfile, __funlockfile): Declare
+	this always, not just if _LIBC_REENTRANT.
+	(__funlockfile): Don't use weak_extern for this one;
+	__libc_cleanup_region_end might be defined and the use of
+	__funlockfile can't be protected the way the use of __flockfile
+	can be.
+
 Fri Sep 13 04:33:08 1996  Ulrich Drepper  <drepper@cygnus.com>
 
-	* sched.h: New file.  helper to access posix/sched.h.
+	* sched.h: New file.  Helper to access posix/sched.h.
 	* posix/sched.h: Change `sched_params' to `sched_param' to follow
 	POSIX.4.
 
@@ -76,6 +311,20 @@ Thu Sep 12 12:33:52 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>
 	macro.
 	(__libc_cleanup_region_end): New macro.
 
+Thu Sep 12 12:33:52 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>
+
+	* sysdeps/mach/hurd/dl-cache.c: Delete second copy of file
+	accidentally added on.
+
+	* sysdeps/stub/intr-msg.h: New file.
+
+	* stdio-common/vfprintf.c: Include <libc-lock.h>.
+	* stdio-common/vfscanf.c: Include <libc-lock.h>.
+
+	* sysdeps/mach/libc-lock.h (__libc_cleanup_region_start): New
+	macro.
+	(__libc_cleanup_region_end): New macro.
+
 Thu Sep 12 03:35:27 1996  Ulrich Drepper  <drepper@cygnus.com>
 
 	* sysdeps/unix/sysv/linux/i386/Dist: Remove init-first.h.
diff --git a/MakeTAGS b/MakeTAGS
index 336d63f483..a11ff9be48 100644
--- a/MakeTAGS
+++ b/MakeTAGS
@@ -166,9 +166,12 @@ $P/subdirs.pot: $(subdirs:%=$P/%.pot)
 include $(common-objpfx)version.mk
 
 # Combine all the messages into the final sorted template translation file.
+# The following code requires GNU date.
 $P/libc.pot: $(all-pot)
 	@rm -f $@.new
-	sed -e 's/VERSION/$(version)/' -e "s/DATE/`date +'%Y-%m-%d %k:%M'`/" \
+	disp='set `date -R`; echo $$6'; \
+	sed -e 's/VERSION/$(version)/' \
+	    -e "s/DATE/`date +'%Y-%m-%d %I:%M'$$disp/" \
 	    po/header.pot > $@.new
 	$(XGETTEXT) -d - --omit-header -n -s $^ >> $@.new
 	mv -f $@.new $@
diff --git a/Makeconfig b/Makeconfig
index 3134132fcc..8eb15d0c64 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -527,8 +527,8 @@ $(common-objpfx)soversions.mk: $(..)shlib-versions $(..)Makeconfig \
 			       $(wildcard $(patsubst %, $(..)%/shlib-versions,\
 							$(add-ons))) \
 			       $(common-objpfx)config.make
-	(file="$(..)shlib-versions \
-	       $(wildcard $(patsubst %,$(..)%/shlib-versions,$(add-ons)))"; \
+	(file="$(wildcard $(patsubst %,$(..)%/shlib-versions,$(add-ons))) \
+	       $(..)shlib-versions"; \
 	 for f in $$file; do \
 	 sed 's/#.*$$//' $$f | while read conf versions; do \
 	   test -n "$$versions" || continue; \
diff --git a/configure b/configure
index 58c71b1dfc..dcbdebcc52 100755
--- a/configure
+++ b/configure
@@ -2,7 +2,7 @@
 
 # From configure.in CVSid
 # Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.99 
+# Generated automatically using autoconf version 2.10 
 # 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.99"
+    echo "configure generated by autoconf version 2.10"
     exit 0 ;;
 
   -with-* | --with-*)
@@ -717,9 +717,9 @@ NONE)
 esac
 
 host=`$ac_config_sub $host_alias`
-host_cpu=`echo $host | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\1/'`
-host_vendor=`echo $host | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'`
-host_os=`echo $host | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'`
+host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
 echo "$ac_t""$host" 1>&6
 
 # We keep the original values in `$config_*' and never modify them, so we
@@ -799,6 +799,11 @@ o=`echo $tail | sed 's/[0-9]*$//'`
 if test $o != $tail; then
   ostry="$ostry /$o"
 fi
+# For linux-gnu, try linux-gnu, then linux.
+o=`echo $tail | sed 's/-.*$//'`
+if test $o != $tail; then
+  ostry="$ostry /$o"
+fi
 
 # For unix/sysv/sysv4, try unix/sysv/sysv4, then unix/sysv, then unix.
 base=
@@ -1085,9 +1090,9 @@ NONE)
 esac
 
 build=`$ac_config_sub $build_alias`
-build_cpu=`echo $build | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\1/'`
-build_vendor=`echo $build | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'`
-build_os=`echo $build | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'`
+build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
 echo "$ac_t""$build" 1>&6
 
 if test $host != $build; then
@@ -1170,13 +1175,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 1174 "configure"
+#line 1179 "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:1180: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1185: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -1185,13 +1190,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 1189 "configure"
+#line 1194 "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:1195: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1200: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -1333,7 +1338,7 @@ 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 1337 "configure"
+#line 1342 "configure"
 #include "confdefs.h"
 #define __need_size_t
 #define __need_wchar_t
@@ -1349,7 +1354,7 @@ size_t size; wchar_t wchar;
 if (&size == NULL || &wchar == NULL) abort ();
 ; return 0; }
 EOF
-if { (eval echo configure:1353: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1358: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   libc_cv_friendly_stddef=yes
 else
@@ -1456,7 +1461,7 @@ 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 1460 "configure"
+#line 1465 "configure"
 #include "confdefs.h"
 
 int main() { return 0; }
@@ -1466,7 +1471,7 @@ asm (".section .init");
 				    asm (".text");
 ; return 0; }
 EOF
-if { (eval echo configure:1470: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1475: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   libc_cv_have_initfini=yes
 else
@@ -1494,7 +1499,7 @@ 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 1498 "configure"
+#line 1503 "configure"
 #include "confdefs.h"
 asm ("_glibc_foobar:");
 int main() { return 0; }
@@ -1502,7 +1507,7 @@ int t() {
 glibc_foobar ();
 ; return 0; }
 EOF
-if { (eval echo configure:1506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:1511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   libc_cv_asm_underscores=yes
 else
@@ -1596,7 +1601,7 @@ __throw () {}
 EOF
 if { ac_try='${CC-cc} $CFLAGS
 			    -nostdlib -nostartfiles -Wl,--no-whole-archive
-			    -o conftest conftest.c'; { (eval echo configure:1600: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+			    -o conftest conftest.c'; { (eval echo configure:1605: \"$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
@@ -1617,7 +1622,7 @@ __throw () {}
 EOF
 if { ac_try='${CC-cc} $CFLAGS
 			    -nostdlib -nostartfiles -fno-exceptions
-			    -o conftest conftest.c'; { (eval echo configure:1621: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+			    -o conftest conftest.c'; { (eval echo configure:1626: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
   libc_cv_gcc_no_exceptions=yes
 else
   libc_cv_gcc_no_exceptions=no
@@ -1834,7 +1839,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.99"
+    echo "$CONFIG_STATUS generated by autoconf version 2.10"
     exit 0 ;;
   -help | --help | --hel | --he | --h)
     echo "\$ac_cs_usage"; exit 0 ;;
diff --git a/configure.in b/configure.in
index da1853bdf0..df0de5d648 100644
--- a/configure.in
+++ b/configure.in
@@ -167,6 +167,11 @@ o=`echo $tail | sed 's/[0-9]*$//'`
 if test $o != $tail; then
   ostry="$ostry /$o"
 fi
+# For linux-gnu, try linux-gnu, then linux.
+o=`echo $tail | sed 's/-.*$//'`
+if test $o != $tail; then
+  ostry="$ostry /$o"
+fi
 
 # For unix/sysv/sysv4, try unix/sysv/sysv4, then unix/sysv, then unix.
 base=
diff --git a/features.h b/features.h
index 47a4124502..83977e9c95 100644
--- a/features.h
+++ b/features.h
@@ -29,6 +29,8 @@ Cambridge, MA 02139, USA.  */
    _BSD_SOURCE		ANSI, POSIX, and 4.3BSD things.
    _SVID_SOURCE		ANSI, POSIX, and SVID things.
    _GNU_SOURCE		All of the above, plus GNU extensions.
+   _REENTRANT		Select additionally reentrant object.
+   _THREAD_SAFE		Same as _REENTRANT, often used by other systems.
 
    The `-ansi' switch to the GNU C compiler defines __STRICT_ANSI__.
    If none of these are defined, the default is all but _GNU_SOURCE.
@@ -137,7 +139,7 @@ Cambridge, MA 02139, USA.  */
 #define	__USE_GNU	1
 #endif
 
-#if defined (__USE_GNU) || defined (__USE_MISC)
+#if defined (_REENTRANT) || defined (_THREAD_SAFE)
 #define __USE_REENTRANT	1
 #endif
 
diff --git a/inet/herrno.c b/inet/herrno.c
index d20c96cb3c..ca92ec3b86 100644
--- a/inet/herrno.c
+++ b/inet/herrno.c
@@ -25,7 +25,7 @@ strong_alias (__h_errno, h_errno)
 
 /* When threaded, h_errno may be a per-process variable.  */
 #ifdef __USE_REENTRANT
-int
+int *
 weak_const_function
 __h_errno_location (void)
 {
diff --git a/libc-symbols.h b/libc-symbols.h
index c64d8826f7..370c631f20 100644
--- a/libc-symbols.h
+++ b/libc-symbols.h
@@ -48,6 +48,8 @@ Cambridge, MA 02139, USA.  */
 
 /* Enable declarations of GNU extensions, since we are compiling them.  */
 #define _GNU_SOURCE	1
+/* And we also need the data for the reentrant functions.  */
+#define _REENTRANT	1
 
 #include <config.h>
 /*
diff --git a/libio/iofgets.c b/libio/iofgets.c
index 369251f22a..4d4ce5c726 100644
--- a/libio/iofgets.c
+++ b/libio/iofgets.c
@@ -35,8 +35,8 @@ _IO_fgets (buf, n, fp)
   CHECK_FILE (fp, NULL);
   if (n <= 0)
     return NULL;
-  __libc_cleanup_region_start (&_IO_funlockfile, fp);
-  _IO_flockfile (fp);
+  __libc_cleanup_region_start (&__funlockfile, fp);
+  __flockfile (fp);
   count = _IO_getline (fp, buf, n - 1, '\n', 1);
   if (count == 0 || (fp->_IO_file_flags & _IO_ERR_SEEN))
     result = NULL;
diff --git a/locale/categories.def b/locale/categories.def
index 7c47fd4662..5e72319774 100644
--- a/locale/categories.def
+++ b/locale/categories.def
@@ -137,12 +137,15 @@ DEFINE_CATEGORY
   DEFINE_ELEMENT (D_FMT,       "d_fmt",       std, string)
   DEFINE_ELEMENT (T_FMT,       "t_fmt",       std, string)
   DEFINE_ELEMENT (T_FMT_AMPM,  "t_fmt_ampm",  std, string)
-  DEFINE_ELEMENT (ERA,         "era",         opt, string)
+  DEFINE_ELEMENT (ERA,         "era",         opt, stringarray,  0, 100)/*XXX*/
   DEFINE_ELEMENT (ERA_YEAR,    "era_year",    opt, string)
   DEFINE_ELEMENT (ERA_D_FMT,   "era_d_fmt",   opt, string)
   DEFINE_ELEMENT (ALT_DIGITS,  "alt_digits",  opt, stringarray,  0, 100)
   DEFINE_ELEMENT (ERA_D_T_FMT, "era_d_t_fmt", opt, string)
   DEFINE_ELEMENT (ERA_T_FMT,   "era_t_fmt",   opt, string)
+  DEFINE_ELEMENT (_NL_TIME_ERA_NUM_ENTRIES, "time-era-num-entries", opt, word)
+  DEFINE_ELEMENT (_NL_TIME_ERA_ENTRIES_EB, "time-era-entries-eb", opt, string)
+  DEFINE_ELEMENT (_NL_TIME_ERA_ENTRIES_EL, "time-era-entries-el", opt, string)
   ), NO_POSTLOAD, NULL, NULL, NULL)
 
 
diff --git a/locale/langinfo.h b/locale/langinfo.h
index 90aee3d745..82bd51024a 100644
--- a/locale/langinfo.h
+++ b/locale/langinfo.h
@@ -101,6 +101,10 @@ typedef enum
   ERA_D_T_FMT,			/* Date and time in alternate era format.  */
   ERA_T_FMT,			/* Time in alternate era format.  */
 
+  _NL_TIME_ERA_NUM_ENTRIES,	/* Number entries in the era arrays.  */
+  _NL_TIME_ERA_ENTRIES_EB,	/* Structure with era entries in usable form.*/
+  _NL_TIME_ERA_ENTRIES_EL,
+
   _NL_NUM_LC_TIME,		/* Number of indices in LC_TIME category.  */
 
   /* LC_COLLATE category: text sorting.
diff --git a/locale/localeinfo.h b/locale/localeinfo.h
index 7a035c8739..2b7c6faa84 100644
--- a/locale/localeinfo.h
+++ b/locale/localeinfo.h
@@ -64,7 +64,7 @@ enum coll_sort_rule
   sort_mask
 };
 
-/* We can map the types of the entries into four categories.  */
+/* We can map the types of the entries into a few categories.  */
 enum value_type
 {
   none,
diff --git a/locale/programs/ld-time.c b/locale/programs/ld-time.c
index 00f288f69b..75f6021109 100644
--- a/locale/programs/ld-time.c
+++ b/locale/programs/ld-time.c
@@ -34,6 +34,7 @@ Boston, MA 02111-1307, USA.  */
 
 
 void *xmalloc (size_t __n);
+void *xrealloc (void *__p, size_t __n);
 
 
 /* The real definition of the struct for the LC_TIME locale.  */
@@ -53,7 +54,8 @@ struct locale_time_t
   const char *d_fmt;
   const char *t_fmt;
   const char *t_fmt_ampm;
-  const char *era;
+  const char **era;
+  size_t era_num;
   const char *era_year;
   const char *era_d_t_fmt;
   const char *era_t_fmt;
@@ -115,6 +117,7 @@ time_output (struct localedef_t *locale, const char *output_path)
 {
   struct locale_time_t *time = locale->categories[LC_TIME].time;
   struct iovec iov[2 + _NL_ITEM_INDEX (_NL_NUM_LC_TIME)
+		  + (time->era_num > 0 ? time->era_num - 1 : 0)
 		  + time->cur_num_alt_digits];
   struct locale_file data;
   u_int32_t idx[_NL_ITEM_INDEX (_NL_NUM_LC_TIME)];
@@ -203,22 +206,27 @@ time_output (struct localedef_t *locale, const char *output_path)
   iov[2 + cnt].iov_base = (void *) (time->t_fmt_ampm ?: "");
   iov[2 + cnt].iov_len = strlen (iov[2 + cnt].iov_base) + 1;
   idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len;
-  ++cnt;
+  last_idx = ++cnt;
 
-  iov[2 + cnt].iov_base = (void *) (time->era ?: "");
-  iov[2 + cnt].iov_len = strlen (iov[2 + cnt].iov_base) + 1;
-  idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len;
-  ++cnt;
+  idx[1 + last_idx] = idx[last_idx];
+  for (num = 0; num < time->era_num; ++num, ++cnt)
+    {
+      iov[2 + cnt].iov_base = (void *) time->era[num];
+      iov[2 + cnt].iov_len = strlen (iov[2 + cnt].iov_base) + 1;
+    }
+  ++last_idx;
 
   iov[2 + cnt].iov_base = (void *) (time->era_year ?: "");
   iov[2 + cnt].iov_len = strlen (iov[2 + cnt].iov_base) + 1;
-  idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len;
+  idx[1 + last_idx] = idx[last_idx] + iov[2 + cnt].iov_len;
   ++cnt;
+  ++last_idx;
 
   iov[2 + cnt].iov_base = (void *) (time->era_d_fmt ?: "");
   iov[2 + cnt].iov_len = strlen (iov[2 + cnt].iov_base) + 1;
-  idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len;
-  last_idx = ++cnt;
+  idx[1 + last_idx] = idx[last_idx] + iov[2 + cnt].iov_len;
+  ++cnt;
+  ++last_idx;
 
   idx[1 + last_idx] = idx[last_idx];
   for (num = 0; num < time->cur_num_alt_digits; ++num, ++cnt)
@@ -267,8 +275,7 @@ too many values for field `%s' in category `LC_TIME'"),			      \
 	  time->cat[time->cur_num_##cat++] = "";			      \
 	}								      \
       else								      \
-	time->cat[time->cur_num_##cat++]				      \
-	  = code->val.str.start;					      \
+	time->cat[time->cur_num_##cat++] = code->val.str.start;		      \
       break
 
     STRARR_ELEM (abday, 7);
@@ -278,6 +285,18 @@ too many values for field `%s' in category `LC_TIME'"),			      \
     STRARR_ELEM (am_pm, 2);
     STRARR_ELEM (alt_digits, 100);
 
+    case tok_era:
+      if (code->val.str.start == NULL)
+	lr_error (lr, _("unknown character in field `%s' of category `%s'"),
+		  "era", "LC_TIME");
+      else
+	{
+	  ++time->era_num;
+	  time->era = xrealloc (time->era, time->era_num * sizeof (char *));
+	  time->era[time->era_num - 1] = code->val.str.start;
+	}
+      break;
+
 #define STR_ELEM(cat)							      \
     case tok_##cat:							      \
       if (time->cat != NULL)						      \
@@ -298,7 +317,6 @@ field `%s' in category `%s' declared more than once"),			      \
     STR_ELEM (d_fmt);
     STR_ELEM (t_fmt);
     STR_ELEM (t_fmt_ampm);
-    STR_ELEM (era);
     STR_ELEM (era_year);
     STR_ELEM (era_d_t_fmt);
     STR_ELEM (era_d_fmt);
diff --git a/manual/time.texi b/manual/time.texi
index 9da23fbfb3..18224a5520 100644
--- a/manual/time.texi
+++ b/manual/time.texi
@@ -465,33 +465,34 @@ contains at least the following members, which can appear in any order:
 @table @code
 @item int tm_sec
 This is the number of seconds after the minute, normally in the range
-@code{0} to @code{59}.  (The actual upper limit is @code{60}, to allow
+@code{0} through @code{59}.  (The actual upper limit is @code{60}, to allow
 for leap seconds if leap second support is available.)
 @cindex leap second
 
 @item int tm_min
-This is the number of minutes after the hour, in the range @code{0} to
+This is the number of minutes after the hour, in the range @code{0} through
 @code{59}.
 
 @item int tm_hour
-This is the number of hours past midnight, in the range @code{0} to
+This is the number of hours past midnight, in the range @code{0} through
 @code{23}.
 
 @item int tm_mday
-This is the day of the month, in the range @code{1} to @code{31}.
+This is the day of the month, in the range @code{1} through @code{31}.
 
 @item int tm_mon
-This is the number of months since January, in the range @code{0} to
+This is the number of months since January, in the range @code{0} through
 @code{11}.
 
 @item int tm_year
 This is the number of years since @code{1900}.
 
 @item int tm_wday
-This is the number of days since Sunday, in the range @code{0} to @code{6}.
+This is the number of days since Sunday, in the range @code{0} through
+@code{6}.
 
 @item int tm_yday
-This is the number of days since January 1, in the range @code{0} to
+This is the number of days since January 1, in the range @code{0} through
 @code{365}.
 
 @item int tm_isdst
@@ -617,6 +618,7 @@ does so.  @xref{Time Zone Functions}.
 
 @comment time.h
 @comment ANSI
+@comment POSIX.2
 @deftypefun size_t strftime (char *@var{s}, size_t @var{size}, const char *@var{template}, const struct tm *@var{brokentime})
 This function is similar to the @code{sprintf} function (@pxref{Formatted
 Input}), but the conversion specifications that can appear in the format
@@ -626,9 +628,9 @@ time conversion (@pxref{Locales}).
 
 Ordinary characters appearing in the @var{template} are copied to the
 output string @var{s}; this can include multibyte character sequences.
-Conversion specifiers are introduced by a @samp{%} character.  Now can
-follow an optional flag which can be one of the following.  These flags
-only affect the output of numbers:
+Conversion specifiers are introduced by a @samp{%} character, followed
+by an optional flag which can be one of the following.  These flags,
+which are GNU extensions, affect only the output of numbers:
 
 @table @code
 @item _
@@ -638,9 +640,31 @@ The number is padded with spaces.
 The number is not padded at all.
 @end table
 
-The default action is to pad the number with zeros.  Following to the
-flag comes the format specifier.  The whole @samp{%} sequence is
-replaced in the output string as follows:
+The default action is to pad the number with zeros to keep it a constant
+width.  Numbers that do not have a range indicated below are never
+padded, since there is no natural width for them.
+
+An optional modifier can follow the optional flag.  The modifiers, which
+are POSIX.2 extensions, are:
+
+@table @code
+@item E
+Use the locale's alternate representation for date and time.  This
+modifier applies to the @code{%c}, @code{%C}, @code{%x}, @code{%X},
+@code{%y} and @code{%Y} format specifiers.  In a Japanese locale, for
+example, @code{%Ex} might yield a date format based on the Japanese
+Emperors' reigns.
+
+@item O
+Use the locale's alternate numeric symbols for numbers.  This modifier
+applies only to numeric format specifiers.
+@end table
+
+A modifier is ignored if no alternate representation is available.
+
+The conversion specifier ends with a format specifier taken from the
+following list.  The whole @samp{%} sequence is replaced in the output
+string as follows:
 
 @table @code
 @item %a
@@ -659,19 +683,38 @@ The full month name according to the current locale.
 The preferred date and time representation for the current locale.
 
 @item %C
-The century of the year.
+The century of the year.  This is equivalent to the greatest integer not
+greater than the year divided by 100.
+
+This format is a POSIX.2 extension.
 
 @item %d
-The day of the month as a decimal number (range @code{01} to @code{31}).
+The day of the month as a decimal number (range @code{01} through @code{31}).
 
 @item %D
 The date using the format @code{%m/%d/%y}.
 
-This format is a GNU extension.
+This format is a POSIX.2 extension.
 
-@item %d
+@item %e
 The day of the month like with @code{%d}, but padded with blank (range
-@code{ 1} to @code{31}).
+@code{ 1} through @code{31}).
+
+This format is a POSIX.2 extension.
+
+@item %g
+The year corresponding to the ISO week number, but without the century
+(range @code{00} through @code{99}).  This has the same format and value
+as @code{%y}, except that if the ISO week number (see @code{%V}) belongs
+to the previous or next year, that year is used instead.
+
+This format is a GNU extension.
+
+@item %G
+The year corresponding to the ISO week number.  This has the same format
+and value as @code{%Y}, except that if the ISO week number (see
+@code{%V}) belongs to the previous or next year, that year is used
+instead.
 
 This format is a GNU extension.
 
@@ -679,50 +722,51 @@ This format is a GNU extension.
 The abbreviated month name according to the current locale.  The action
 is the same as for @code{%b}.
 
-This format is a GNU extension.
+This format is a POSIX.2 extension.
 
 @item %H
-The hour as a decimal number, using a 24-hour clock (range @code{00} to
+The hour as a decimal number, using a 24-hour clock (range @code{00} through
 @code{23}).
 
 @item %I
-The hour as a decimal number, using a 12-hour clock (range @code{01} to
+The hour as a decimal number, using a 12-hour clock (range @code{01} through
 @code{12}).
 
 @item %j
-The day of the year as a decimal number (range @code{001} to @code{366}).
+The day of the year as a decimal number (range @code{001} through @code{366}).
 
 @item %k
 The hour as a decimal number, using a 24-hour clock like @code{%H}, but
-padded with blank (range @code{ 0} to @code{23}).
+padded with blank (range @code{ 0} through @code{23}).
 
 This format is a GNU extension.
 
 @item %l
 The hour as a decimal number, using a 12-hour clock like @code{%I}, but
-padded with blank (range @code{ 0} to @code{12}).
+padded with blank (range @code{ 1} through @code{12}).
 
 This format is a GNU extension.
 
 @item %m
-The month as a decimal number (range @code{01} to @code{12}).
+The month as a decimal number (range @code{01} through @code{12}).
 
 @item %M
-The minute as a decimal number.
+The minute as a decimal number (range @code{00} through @code{59}).
 
 @item %n
 A single @samp{\n} (newline) character.
 
-This format is a GNU extension.
+This format is a POSIX.2 extension.
 
 @item %p
-Either @samp{am} or @samp{pm}, according to the given time value; or the
-corresponding strings for the current locale.
+Either @samp{AM} or @samp{PM}, according to the given time value; or the
+corresponding strings for the current locale.  Noon is treated as
+@samp{PM} and midnight as @samp{AM}.
 
 @item %r
-The time in decinal numbers using the format @code{%I:%M:%S %p}.
+The complete time using the AM/PM format of the current locale.
 
-This format is a GNU extension.
+This format is a POSIX.2 extension.
 
 @item %R
 The hour and minute in decimal numbers using the format @code{%H:%M}.
@@ -730,47 +774,58 @@ The hour and minute in decimal numbers using the format @code{%H:%M}.
 This format is a GNU extension.
 
 @item %s
-The seconds since the epoch, i.e., 1970-01-01 00:00:00 UTC.  Note
-that this value is the number of seconds between the epoch and the
-current date as defined by the @code{localtime} system call.
+The number of seconds since the epoch, i.e., since 1970-01-01 00:00:00 UTC.
+Leap seconds are not counted unless leap second support is available.
 
 This format is a GNU extension.
 
 @item %S
-The second as a decimal number.
+The second as a decimal number (range @code{00} through @code{60}).
 
 @item %t
 A single @samp{\t} (tabulator) character.
 
-This format is a GNU extension.
+This format is a POSIX.2 extension.
 
 @item %T
 The time using decimal numbers using the format @code{%H:%M:%S}.
 
-This format is a GNU extension.
+This format is a POSIX.2 extension.
+
+@item %u
+The day of the week as a decimal number (range @code{1} through
+@code{7}), Monday being @code{1}.
+
+This format is a POSIX.2 extension.
 
 @item %U
-The week number of the current year as a decimal number, starting with
-the first Sunday as the first day of the first week.  All days preceding
-the first Sunday in the year are considered to be in week @code{0}.
+The week number of the current year as a decimal number (range @code{00}
+through @code{53}), starting with the first Sunday as the first day of
+the first week.  Days preceding the first Sunday in the year are
+considered to be in week @code{00}.
 
 @item %V
-The @w{ISO 8601:1988} week number as a decimal number (range @code{00}
-to @code{53}).  ISO weeks start with Monday and end with Sunday.  Week
-01 of a year is the first week which has the majority of its days in
-that year; this is equivalent to the week containing the year's first
-Thursday, and it is also equivalent to the week containing January 4.
-Week 01 of a year can contain days from the previous year.  The week
-before week 01 of a year is the last week (52 or 53) of the previous
-year even if it contains days from the new year.
+The @w{ISO 8601:1988} week number as a decimal number (range @code{01}
+through @code{53}).  ISO weeks start with Monday and end with Sunday.
+Week @code{01} of a year is the first week which has the majority of its
+days in that year; this is equivalent to the week containing the year's
+first Thursday, and it is also equivalent to the week containing January
+4.  Week @code{01} of a year can contain days from the previous year.
+The week before week @code{01} of a year is the last week (@code{52} or
+@code{53}) of the previous year even if it contains days from the new
+year.
+
+This format is a POSIX.2 extension.
 
 @item %w
-The day of the week as a decimal number, Sunday being @code{0}.
+The day of the week as a decimal number (range @code{0} through
+@code{6}), Sunday being @code{0}.
 
 @item %W
-The week number of the current year as a decimal number, starting with
-the first Monday as the first day of the first week.  All days preceding
-the first Monday in the year are considered to be in week @code{0}.
+The week number of the current year as a decimal number (range @code{00}
+through @code{53}), starting with the first Monday as the first day of
+the first week.  All days preceding the first Monday in the year are
+considered to be in week @code{00}.
 
 @item %x
 The preferred date representation for the current locale, but without the
@@ -780,20 +835,22 @@ time.
 The preferred time representation for the current locale, but with no date.
 
 @item %y
-The year as a decimal number, but without a century (range @code{00} to
-@code{99}).
+The year without a century as a decimal number (range @code{00} through
+@code{99}).  This is equivalent to the year modulo 100.
 
 @item %Y
-The year as a decimal number, including the century.
+The year as a decimal number, using the Gregorian calendar.  Years
+before the year @code{1} are numbered @code{0}, @code{-1}, and so on.
 
 @item %z
 @w{RFC 822}/@w{ISO 8601:1988} style numeric time zone (e.g.,
 @code{-0600} or @code{+0100}), or nothing if no time zone is
 determinable.
 
+This format is a GNU extension.
+
 @item %Z
-The time zone or name or abbreviation (empty if the time zone can't be
-determined).
+The time zone abbreviation (empty if the time zone can't be determined).
 
 @item %%
 A literal @samp{%} character.
diff --git a/math/Makefile b/math/Makefile
index 2c76633fb4..c7bacd03f8 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -32,7 +32,7 @@ aux		:= fpu_control setfpucw
 # Build the -lm library.
 
 extra-libs	:= libm
-extra-libs-others = $(extra-libc)
+extra-libs-others = $(extra-libs)
 
 libm-support = k_standard s_lib_version s_matherr s_signgam
 libm-calls = e_acos e_acosh e_asin e_atan2 e_atanh e_cosh e_exp e_fmod	\
diff --git a/po/header.pot b/po/header.pot
index db749fb132..ea05c22466 100644
--- a/po/header.pot
+++ b/po/header.pot
@@ -1,4 +1,4 @@
-# GNU libc message catalog of translations
+# SOME DESCRIPTIVE TITLE.
 # Copyright (C) YEAR Free Software Foundation, Inc.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
diff --git a/po/nl.po b/po/nl.po
index 7b860bdd26..dade331dd8 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -4,9 +4,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: glibc 1.90\n"
-"POT-Creation-Date: 1996-05-29 14:03\n"
-"PO-Revision-Date: 1996-07-30 13:32 MET DST\n"
+"Project-Id-Version: libc 1.94\n"
+"POT-Creation-Date: 1996-09-08  3:45\n"
+"PO-Revision-Date: 1996-09-17 14:30 MET DST\n"
 "Last-Translator: Erick Branderhorst <branderh@debian.org>\n"
 "Language-Team: Dutch <nl@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -43,27 +43,31 @@ msgstr ""
 msgid "   program vers proto   port\n"
 msgstr ""
 
-#: time/zic.c:423
+#: time/zic.c:425
 #, c-format
 msgid " (rule from \"%s\", line %d)"
-msgstr " (rule uit \"%s\", regel %d)"
+msgstr " (voorwaarde uit \"%s\", regel %d)"
 
-#: time/zic.c:420
+#: locale/programs/ld-collate.c:360 locale/programs/ld-ctype.c:1233
+msgid " done\n"
+msgstr " klaar\n"
+
+#: time/zic.c:422
 #, c-format
 msgid "\"%s\", line %d: %s"
 msgstr "\"%s\", regel %d: %s"
 
-#: time/zic.c:908
+#: time/zic.c:946
 #, c-format
 msgid "\"Zone %s\" line and -l option are mutually exclusive"
 msgstr "\"Zone %s\" regel en -l optie gaan niet samen"
 
-#: time/zic.c:916
+#: time/zic.c:954
 #, c-format
 msgid "\"Zone %s\" line and -p option are mutually exclusive"
 msgstr "\"Zone %s\" regel en -p optie gaan niet samen"
 
-#: time/zic.c:721
+#: time/zic.c:759
 #, c-format
 msgid "%s in ruleless zone"
 msgstr "%s in regelloze zone"
@@ -88,96 +92,101 @@ msgstr "%s%sOnbekend signaal %d\n"
 msgid "%s, line %d: "
 msgstr "%s, regel %d: "
 
-#: time/zic.c:2035
+#: time/zic.c:2140
 #, c-format
 msgid "%s: %d did not sign extend correctly\n"
 msgstr "%s: %d heeft `extend' niet juist gesigneerd\n"
 
-#: time/zic.c:1339
+#: locale/programs/charmap.c:176
+#, c-format
+msgid "%s: <mb_cur_max> must be greater than <mb_cur_min>\n"
+msgstr "%s: <mb_cur_max> moet groter zijn dan <mb_cur_min>\n"
+
+#: time/zic.c:1431
 #, c-format
 msgid "%s: Can't create %s: %s\n"
 msgstr "%s: Kan %s niet aanmaken: %s\n"
 
-#: time/zic.c:2014
+#: time/zic.c:2119
 #, c-format
 msgid "%s: Can't create directory %s: %s\n"
 msgstr "%s: Kan directory %s niet aanmaken: %s\n"
 
-#: time/zic.c:600
+#: time/zic.c:613
 #, c-format
 msgid "%s: Can't link from %s to %s: %s\n"
 msgstr "%s: Kan niet verwijzing van %s naar %s: %s\n"
 
-#: time/zic.c:746
+#: time/zic.c:784
 #, c-format
 msgid "%s: Can't open %s: %s\n"
 msgstr "%s: Kan %s niet openen: %s\n"
 
-#: time/zic.c:814
+#: time/zic.c:852
 #, c-format
 msgid "%s: Error closing %s: %s\n"
 msgstr "%s: Fout bij sluiten %s: %s\n"
 
-#: time/zic.c:808
+#: time/zic.c:846
 #, c-format
 msgid "%s: Error reading %s\n"
 msgstr "%s: Fout bij lezen %s\n"
 
-#: time/zic.c:1404
+#: time/zic.c:1495
 #, c-format
 msgid "%s: Error writing %s\n"
 msgstr "%s: Fout bij schrijven %s\n"
 
-#: time/zdump.c:257
+#: time/zdump.c:258
 #, c-format
 msgid "%s: Error writing standard output "
 msgstr "%s: Fout bij schrijven standaarduitvoer "
 
-#: time/zic.c:793
+#: time/zic.c:831
 #, c-format
 msgid "%s: Leap line in non leap seconds file %s\n"
 msgstr "%s: Schrikkelregel in niet schrikkelseconde bestand %s (FIXME)\n"
 
-#: time/zic.c:360
+#: time/zic.c:362
 #, c-format
 msgid "%s: Memory exhausted: %s\n"
 msgstr "%s: Niet meer geheugen beschikbaar: %s\n"
 
-#: time/zic.c:515
+#: time/zic.c:528
 #, c-format
 msgid "%s: More than one -L option specified\n"
 msgstr "%s: Meer dan een -L optie gegeven\n"
 
-#: time/zic.c:475
+#: time/zic.c:488
 #, c-format
 msgid "%s: More than one -d option specified\n"
 msgstr "%s: Meer dan een -d optie gegeven\n"
 
-#: time/zic.c:485
+#: time/zic.c:498
 #, c-format
 msgid "%s: More than one -l option specified\n"
 msgstr "%s: Meer dan een -l optie gegeven\n"
 
-#: time/zic.c:495
+#: time/zic.c:508
 #, c-format
 msgid "%s: More than one -p option specified\n"
 msgstr "%s: Meer dan een -p optie gegeven\n"
 
-#: time/zic.c:505
+#: time/zic.c:518
 #, c-format
 msgid "%s: More than one -y option specified\n"
 msgstr "%s: Meer dan een -y optie gegeven\n"
 
-#: posix/getconf.c:149
-#, c-format
-msgid "%s: Unrecognized variable `%s'\n"
-msgstr "%s: Onbekende variabele `%s'\n"
-
-#: time/zic.c:1741
+#: time/zic.c:1846
 #, c-format
 msgid "%s: command was '%s', result was %d\n"
 msgstr "%s: commando was '%s', resultaat was %d\n"
 
+#: locale/programs/charmap.c:593 locale/programs/locfile.c:878
+#, c-format
+msgid "%s: error in state machine"
+msgstr "%s: fout in state machine"
+
 #: posix/getopt.c:686
 #, c-format
 msgid "%s: illegal option -- %c\n"
@@ -218,15 +227,20 @@ msgstr "%s: optie vereist een argument -- %c\n"
 msgid "%s: output would overwrite %s\n"
 msgstr "%s: uitvoer zal %s overschrijven\n"
 
-#: time/zic.c:800 zic.c:1212 zic.c:1232
+#: time/zic.c:838 time/zic.c:1249 time/zic.c:1269
 #, c-format
 msgid "%s: panic: Invalid l_value %d\n"
 msgstr "%s: paniek: Onjuiste `l_value' %d\n"
 
+#: locale/programs/charmap.c:600
+#, c-format
+msgid "%s: premature end of file"
+msgstr "%s: voorbarig einde van bestand"
+
 #: sunrpc/rpc_main.c:152
 #, c-format
 msgid "%s: unable to open "
-msgstr "%s: kan niet openen "
+msgstr "%s: niet in staat te openen "
 
 #: posix/getopt.c:660
 #, c-format
@@ -238,10 +252,11 @@ msgstr "%s: onbekende optie `%c%s'\n"
 msgid "%s: unrecognized option `--%s'\n"
 msgstr "%s: onbekende optie `--%s'\n"
 
-#: time/zic.c:432
+#: time/zic.c:447
 #, c-format
 msgid ""
-"%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d directory ]\n"
+"%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d "
+"directory ]\n"
 "\t[ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"
 msgstr ""
 "%s: gebruik is %s [ -s ] [ -v ] \n"
@@ -262,10 +277,14 @@ msgstr "(onbekende authenticatie (FIXME) fout - %d)"
 msgid "(unknown)"
 msgstr "(onbekend)"
 
-#: catgets/gencat.c:242
+#: catgets/gencat.c:244
 msgid "*standard input*"
 msgstr "*standaardinvoer*"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:766
+msgid ".lib section in a.out corrupted"
+msgstr ".lib deel in a.out corrupt"
+
 #: inet/rcmd.c:325
 msgid ".rhosts fstat failed"
 msgstr ".rhosts fstat faalde"
@@ -282,7 +301,7 @@ msgstr ".rhosts is geen gewoon bestand"
 msgid ".rhosts writeable by other than owner"
 msgstr ".rhosts overschrijfbaar door anderen dan de eigenaar"
 
-#: clnt_perr.c:133 sunrpc/clnt_perr.c:112
+#: sunrpc/clnt_perr.c:112 sunrpc/clnt_perr.c:133
 #, c-format
 msgid "; low version = %lu, high version = %lu"
 msgstr "; low versie = %lu, high versie = %lu (FIXME)"
@@ -291,41 +310,100 @@ msgstr "; low versie = %lu, high versie = %lu (FIXME)"
 msgid "; why = "
 msgstr "; waarom = "
 
+#: locale/programs/ld-ctype.c:325
+#, c-format
+msgid "<SP> character must not be in class `%s'"
+msgstr "<SP> karakter mag geen onderdeel zijn van klasse `%s'"
+
+#: locale/programs/ld-ctype.c:316
+#, c-format
+msgid "<SP> character not in class `%s'"
+msgstr "<SP> karakter geen onderdeel van klasse `%s'"
+
+#. TRANS The experienced user will know what is wrong.
+#. TRANS @c This error code is a joke.  Its perror text is part of the joke.
+#. TRANS @c Don't change it.
+#: stdio-common/../sysdeps/gnu/errlist.c:591
 msgid "?"
-msgstr "?"
+msgstr ""
 
+#: stdio-common/../sysdeps/gnu/errlist.c:762
+msgid "Accessing a corrupted shared library"
+msgstr "Benaderen van een corrupte gezamelijk bibliotheek"
+
+#. TRANS The requested socket address is already in use.  @xref{Socket Addresses}.
+#: stdio-common/../sysdeps/gnu/errlist.c:354
 msgid "Address already in use"
 msgstr "Address is al in gebruik"
 
-msgid "Address family not supported by protocol family"
-msgstr "Adres familie niet ondersteund door protocol familie"
+#. TRANS The address family specified for a socket is not supported; it is
+#. TRANS inconsistent with the protocol being used on the socket.  @xref{Sockets}.
+#: stdio-common/../sysdeps/gnu/errlist.c:349
+msgid "Address family not supported by protocol"
+msgstr "Adres familie niet ondersteund door protocol"
+
+#: stdio-common/../sysdeps/gnu/errlist.c:714
+msgid "Advertise error"
+msgstr "Advertise (FIXME) fout"
 
 msgid "Alarm clock"
 msgstr "Alarmklok"
 
+#. TRANS Argument list too long; used when the arguments passed to a new program
+#. TRANS being executed with one of the @code{exec} functions (@pxref{Executing a
+#. TRANS File}) occupy too much memory space.  This condition never arises in the
+#. TRANS GNU system.
+#: stdio-common/../sysdeps/gnu/errlist.c:57
 msgid "Argument list too long"
 msgstr "Argumentenlijst is te lang"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:770
+msgid "Attempting to link in too many shared libraries"
+msgstr "Probeer in te veel gezamelijke bibliotheken te linken"
+
 #: sunrpc/clnt_perr.c:276
 msgid "Authentication OK"
 msgstr "Authenticatie OK"
 
+#. TRANS ???
+#: stdio-common/../sysdeps/gnu/errlist.c:549
 msgid "Authentication error"
 msgstr "Authenticatie fout"
 
+#. TRANS Bad address; an invalid pointer was detected.
+#. TRANS In the GNU system, this error never happens; you get a signal instead.
+#: stdio-common/../sysdeps/gnu/errlist.c:102
 msgid "Bad address"
 msgstr "Onjuist adres"
 
+#. TRANS Bad file descriptor; for example, I/O on a descriptor that has been
+#. TRANS closed or reading from a descriptor open only for writing (or vice
+#. TRANS versa).
+#: stdio-common/../sysdeps/gnu/errlist.c:70
 msgid "Bad file descriptor"
 msgstr "Onjuiste bestandsbeschrijver"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:682
+msgid "Bad font file format"
+msgstr "Onjuist lettertype bestandsformaat"
+
+#. TRANS A file that isn't a block special file was given in a situation that
+#. TRANS requires one.  For example, trying to mount an ordinary file as a file
+#. TRANS system in Unix gives this error.
+#: stdio-common/../sysdeps/gnu/errlist.c:109
 msgid "Block device required"
 msgstr "Blokapparaat vereist"
 
-#: sunrpc/pmap_rmt.c:336
+#: sunrpc/pmap_rmt.c:335
 msgid "Broadcast select problem"
 msgstr "Broadcast selectie probleem (FIXME)"
 
+#. TRANS Broken pipe; there is no process reading from the other end of a pipe.
+#. TRANS Every library function that returns this error code also generates a
+#. TRANS @code{SIGPIPE} signal; this signal terminates the program if not handled
+#. TRANS or blocked.  Thus, your program will never actually see @code{EPIPE}
+#. TRANS unless it has handled or blocked @code{SIGPIPE}.
+#: stdio-common/../sysdeps/gnu/errlist.c:222
 msgid "Broken pipe"
 msgstr "Onderbroken pijp"
 
@@ -335,20 +413,32 @@ msgstr "Bus fout"
 msgid "CPU time limit exceeded"
 msgstr "CPU tijdlimiet overschreden"
 
-msgid "Can't assign requested address"
-msgstr "Kan gevraagde adres niet toewijzen"
-
-msgid "Can't send after socket shutdown"
-msgstr "Kan niet zenden na `socket shutdown'"
+#: stdio-common/../sysdeps/gnu/errlist.c:758
+msgid "Can not access a needed shared library"
+msgstr "Kan geen toegang verkrijgen tot benodigde gezamelijk bibliotheekbestand"
 
+#. TRANS No memory available.  The system cannot allocate more virtual memory
+#. TRANS because its capacity is full.
+#: stdio-common/../sysdeps/gnu/errlist.c:91
 msgid "Cannot allocate memory"
 msgstr "Kan geen geheugen aanspreken"
 
-#: sunrpc/pmap_rmt.c:254
+#. TRANS The requested socket address is not available; for example, you tried
+#. TRANS to give a socket a name that doesn't match the local host name.
+#. TRANS @xref{Socket Addresses}.
+#: stdio-common/../sysdeps/gnu/errlist.c:361
+msgid "Cannot assign requested address"
+msgstr "Kan gevraagde adres niet toewijzen"
+
+#: sunrpc/pmap_rmt.c:253
 msgid "Cannot create socket for broadcast rpc"
 msgstr "Kan geen `socket' maken voor `broadcast' rpc"
 
-#: sunrpc/pmap_rmt.c:348
+#: stdio-common/../sysdeps/gnu/errlist.c:774
+msgid "Cannot exec a shared library directly"
+msgstr "Kan geen gezamelijke bibliotheek rechtstreeks uitvoeren"
+
+#: sunrpc/pmap_rmt.c:347
 msgid "Cannot receive reply to broadcast"
 msgstr "Kan geen antwoord ontvangen om te zenden"
 
@@ -356,13 +446,22 @@ msgstr "Kan geen antwoord ontvangen om te zenden"
 msgid "Cannot register service"
 msgstr "Kan service niet registreren"
 
-#: sunrpc/pmap_rmt.c:312
+#. TRANS The socket has already been shut down.
+#: stdio-common/../sysdeps/gnu/errlist.c:422
+msgid "Cannot send after transport endpoint shutdown"
+msgstr "Kan niet zenden na transport eindpunt `shutdown'"
+
+#: sunrpc/pmap_rmt.c:311
 msgid "Cannot send broadcast packet"
 msgstr "Kan broadcast pakket niet verzenden"
 
-#: sunrpc/pmap_rmt.c:260
+#: sunrpc/pmap_rmt.c:259
 msgid "Cannot set socket option SO_BROADCAST"
-msgstr ""
+msgstr "Kan socket optie SO_BROADCAST niet instellen"
+
+#: stdio-common/../sysdeps/gnu/errlist.c:622
+msgid "Channel number out of range"
+msgstr "Kanaal nummer buiten domein"
 
 msgid "Child exited"
 msgstr "Kind is er mee opgehouden (FIXME)"
@@ -371,33 +470,80 @@ msgstr "Kind is er mee opgehouden (FIXME)"
 msgid "Client credential too weak"
 msgstr "Klant credential is te zwak (FIXME)"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:722
+msgid "Communication error on send"
+msgstr "Communicatie fout bij zenden"
+
+#. TRANS Go home and have a glass of warm, dairy-fresh milk.
+#: stdio-common/../sysdeps/gnu/errlist.c:601
 msgid "Computer bought the farm"
 msgstr "Computer heeft de boerderij gekocht"
 
+#: locale/programs/ld-ctype.c:1196
+msgid "Computing table size for character classes might take a while..."
+msgstr "Berekenen tabelgrootte voor karakterklassen kan even duren..."
+
+#: locale/programs/ld-collate.c:327
+msgid "Computing table size for collation information might take a while..."
+msgstr "Berekenen tabelgrootte voor collation informatie kan even duren..."
+
+#. TRANS A remote host refused to allow the network connection (typically because
+#. TRANS it is not running the requested service).
+#: stdio-common/../sysdeps/gnu/errlist.c:439
 msgid "Connection refused"
 msgstr "Connectie gewijgerd"
 
+#. TRANS A network connection was closed for reasons outside the control of the
+#. TRANS local host, such as by the remote machine rebooting or an unrecoverable
+#. TRANS protocol violation.
+#: stdio-common/../sysdeps/gnu/errlist.c:389
 msgid "Connection reset by peer"
 msgstr "Connectie reset door `peer'"
 
+#. TRANS A socket operation with a specified timeout received no response during
+#. TRANS the timeout period.
+#: stdio-common/../sysdeps/gnu/errlist.c:433
 msgid "Connection timed out"
 msgstr "Connectie timed out"
 
 msgid "Continued"
 msgstr "Gecontinueerd"
 
+#. TRANS No default destination address was set for the socket.  You get this
+#. TRANS error when you try to transmit data over a connectionless socket,
+#. TRANS without first specifying a destination for the data with @code{connect}.
+#: stdio-common/../sysdeps/gnu/errlist.c:417
 msgid "Destination address required"
 msgstr "Bestemmingsadres vereist"
 
-msgid "Device busy"
-msgstr "Apparaat bezig"
+#: stdio-common/../sysdeps/gnu/errlist.c:686
+msgid "Device not a stream"
+msgstr "Apparaat is geen `stream'"
 
+#. TRANS No such device or address.  The system tried to use the device
+#. TRANS represented by a file you specified, and it couldn't find the device.
+#. TRANS This can mean that the device file was installed incorrectly, or that
+#. TRANS the physical device is missing or not correctly attached to the
+#. TRANS computer.
+#: stdio-common/../sysdeps/gnu/errlist.c:49
 msgid "Device not configured"
 msgstr "Apparaat niet geconfigureerd"
 
+#. TRANS Resource busy; a system resource that can't be shared is already in use.
+#. TRANS For example, if you try to delete a file that is the root of a currently
+#. TRANS mounted filesystem, you get this error.
+#: stdio-common/../sysdeps/gnu/errlist.c:116
+msgid "Device or resource busy"
+msgstr "Apparaat of resource bezig"
+
+#. TRANS Directory not empty, where an empty directory was expected.  Typically,
+#. TRANS this error occurs when you are trying to delete a directory.
+#: stdio-common/../sysdeps/gnu/errlist.c:468
 msgid "Directory not empty"
 msgstr "Directory niet leeg"
 
+#. TRANS The user's disk quota was exceeded.
+#: stdio-common/../sysdeps/gnu/errlist.c:486
 msgid "Disc quota exceeded"
 msgstr "Schijf quota overschreden"
 
@@ -410,41 +556,81 @@ msgstr "Fout %d"
 msgid "Error in unknown error system: "
 msgstr "Fout in onbekende fout systeem (FIXME): "
 
+#: inet/ruserpass.c:156
+msgid "Error: .netrc file is readable by others."
+msgstr "Fout: .netrc bestand is leesbaar voor anderen."
+
+#: stdio-common/../sysdeps/gnu/errlist.c:662
+msgid "Exchange full"
+msgstr "Uitwisseling vol"
+
+#. TRANS Invalid executable file format.  This condition is detected by the
+#. TRANS @code{exec} functions; see @ref{Executing a File}.
+#: stdio-common/../sysdeps/gnu/errlist.c:63
 msgid "Exec format error"
 msgstr "Exec formaat fout"
 
+#: locale/programs/localedef.c:207
+msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'"
+msgstr "FATAAL: systeem heeft `_POSIX2_LOCALEDEF' niet gedefinieerd"
+
 #: sunrpc/clnt_perr.c:290
 msgid "Failed (unspecified error)"
 msgstr "Gefaald (onbekende fout)"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:750
+msgid "File descriptor in bad state"
+msgstr "Bestandsbeschrijver in slechte staat"
+
+#. TRANS File exists; an existing file was specified in a context where it only
+#. TRANS makes sense to specify a new file.
+#: stdio-common/../sysdeps/gnu/errlist.c:122
 msgid "File exists"
 msgstr "Bestand bestaat"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:678
+msgid "File locking deadlock error"
+msgstr "Bestandsafscherming deadlock fout"
+
+#. TRANS Filename too long (longer than @code{PATH_MAX}; @pxref{Limits for
+#. TRANS Files}) or host name too long (in @code{gethostname} or
+#. TRANS @code{sethostname}; @pxref{Host Identification}).
+#: stdio-common/../sysdeps/gnu/errlist.c:452
 msgid "File name too long"
 msgstr "Bestandsnaam te lang"
 
 msgid "File size limit exceeded"
 msgstr "Bestandsgrootte limiet overschreden"
 
+#. TRANS File too big; the size of a file would be larger than allowed by the system.
+#: stdio-common/../sysdeps/gnu/errlist.c:190
 msgid "File too large"
 msgstr "Bestand te groot"
 
 msgid "Floating point exception"
 msgstr "Drijvende punt exceptie"
 
+#. TRANS Function not implemented.  Some functions have commands or options defined
+#. TRANS that might not be supported in all implementations, and this is the kind
+#. TRANS of error you get if you request them and they are not supported.
+#: stdio-common/../sysdeps/gnu/errlist.c:561
 msgid "Function not implemented"
 msgstr "Functie niet geimplementeerd"
 
+#. TRANS This error code has no purpose.
+#: stdio-common/../sysdeps/gnu/errlist.c:606
 msgid "Gratuitous error"
 msgstr "Gratuitous (FIXME) fout"
 
 msgid "Hangup"
 msgstr "Ophangen"
 
+#. TRANS The remote host for a requested network connection is down.
+#: stdio-common/../sysdeps/gnu/errlist.c:457
 msgid "Host is down"
 msgstr "`Host' is `down'"
 
-#: resolv/herror.c:74
+#: resolv/herror.c:75
 msgid "Host name lookup failure"
 msgstr "Host naam opzoek fout (FIXME)"
 
@@ -454,30 +640,69 @@ msgstr "I/O mogelijk"
 msgid "IOT trap"
 msgstr "IOT trap (FIXME)"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:618
+msgid "Identifier removed"
+msgstr "Identifier verwijderd"
+
 msgid "Illegal Instruction"
 msgstr "Verkeerde instructie"
 
+#. TRANS Invalid seek operation (such as on a pipe).
+#: stdio-common/../sysdeps/gnu/errlist.c:201
 msgid "Illegal seek"
 msgstr "Verkeerd zoeken"
 
+#. TRANS Inappropriate file type or format.  The file was the wrong type for the
+#. TRANS operation, or a data file had the wrong format.
+#. TRANS
+#. TRANS On some systems @code{chmod} returns this error if you try to set the
+#. TRANS sticky bit on a non-directory file; @pxref{Setting Permissions}.
+#: stdio-common/../sysdeps/gnu/errlist.c:544
 msgid "Inappropriate file type or format"
 msgstr "Ongeschikt bestandstype of bestandsformaat"
 
+#. TRANS Inappropriate I/O control operation, such as trying to set terminal
+#. TRANS modes on an ordinary file.
+#: stdio-common/../sysdeps/gnu/errlist.c:176
 msgid "Inappropriate ioctl for device"
 msgstr "Ongeschikte `ioctl' voor apparaat"
 
+#. TRANS In the GNU system, servers supporting the @code{term} protocol return
+#. TRANS this error for certain operations when the caller is not in the
+#. TRANS foreground process group of the terminal.  Users do not usually see this
+#. TRANS error because functions such as @code{read} and @code{write} translate
+#. TRANS it into a @code{SIGTTIN} or @code{SIGTTOU} signal.  @xref{Job Control},
+#. TRANS for information on process groups and these signals.
+#: stdio-common/../sysdeps/gnu/errlist.c:577
 msgid "Inappropriate operation for background process"
 msgstr "Ongeschikte operatie voor achtergrond proces"
 
+#. TRANS Input/output error; usually used for physical read or write errors.
+#: stdio-common/../sysdeps/gnu/errlist.c:40
 msgid "Input/output error"
 msgstr "Invoer/uitvoer fout"
 
 msgid "Interrupt"
 msgstr "Interrupt"
 
+#. TRANS Interrupted function call; an asynchronous signal occured and prevented
+#. TRANS completion of the call.  When this happens, you should try the call
+#. TRANS again.
+#. TRANS
+#. TRANS You can choose to have functions resume after a signal that is handled,
+#. TRANS rather than failing with @code{EINTR}; see @ref{Interrupted
+#. TRANS Primitives}.
+#: stdio-common/../sysdeps/gnu/errlist.c:35
 msgid "Interrupted system call"
 msgstr "Onderbroken systeemaanroep (FIXME)"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:610
+msgid "Interrupted system call should be restarted"
+msgstr "Onderbroken systeemaanroep moet opnieuw gestart worden"
+
+#. TRANS Invalid argument.  This is used to indicate various kinds of problems
+#. TRANS with passing the wrong argument to a library function.
+#: stdio-common/../sysdeps/gnu/errlist.c:152
 msgid "Invalid argument"
 msgstr "Onjuist argument"
 
@@ -505,9 +730,23 @@ msgstr "Ongeldig collatie karakter (FIXME)"
 msgid "Invalid content of \\{\\}"
 msgstr "Ongeldige inhoud van \\{\\}"
 
+#. TRANS An attempt to make an improper link across file systems was detected.
+#. TRANS This happens not only when you use @code{link} (@pxref{Hard Links}) but
+#. TRANS also when you rename a file with @code{rename} (@pxref{Renaming Files}).
+#: stdio-common/../sysdeps/gnu/errlist.c:129
 msgid "Invalid cross-device link"
 msgstr "Ongeldige cross-device verwijzing"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:654
+msgid "Invalid exchange"
+msgstr "Onjuiste uitwisseling"
+
+#. TRANS While decoding a multibyte character the function came along an invalid
+#. TRANS or an incomplete sequence of bytes or the given wide character is invalid.
+#: stdio-common/../sysdeps/gnu/errlist.c:567
+msgid "Invalid or incomplete multibyte or wide character"
+msgstr "Ongeldig of incompleet multibyte of wide karakter"
+
 #: posix/regex.c:953
 msgid "Invalid preceding regular expression"
 msgstr "Ongeldige voorafgaande reguliere expressie"
@@ -520,45 +759,141 @@ msgstr "Onjuist bereik einde"
 msgid "Invalid regular expression"
 msgstr "Onjuiste reguliere expressie"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:670
+msgid "Invalid request code"
+msgstr "Ongeldige vraag code"
+
+#: stdio-common/../sysdeps/gnu/errlist.c:658
+msgid "Invalid request descriptor"
+msgstr "Onjuiste vraag beschrijver"
+
 #: sunrpc/clnt_perr.c:288
 msgid "Invalid server verifier"
 msgstr "Onjuiste `server' verifier (FIXME)"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:674
+msgid "Invalid slot"
+msgstr "Onjuist slot"
+
+#. TRANS File is a directory; you cannot open a directory for writing,
+#. TRANS or create or remove hard links to it.
+#: stdio-common/../sysdeps/gnu/errlist.c:146
 msgid "Is a directory"
 msgstr "Is een directory"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:794
+msgid "Is a named type file"
+msgstr "Is een benoemd bestandstype"
+
 msgid "Killed"
 msgstr "Gedood"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:650
+msgid "Level 2 halted"
+msgstr "Nivo 2 gestopt"
+
+#: stdio-common/../sysdeps/gnu/errlist.c:626
+msgid "Level 2 not synchronized"
+msgstr "Nivo 2 niet gesyncrhoniseerd"
+
+#: stdio-common/../sysdeps/gnu/errlist.c:630
+msgid "Level 3 halted"
+msgstr "Nivo 3 gestopt"
+
+#: stdio-common/../sysdeps/gnu/errlist.c:634
+msgid "Level 3 reset"
+msgstr "Nivo 3 reset"
+
+#: stdio-common/../sysdeps/gnu/errlist.c:710
+msgid "Link has been severed"
+msgstr ""
+
+#: stdio-common/../sysdeps/gnu/errlist.c:638
+msgid "Link number out of range"
+msgstr "Verwijzingsnummer buiten bereik"
+
+#: stdio-common/../sysdeps/gnu/errlist.c:702
+msgid "Machine is not on the network"
+msgstr "Machine is niet aangesloten op het netwerk"
+
 #: posix/regex.c:952
 msgid "Memory exhausted"
 msgstr "Geheugen opgebruikt"
 
+#. TRANS The size of a message sent on a socket was larger than the supported
+#. TRANS maximum size.
+#: stdio-common/../sysdeps/gnu/errlist.c:305
 msgid "Message too long"
 msgstr "Melding te lang"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:730
+msgid "Multihop attempted"
+msgstr "Multihop geprobeerd"
+
+#: stdio-common/../sysdeps/gnu/errlist.c:746
+msgid "Name not unique on network"
+msgstr "Naam is niet uniek op netwerk"
+
+#. TRANS ???
+#: stdio-common/../sysdeps/gnu/errlist.c:554
 msgid "Need authenticator"
 msgstr "Heb een authenticator nodig"
 
+#. TRANS A network connection was reset because the remote host crashed.
+#: stdio-common/../sysdeps/gnu/errlist.c:377
 msgid "Network dropped connection on reset"
 msgstr "Netwerk heeft verbinding verbroken bij reset"
 
+#. TRANS A socket operation failed because the network was down.
+#: stdio-common/../sysdeps/gnu/errlist.c:366
 msgid "Network is down"
 msgstr "Netwerk is `down'"
 
+#. TRANS A socket operation failed because the subnet containing the remote host
+#. TRANS was unreachable.
+#: stdio-common/../sysdeps/gnu/errlist.c:372
 msgid "Network is unreachable"
 msgstr "Netwerk is onbereikbaar"
 
-#: resolv/herror.c:76
+#: stdio-common/../sysdeps/gnu/errlist.c:646
+msgid "No CSI structure available"
+msgstr "Geen CSI structuur beschikbaar"
+
+#: stdio-common/../sysdeps/gnu/errlist.c:790
+msgid "No XENIX semaphores available"
+msgstr "Geen XENIX semaphoren beschikbaar"
+
+#: resolv/herror.c:77
 msgid "No address associated with name"
 msgstr "Geen adres geassocieerd met naam"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:666
+msgid "No anode"
+msgstr "Geen anode"
+
+#. TRANS The kernel's buffers for I/O operations are all in use.  In GNU, this
+#. TRANS error is always synonymous with @code{ENOMEM}; you may get one or the
+#. TRANS other from network operations.
+#: stdio-common/../sysdeps/gnu/errlist.c:396
 msgid "No buffer space available"
 msgstr "Geen bufferruimte beschikbaar"
 
+#. TRANS There are no child processes.  This error happens on operations that are
+#. TRANS supposed to manipulate child processes, when there aren't any processes
+#. TRANS to manipulate.
+#: stdio-common/../sysdeps/gnu/errlist.c:77
 msgid "No child processes"
 msgstr "Geen kindprocessen (FIXME)"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:690
+msgid "No data available"
+msgstr "Geen data beschikbaar"
+
+#. TRANS No locks available.  This is used by the file locking facilities; see
+#. TRANS @ref{File Locks}.  This error is never generated by the GNU system, but
+#. TRANS it can result from an operation to an NFS server running another
+#. TRANS operating system.
+#: stdio-common/../sysdeps/gnu/errlist.c:535
 msgid "No locks available"
 msgstr "Geen sloten beschikbaar"
 
@@ -566,7 +901,11 @@ msgstr "Geen sloten beschikbaar"
 msgid "No match"
 msgstr "Geen overeenkomst"
 
-#: posix/regex.c:5200
+#: stdio-common/../sysdeps/gnu/errlist.c:614
+msgid "No message of desired type"
+msgstr "Geen melding van gewenst type"
+
+#: posix/regex.c:5202
 msgid "No previous regular expression"
 msgstr "Geen vorige reguliere expressie"
 
@@ -574,46 +913,125 @@ msgstr "Geen vorige reguliere expressie"
 msgid "No remote programs registered.\n"
 msgstr "Geen `op-afstand' programmas geregistreerd.\n"
 
+#. TRANS The remote host for a requested network connection is not reachable.
+#: stdio-common/../sysdeps/gnu/errlist.c:462
 msgid "No route to host"
 msgstr "Geen route naar `host'"
 
+#. TRANS No space left on device; write operation on a file failed because the
+#. TRANS disk is full.
+#: stdio-common/../sysdeps/gnu/errlist.c:196
 msgid "No space left on device"
 msgstr "Geen ruimte meer op apparaat"
 
+#. TRANS No such file or directory.  This is a ``file doesn't exist'' error
+#. TRANS for ordinary files that are referenced in contexts where they are
+#. TRANS expected to already exist.
+#: stdio-common/../sysdeps/gnu/errlist.c:19
 msgid "No such file or directory"
 msgstr "Onbekend bestand of directory"
 
+#. TRANS No process matches the specified process ID.
+#: stdio-common/../sysdeps/gnu/errlist.c:24
 msgid "No such process"
 msgstr "Onbekend proces"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:786
+msgid "Not a XENIX named type file"
+msgstr "Geen XENIX benoemd type bestand"
+
+#: stdio-common/../sysdeps/gnu/errlist.c:738
+msgid "Not a data message"
+msgstr "Geen data melding"
+
+#. TRANS A file that isn't a directory was specified when a directory is required.
+#: stdio-common/../sysdeps/gnu/errlist.c:140
 msgid "Not a directory"
 msgstr "Niet een directory"
 
+#. TRANS Domain error; used by mathematical functions when an argument value does
+#. TRANS not fall into the domain over which the function is defined.
+#: stdio-common/../sysdeps/gnu/errlist.c:228
 msgid "Numerical argument out of domain"
 msgstr "Numeriek argument is buiten domein"
 
+#. TRANS Range error; used by mathematical functions when the result value is
+#. TRANS not representable because of overflow or underflow.
+#: stdio-common/../sysdeps/gnu/errlist.c:234
 msgid "Numerical result out of range"
 msgstr "Numeriek resultaat is buiten domein"
 
-#: time/zic.c:1835
+#. TRANS An attempt was made to NFS-mount a remote file system with a file name that
+#. TRANS already specifies an NFS-mounted file.
+#. TRANS (This is an error on some operating systems, but we expect it to work
+#. TRANS properly on the GNU system, making this error code impossible.)
+#: stdio-common/../sysdeps/gnu/errlist.c:502
+msgid "Object is remote"
+msgstr ""
+
+#: time/zic.c:1940
 msgid "Odd number of quotation marks"
 msgstr "Oneven aantal quotes"
 
+#. TRANS An operation is already in progress on an object that has non-blocking
+#. TRANS mode selected.
+#: stdio-common/../sysdeps/gnu/errlist.c:294
 msgid "Operation already in progress"
 msgstr "Operatie al in voorbereiding"
 
+#. TRANS Operation not permitted; only the owner of the file (or other resource)
+#. TRANS or processes with special privileges can perform the operation.
+#: stdio-common/../sysdeps/gnu/errlist.c:12
 msgid "Operation not permitted"
 msgstr "Ingreep niet toegestaan (FIXME)"
 
+#. TRANS The operation you requested is not supported.  Some socket functions
+#. TRANS don't make sense for all types of sockets, and others may not be
+#. TRANS implemented for all communications protocols.  In the GNU system, this
+#. TRANS error can happen for many calls when the object does not support the
+#. TRANS particular operation; it is a generic indication that the server knows
+#. TRANS nothing to do for that call.
+#: stdio-common/../sysdeps/gnu/errlist.c:338
 msgid "Operation not supported"
 msgstr "Ingreep niet ondersteund"
 
+#. TRANS The wrong type of device was given to a function that expects a
+#. TRANS particular sort of device.
+#: stdio-common/../sysdeps/gnu/errlist.c:135
 msgid "Operation not supported by device"
 msgstr "Ingreep niet ondersteund door apparaat"
 
+#. TRANS An operation that cannot complete immediately was initiated on an object
+#. TRANS that has non-blocking mode selected.  Some functions that must always
+#. TRANS block (such as @code{connect}; @pxref{Connecting}) never return
+#. TRANS @code{EAGAIN}.  Instead, they return @code{EINPROGRESS} to indicate that
+#. TRANS the operation has begun and will take some time.  Attempts to manipulate
+#. TRANS the object before the call completes return @code{EALREADY}.  You can
+#. TRANS use the @code{select} function to find out when the pending operation
+#. TRANS has completed; @pxref{Waiting for I/O}.
+#: stdio-common/../sysdeps/gnu/errlist.c:288
 msgid "Operation now in progress"
 msgstr "Ingreep in voorbereiding"
 
+#. TRANS In the GNU C library, this is another name for @code{EAGAIN} (above).
+#. TRANS The values are always the same, on every operating system.
+#. TRANS
+#. TRANS C libraries in many older Unix systems have @code{EWOULDBLOCK} as a
+#. TRANS separate error code.
+#: stdio-common/../sysdeps/gnu/errlist.c:276
+msgid "Operation would block"
+msgstr "Operatie zou blokeren"
+
+#: stdio-common/../sysdeps/gnu/errlist.c:698
+msgid "Out of streams resources"
+msgstr "Geen streams resources meer"
+
+#: stdio-common/../sysdeps/gnu/errlist.c:706
+msgid "Package not installed"
+msgstr "Pakket niet geïnstalleerd"
+
+#. TRANS Permission denied; the file permissions do not allow the attempted operation.
+#: stdio-common/../sysdeps/gnu/errlist.c:96
 msgid "Permission denied"
 msgstr "Toegang geweigerd"
 
@@ -627,33 +1045,66 @@ msgstr "Prematuur einde van reguliere expressie"
 msgid "Profiling timer expired"
 msgstr "Profiling timer verlopen (FIMXE)"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:642
+msgid "Protocol driver not attached"
+msgstr "Protocol driver niet aangesloten"
+
+#: stdio-common/../sysdeps/gnu/errlist.c:726
+msgid "Protocol error"
+msgstr "Protocol fout"
+
+#. TRANS The socket communications protocol family you requested is not supported.
+#: stdio-common/../sysdeps/gnu/errlist.c:343
 msgid "Protocol family not supported"
 msgstr "Protocol familie niet ondersteund"
 
+#. TRANS You specified a socket option that doesn't make sense for the
+#. TRANS particular protocol being used by the socket.  @xref{Socket Options}.
+#: stdio-common/../sysdeps/gnu/errlist.c:316
 msgid "Protocol not available"
 msgstr "Protocol niet beschikbaar"
 
+#. TRANS The socket domain does not support the requested communications protocol
+#. TRANS (perhaps because the requested protocol is completely invalid.)
+#. TRANS @xref{Creating a Socket}.
+#: stdio-common/../sysdeps/gnu/errlist.c:323
 msgid "Protocol not supported"
 msgstr "Protocol niet ondersteund"
 
+#. TRANS The socket type does not support the requested communications protocol.
+#: stdio-common/../sysdeps/gnu/errlist.c:310
 msgid "Protocol wrong type for socket"
 msgstr "Protocol verkeerd type voor socket (FIXME)"
 
 msgid "Quit"
 msgstr "Stop"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:734
+msgid "RFS specific error"
+msgstr "RFS specifieke fout"
+
+#. TRANS ???
+#: stdio-common/../sysdeps/gnu/errlist.c:527
 msgid "RPC bad procedure for program"
 msgstr "RPC verkeerde procedure voor programa"
 
+#. TRANS ???
+#: stdio-common/../sysdeps/gnu/errlist.c:517
 msgid "RPC program not available"
 msgstr "RPC programa niet beschikbaar"
 
+#. TRANS ???
+#: stdio-common/../sysdeps/gnu/errlist.c:522
 msgid "RPC program version wrong"
 msgstr "RPC programa versie onjuist"
 
+#. TRANS ???
+#: stdio-common/../sysdeps/gnu/errlist.c:507
 msgid "RPC struct is bad"
 msgstr "RPC structuur is onjuist"
 
+#. TRANS ???
+#: stdio-common/../sysdeps/gnu/errlist.c:512
 msgid "RPC version wrong"
 msgstr "RPC versie onjuist"
 
@@ -733,6 +1184,8 @@ msgstr "RPC: Onbekende host"
 msgid "RPC: Unknown protocol"
 msgstr "RPC: Onbekend protocol"
 
+#. TRANS An attempt was made to modify something on a read-only file system.
+#: stdio-common/../sysdeps/gnu/errlist.c:206
 msgid "Read-only file system"
 msgstr "Read-only bestandssysteem (FIXME)"
 
@@ -740,71 +1193,64 @@ msgstr "Read-only bestandssysteem (FIXME)"
 msgid "Regular expression too big"
 msgstr "Reguliere expressie te groot"
 
-msgid "Reserved error 82"
-msgstr "Gereserveerde fout 82"
-
-msgid "Reserved error 83"
-msgstr "Gereserveerde fout 83"
-
-msgid "Reserved error 84"
-msgstr "Gereserveerde fout 84"
-
-msgid "Reserved error 85"
-msgstr "Gereserveerde fout 85"
-
-msgid "Reserved error 86"
-msgstr "Gereserveerde fout 86"
-
-msgid "Reserved error 87"
-msgstr "Gereserveerde fout 87"
-
-msgid "Reserved error 88"
-msgstr "Gereserveerde fout 88"
-
-msgid "Reserved error 89"
-msgstr "Gereserveerde fout 89"
-
-msgid "Reserved error 90"
-msgstr "Gereserveerde fout 90"
-
-msgid "Reserved error 91"
-msgstr "Gereserveerde fout 91"
-
-msgid "Reserved error 92"
-msgstr "Gereserveerde fout 92"
-
-msgid "Reserved error 93"
-msgstr "Gereserveerde fout 93"
-
-msgid "Reserved error 94"
-msgstr "Gereserveerde fout 94"
-
-msgid "Reserved error 95"
-msgstr "Gereserveerde fout 95"
+#: stdio-common/../sysdeps/gnu/errlist.c:798
+msgid "Remote I/O error"
+msgstr "Remote I/O fout"
 
-msgid "Reserved error 96"
-msgstr "Gereserveerde fout 96"
+#: stdio-common/../sysdeps/gnu/errlist.c:754
+msgid "Remote address changed"
+msgstr "Op-afstand adres gewijzigd"
 
-msgid "Reserved error 97"
-msgstr "Gereserveerde fout 97"
+#: inet/ruserpass.c:157
+msgid "Remove password or make file unreadable by others."
+msgstr "Verwijder wachtwoord of maak bestand onleesbaar voor anderen."
 
-msgid "Reserved error 98"
-msgstr "Gereserveerde fout 98"
-
-msgid "Reserved error 99"
-msgstr "Gereserveerde fout 99"
-
-#: resolv/herror.c:72
+#: resolv/herror.c:73
 msgid "Resolver Error 0 (no error)"
 msgstr "Resolver Fout 0 (geen fout)"
 
-#: resolv/herror.c:114
+#: resolv/herror.c:115
 msgid "Resolver internal error"
 msgstr "Resolver interne fout"
 
+#. TRANS Deadlock avoided; allocating a system resource would have resulted in a
+#. TRANS deadlock situation.  The system does not guarantee that it will notice
+#. TRANS all such situations.  This error means you got lucky and the system
+#. TRANS noticed; it might just hang.  @xref{File Locks}, for an example.
+#: stdio-common/../sysdeps/gnu/errlist.c:85
 msgid "Resource deadlock avoided"
 msgstr "Resource dood lock vermeden (FIXME)"
 
+#. TRANS Resource temporarily unavailable; the call might work if you try again
+#. TRANS later.  The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN};
+#. TRANS they are always the same in the GNU C library.
+#. TRANS
+#. TRANS This error can happen in a few different situations:
+#. TRANS
+#. TRANS @itemize @bullet
+#. TRANS @item
+#. TRANS An operation that would block was attempted on an object that has
+#. TRANS non-blocking mode selected.  Trying the same operation again will block
+#. TRANS until some external condition makes it possible to read, write, or
+#. TRANS connect (whatever the operation).  You can use @code{select} to find out
+#. TRANS when the operation will be possible; @pxref{Waiting for I/O}.
+#. TRANS
+#. TRANS @strong{Portability Note:} In older Unix many systems, this condition
+#. TRANS was indicated by @code{EWOULDBLOCK}, which was a distinct error code
+#. TRANS different from @code{EAGAIN}.  To make your program portable, you should
+#. TRANS check for both codes and treat them the same.
+#. TRANS
+#. TRANS @item
+#. TRANS A temporary resource shortage made an operation impossible.  @code{fork}
+#. TRANS can return this error.  It indicates that the shortage is expected to
+#. TRANS pass, so your program can try the call again later and it may succeed.
+#. TRANS It is probably a good idea to delay for a few seconds before trying it
+#. TRANS again, to allow time for other processes to release scarce resources.
+#. TRANS Such shortages are usually fairly serious and affect the whole system,
+#. TRANS so usually an interactive program should report the error to the user
+#. TRANS and return to its command loop.
+#. TRANS @end itemize
+#: stdio-common/../sysdeps/gnu/errlist.c:267
 msgid "Resource temporarily unavailable"
 msgstr "Resource tijdelijk niet beschikbaar"
 
@@ -819,21 +1265,30 @@ msgstr "Server rejected credential (FIXME)"
 msgid "Server rejected verifier"
 msgstr "Server rejected verifier (FIXME)"
 
-msgid "Socket is already connected"
-msgstr "Socket heeft al verbinding"
-
-msgid "Socket is not connected"
-msgstr "Socket heeft geen verbinding"
-
+#. TRANS A file that isn't a socket was specified when a socket is required.
+#: stdio-common/../sysdeps/gnu/errlist.c:299
 msgid "Socket operation on non-socket"
 msgstr "Socket operatie op niet-socket"
 
+#. TRANS The socket type is not supported.
+#: stdio-common/../sysdeps/gnu/errlist.c:328
 msgid "Socket type not supported"
 msgstr "Socket type niet ondersteund"
 
+#. TRANS A network connection was aborted locally.
+#: stdio-common/../sysdeps/gnu/errlist.c:382
 msgid "Software caused connection abort"
 msgstr "Software veroorzaakte afbreken verbinding"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:718
+msgid "Srmount error"
+msgstr "Srmount fout"
+
+#. TRANS Stale NFS file handle.  This indicates an internal confusion in the NFS
+#. TRANS system which is due to file system rearrangements on the server host.
+#. TRANS Repairing this condition usually requires unmounting and remounting
+#. TRANS the NFS file system on the local host.
+#: stdio-common/../sysdeps/gnu/errlist.c:494
 msgid "Stale NFS file handle"
 msgstr "Stale NFS file handle (FIMXE)"
 
@@ -849,37 +1304,80 @@ msgstr "Gestopt (tty invoer)"
 msgid "Stopped (tty output)"
 msgstr "Gestopt (tty uitvoer)"
 
-#: posix/regex.c:940
+#: stdio-common/../sysdeps/gnu/errlist.c:778
+msgid "Streams pipe error"
+msgstr ""
+
+#: stdio-common/../sysdeps/gnu/errlist.c:782
+msgid "Structure needs cleaning"
+msgstr "Struktuur heeft schoonmaak nodig"
+
+#: posix/regex.c:940 stdio-common/../sysdeps/gnu/errlist.c:7
 msgid "Success"
 msgstr "Succes"
 
 msgid "Terminated"
 msgstr "Getermineerd"
 
+#. TRANS An attempt to execute a file that is currently open for writing, or
+#. TRANS write to a file that is currently being executed.  Often using a
+#. TRANS debugger to run a program is considered having it open for writing and
+#. TRANS will cause this error.  (The name stands for ``text file busy''.)  This
+#. TRANS is not an error in the GNU system; the text is copied as necessary.
+#: stdio-common/../sysdeps/gnu/errlist.c:185
 msgid "Text file busy"
 msgstr "Tekstbestand in gebruik"
 
-msgid "Too many levels of remote in path"
-msgstr "Te veel nivo's van `remote' in path"
+#: stdio-common/../sysdeps/gnu/errlist.c:694
+msgid "Timer expired"
+msgstr "Timer afgelopen"
 
+#. TRANS Too many levels of symbolic links were encountered in looking up a file name.
+#. TRANS This often indicates a cycle of symbolic links.
+#: stdio-common/../sysdeps/gnu/errlist.c:445
 msgid "Too many levels of symbolic links"
 msgstr "Te veel nivo's van symbolische verwijzingen"
 
+#. TRANS Too many links; the link count of a single file would become too large.
+#. TRANS @code{rename} can cause this error if the file being renamed already has
+#. TRANS as many links as it can take (@pxref{Renaming Files}).
+#: stdio-common/../sysdeps/gnu/errlist.c:213
 msgid "Too many links"
 msgstr "Te veel verwijzingen"
 
+#. TRANS The current process has too many files open and can't open any more.
+#. TRANS Duplicate descriptors do count toward this limit.
+#. TRANS
+#. TRANS In BSD and GNU, the number of open files is controlled by a resource
+#. TRANS limit that can usually be increased.  If you get this error, you might
+#. TRANS want to increase the @code{RLIMIT_NOFILE} limit or make it unlimited;
+#. TRANS @pxref{Limits on Resources}.
+#: stdio-common/../sysdeps/gnu/errlist.c:163
 msgid "Too many open files"
 msgstr "Te veel open bestanden"
 
+#. TRANS There are too many distinct file openings in the entire system.  Note
+#. TRANS that any number of linked channels count as just one file opening; see
+#. TRANS @ref{Linked Channels}.  This error never occurs in the GNU system.
+#: stdio-common/../sysdeps/gnu/errlist.c:170
 msgid "Too many open files in system"
 msgstr "Te veel geopende bestanden op systeem"
 
+#. TRANS This means that the per-user limit on new process would be exceeded by
+#. TRANS an attempted @code{fork}.  @xref{Limits on Resources}, for details on
+#. TRANS the @code{RLIMIT_NPROC} limit.
+#: stdio-common/../sysdeps/gnu/errlist.c:475
 msgid "Too many processes"
 msgstr "Te veel processen"
 
-msgid "Too many references: can't splice"
-msgstr "Te veel referenties: kan niet splice (FIXME)"
+#. TRANS ???
+#: stdio-common/../sysdeps/gnu/errlist.c:427
+msgid "Too many references: cannot splice"
+msgstr "Te veel referenties: kan splice niet doen"
 
+#. TRANS The file quota system is confused because there are too many users.
+#. TRANS @c This can probably happen in a GNU system when using NFS.
+#: stdio-common/../sysdeps/gnu/errlist.c:481
 msgid "Too many users"
 msgstr "Te veel gebruikers"
 
@@ -890,10 +1388,29 @@ msgstr "Trace/breakpoint trap (FIXME)"
 msgid "Trailing backslash"
 msgstr "Trailing backslash (FIXME)"
 
+#. TRANS In the GNU system, opening a file returns this error when the file is
+#. TRANS translated by a program and the translator program dies while starting
+#. TRANS up, before it has connected to the file.
+#: stdio-common/../sysdeps/gnu/errlist.c:584
 msgid "Translator died"
 msgstr "Vertaler overleden (da's jammer)"
 
-#: catgets/gencat.c:201
+#. TRANS You tried to connect a socket that is already connected.
+#. TRANS @xref{Connecting}.
+#: stdio-common/../sysdeps/gnu/errlist.c:402
+msgid "Transport endpoint is already connected"
+msgstr "Er is al verbinding met het transport eindpunt"
+
+#. TRANS The socket is not connected to anything.  You get this error when you
+#. TRANS try to transmit data over a socket, without first specifying a
+#. TRANS destination for the data.  For a connectionless socket (for datagram
+#. TRANS protocols, such as UDP), you get @code{EDESTADDRREQ} instead.
+#: stdio-common/../sysdeps/gnu/errlist.c:410
+msgid "Transport endpoint is not connected"
+msgstr "Er is geen verbinding met het transport eindpunt"
+
+#: catgets/gencat.c:202 db/makedb.c:197 locale/programs/locale.c:234
+#: locale/programs/localedef.c:383
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Probeer `%s --help' voor meer informatie.\n"
@@ -903,19 +1420,25 @@ msgstr "Probeer `%s --help' voor meer informatie.\n"
 msgid "Trying %s...\n"
 msgstr "Probeer %s...\n"
 
-#: ../sysdeps/mach/_strerror.c:58 string/../sysdeps/generic/_strerror.c:36
+#: inet/ruserpass.c:241
+#, c-format
+msgid "Unknown .netrc keyword %s"
+msgstr "Onbekend .netrc sleutelwoord %s"
+
+#: string/../sysdeps/generic/_strerror.c:36
+#: string/../sysdeps/mach/_strerror.c:58
 msgid "Unknown error "
 msgstr "Onbekende fout "
 
-#: resolv/herror.c:73
+#: resolv/herror.c:74
 msgid "Unknown host"
 msgstr "Onbekende host"
 
-#: resolv/herror.c:117
+#: resolv/herror.c:118
 msgid "Unknown resolver error"
 msgstr "Onbekende resolver fout (FIXME)"
 
-#: resolv/herror.c:75
+#: resolv/herror.c:76
 msgid "Unknown server error"
 msgstr "Onbekende server fout (FIXME)"
 
@@ -944,10 +1467,15 @@ msgstr "Niet corresponderende [ of [^"
 msgid "Unmatched \\{"
 msgstr "Niet corresponderende \\{"
 
+#: posix/getconf.c:184
+#, c-format
+msgid "Unrecognized variable `%s'"
+msgstr "Onbekende variabele `%s'"
+
 msgid "Urgent I/O condition"
 msgstr "Dringende I/O conditie"
 
-#: catgets/gencat.c:204
+#: catgets/gencat.c:205
 #, c-format
 msgid ""
 "Usage: %s [OPTION]... -o OUTPUT-FILE [INPUT-FILE]...\n"
@@ -960,6 +1488,7 @@ msgid ""
 "  -V, --version       output version information and exit\n"
 "If INPUT-FILE is -, input is read from standard input.  If OUTPUT-FILE\n"
 "is -, output is written to standard output.\n"
+"Report bugs to <bug-glibc@prep.ai.mit.edu>.\n"
 msgstr ""
 "Gebruik: %s [OPTIE]... -o UITVOER-BESTAND [INVOER-BESTAND]...\n"
 "         %s [OPTIE]... [UITVOER-BESTAND [INVOER-BESTAND]...]\n"
@@ -969,17 +1498,108 @@ msgstr ""
 "      --new           gebruik niet een bestaande catalog, maak een nieuwe\n"
 "  -o, --output=NAAM   schrijf uitvoer naar bestand NAAM\n"
 "  -V, --version       toon versie-informatie en be\\353indig programma\n"
-"Als INVOER-BESTAND is -, lees invoer uit standardinvoer.  Als UITVOER-BESTAND\n"
+"Als INVOER-BESTAND is -, lees invoer uit standardinvoer.  Als "
+"UITVOER-BESTAND\n"
 "is -, schrijf uitvoer naar standaarduitvoer.\n"
 
-#: posix/getconf.c:81
+#: db/makedb.c:200
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... INPUT-FILE OUTPUT-FILE\n"
+"       %s [OPTION]... -o OUTPUT-FILE INPUT-FILE\n"
+"       %s [OPTION]... -u INPUT-FILE\n"
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"  -f, --fold-case     convert key to lower case\n"
+"  -h, --help          display this help and exit\n"
+"  -o, --output=NAME   write output to file NAME\n"
+"      --quiet         don't print messages while building database\n"
+"  -u, --undo          print content of database file, one entry a line\n"
+"  -V, --version       output version information and exit\n"
+"If INPUT-FILE is -, input is read from standard input.\n"
+"Report bugs to <bug-glibc@prep.ai.mit.edu>.\n"
+msgstr ""
+"Gebruik: %s [OPTIE]... INVOER-BESTAND UITVOER-BESTAND\n"
+"         %s [OPTIE]... -o UITVOER-BESTAND [INVOER-BESTAND]\n"
+"         %s [OPTIE]... -u INVOER-BESTAND\n"
+"Verplichte argument bij lange opties zijn ook verplicht bij korte opties.\n"
+"  -f, --fold-case     converteer sleutel naar kleine letters\n"
+"  -h, --help          toon hulp-tekst en beëindig programma\n"
+"  -o, --output=NAAM   schrijf uitvoer naar bestand NAAM\n"
+"      --quiet         toon geen meldingen bij aanmaken database\n"
+"  -V, --version       toon versie-informatie en beëindig programma\n"
+"Als INVOER-BESTAND is -, lees invoer uit standardinvoer.\n"
+"Meld fouten via <bug-glibc@prep.ai.mit.edu>.\n"
+
+#: locale/programs/localedef.c:386
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... name\n"
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"  -c, --force               create output even if warning messages were "
+"issued\n"
+"  -h, --help                display this help and exit\n"
+"  -f, --charmap=FILE        symbolic character names defined in FILE\n"
+"  -i, --inputfile=FILE      source definitions are found in FILE\n"
+"  -u, --code-set-name=NAME  specify code set for mapping ISO 10646 elements\n"
+"  -v, --verbose             print more messages\n"
+"  -V, --version             output version information and exit\n"
+"      --posix               be strictly POSIX conform\n"
+"\n"
+"System's directory for character maps: %s\n"
+"                       locale files  : %s\n"
+"Report bugs to <bug-glibc@prep.ai.mit.edu>.\n"
+msgstr ""
+"Aanroep: %s [OPTIE]... naam\n"
+"Verplichte argumenten bij lange opties zijn ook verplicht bij korte opties.\n"
+"  -c, --force               maak uitvoer zelfs als waarschuwing werden gegeven\n"
+"  -h, --help                toon hulptekst en beëindig programma\n"
+"  -f, --charmap=BESTAND     symbolische karakternamen gedefinieerd in BESTAND\n"
+"  -i, --inputfile=BESTAND   bron definities zijn gevonden in BESTAND\n"
+"  -u, --code-set-name=NAAM  specificeer codeset voor mappen ISO 10646 elementen\n"
+"  -v, --verbose             toon meer meldigen\n"
+"  -V, --version             toon versie-informatie en beëindig programma\n"
+"      --posix               volg de POSIX afspraken\n"
+"\n"
+"Directory van systeem voor karaktermappen: %s\n"
+"                         locale bestanden: %s\n"
+"Meld fouten aan <bug-glibc@prep.ai.mit.edu>.\n"
+
+#: locale/programs/locale.c:237
+#, c-format
+msgid ""
+"Usage: %s [OPTION]... name\n"
+"Mandatory arguments to long options are mandatory for short options too.\n"
+"  -h, --help            display this help and exit\n"
+"  -V, --version         output version information and exit\n"
+"\n"
+"  -a, --all-locales     write names of available locales\n"
+"  -m, --charmaps        write names of available charmaps\n"
+"\n"
+"  -c, --category-name   write names of selected categories\n"
+"  -k, --keyword-name    write names of selected keywords\n"
+"Report bugs to <bug-glibc@prep.ai.mit.edu>.\n"
+msgstr ""
+"Aanroep: %s [OPTIE]... naam\n"
+"Verplichte argumenten bij lange opties zijn ook verplicht bij korte opties.\n"
+"  -h, --help           toon hulptekst en beëindig programma\n"
+"  -V, --version        toon versie-informatie en beëindig programma\n"
+"\n"
+"  -a, --all-locales     toon namen van beschikbare localen\n"
+"  -m, --charmaps        toon namen van beschikbare karaktermappen\n"
+"\n"
+"  -c, --category-name   toon namen van geselecteerde categorien\n"
+"  -k, --keyword-name    toon namen van geselecteerde sleutelwoorden\n"
+"Meld fouten aan <bug-glibc@prep.ai.mit.edu>.\n"
+
+#: posix/getconf.c:131
 #, c-format
 msgid "Usage: %s variable_name [pathname]\n"
 msgstr "Gebruik: %s variabele_naam [padnaam]\n"
 
 #: sunrpc/rpcinfo.c:609
 msgid "Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n"
-msgstr "Gebruik: rpcinfo [ -n portnummer ] -u host prognummer [ versienummer ]\n"
+msgstr ""
+"Gebruik: rpcinfo [ -n portnummer ] -u host prognummer [ versienummer ]\n"
 
 msgid "User defined signal 1"
 msgstr "Gebruiker gedefinieerd signaal 1"
@@ -987,22 +1607,62 @@ msgstr "Gebruiker gedefinieerd signaal 1"
 msgid "User defined signal 2"
 msgstr "Gebruiker gedefinieerd signaal 2"
 
+#: stdio-common/../sysdeps/gnu/errlist.c:742
+msgid "Value too large for defined data type"
+msgstr "Waarde te groot voor gedefinieerd data type"
+
 msgid "Virtual timer expired"
 msgstr "Virtuele timer afgelopen (FIXME)"
 
-#: time/zic.c:1740
+#: time/zic.c:1845
 msgid "Wild result from command execution"
 msgstr "Wild resultaat afkomstig uit commando uitvoer"
 
 msgid "Window changed"
 msgstr "Venster veranderd"
 
+#. TRANS You did @strong{what}?
+#: stdio-common/../sysdeps/gnu/errlist.c:596
 msgid "You really blew it this time"
 msgstr "Deze keer heb je het echt goed verknalt"
 
-#: time/zic.c:1013
+#: time/zic.c:1051
 msgid "Zone continuation line end time is not after end time of previous line"
-msgstr "Zone continuatie regel einde tijd is niet an einde tijd van voorgaande regel"
+msgstr ""
+"Zone continuatie regel einde tijd is niet an einde tijd van voorgaande regel"
+
+#: locale/programs/charmap.c:397 locale/programs/locfile.c:341
+#, c-format
+msgid "`%1$s' definition does not end with `END %1$s'"
+msgstr "`%1$s' definitie eindigt niet met `END %1$s'"
+
+#: locale/programs/ld-monetary.c:358 locale/programs/ld-numeric.c:190
+#, c-format
+msgid "`-1' must be last entry in `%s' field in `%s' category"
+msgstr "`-1' moet de laatste ingang zijn `%s' veld in `%s' categorie"
+
+#: locale/programs/ld-collate.c:1651
+msgid "`...' must only be used in `...' and `UNDEFINED' entries"
+msgstr "`...' mag alleen gebruikt worden `...' en `UNDEFINED' ingangen"
+
+#: locale/programs/locfile.c:538
+msgid "`from' expected after first argument to `collating-element'"
+msgstr "verwacht `from' na eerste argument (??)to `collating-element'"
+
+#: locale/programs/ld-collate.c:1108
+msgid ""
+"`from' string in collation element declaration contains unknown character"
+msgstr ""
+
+#: locale/programs/charmap.c:267
+#, c-format
+msgid "argument to <%s> must be a single character"
+msgstr "argument van <%s> moet één karakter zijn"
+
+#: locale/programs/locfile.c:215
+#, c-format
+msgid "argument to `%s' must be a single character"
+msgstr "argument van `%s' moet één karakter zijn"
 
 #: sunrpc/rpc_parse.c:326
 msgid "array declaration expected"
@@ -1016,19 +1676,23 @@ msgstr ""
 msgid "bad .rhosts owner"
 msgstr "onjuiste .rhosts eigenaar"
 
-#: time/zic.c:1136
+#: locale/programs/charmap.c:212 locale/programs/locfile.c:209
+msgid "bad argument"
+msgstr "onjuist argument"
+
+#: time/zic.c:1173
 msgid "blank FROM field on Link line"
 msgstr "leeg FROM veld op `Link' regel"
 
-#: time/zic.c:1140
+#: time/zic.c:1177
 msgid "blank TO field on Link line"
 msgstr "leeg TO veld op `Link' regel"
 
-#: malloc/mcheck.c:174
+#: malloc/mcheck.c:189
 msgid "block freed twice"
 msgstr "blok is twee keer vrijgegeven"
 
-#: malloc/mcheck.c:177
+#: malloc/mcheck.c:192
 msgid "bogus mcheck_status, library is buggy"
 msgstr "bogus mcheck_status, bibliotheek is maar zozo"
 
@@ -1044,25 +1708,149 @@ msgstr ""
 msgid "cache_set: victim not found"
 msgstr "cache_set: slachtoffer niet gevonden"
 
+#: time/zic.c:1686
+msgid "can't determine time zone abbrevation to use just after until time"
+msgstr "kan afkorting tijdzone (te gebruiken na tijdsaanduiding) niet achterhalen"
+
 #: sunrpc/svc_simple.c:64
 #, c-format
 msgid "can't reassign procedure number %d\n"
 msgstr "kan procedure nummer %d niet opnieuw toewijzen\n"
 
-#: catgets/gencat.c:248
+#: locale/programs/localedef.c:281
+#, c-format
+msgid "cannot `stat' locale file `%s'"
+msgstr "kan niet `stat' locale bestand `%s'"
+
+#: locale/programs/ld-collate.c:1313
+#, c-format
+msgid "cannot insert collation element `%.*s'"
+msgstr "kan collation element `%.*s' niet invoegen"
+
+#: locale/programs/ld-collate.c:1492 locale/programs/ld-collate.c:1497
+msgid "cannot insert into result table"
+msgstr "kan niet invoegen in resultaat tabel"
+
+#: locale/programs/ld-collate.c:1165 locale/programs/ld-collate.c:1207
+#, c-format
+msgid "cannot insert new collating symbol definition: %s"
+msgstr ""
+
+#: db/makedb.c:149
+#, c-format
+msgid "cannot open database file `%s': %s"
+msgstr "kan database bestand `%s' niet openen: %s"
+
+#: catgets/gencat.c:250 db/makedb.c:168
 #, c-format
 msgid "cannot open input file `%s'"
 msgstr "kan invoerbestand `%s' niet openen"
 
-#: catgets/gencat.c:753 gencat.c:794
+#: locale/programs/localedef.c:215
+#, c-format
+msgid "cannot open locale definition file `%s'"
+msgstr "kan locale definitie bestand `%s' niet openen"
+
+#: catgets/gencat.c:755 catgets/gencat.c:796 db/makedb.c:177
 #, c-format
 msgid "cannot open output file `%s'"
 msgstr "kan uitvoerbestand `%s' niet openen"
 
+#: locale/programs/locfile.c:986
+#, c-format
+msgid "cannot open output file `%s' for category `%s'"
+msgstr "kan uitvoerbestand `%s' niet openen voor categorie `%s'"
+
+#: locale/programs/ld-collate.c:1359
+msgid "cannot process order specification"
+msgstr ""
+
+#: locale/programs/locale.c:293
+#, c-format
+msgid "cannot read character map directory `%s'"
+msgstr "kan karakter map directory `%s' niet lezen"
+
+#: locale/programs/locale.c:268
+#, c-format
+msgid "cannot read locale directory `%s'"
+msgstr "kan locale directory `%s' niet lezen"
+
+#: locale/programs/localedef.c:303
+#, c-format
+msgid "cannot read locale file `%s'"
+msgstr "kan locale bestand `%s' niet lezen"
+
+#: locale/programs/localedef.c:328
+#, c-format
+msgid "cannot write output files to `%s'"
+msgstr "kan uitvoer niet schrijven naar `%s'"
+
+#: locale/programs/localedef.c:371
+msgid "category data requested more than once: should not happen"
+msgstr "categorie data meer dan eens gevraagd: zou niet mogen gebeuren"
+
+#: locale/programs/ld-ctype.c:264
+#, c-format
+msgid "character %s'%s' in class `%s' must be in class `%s'"
+msgstr "karakter %s'%s' in klasse `%s' hoort in klasse `%s'"
+
+#: locale/programs/ld-ctype.c:288
+#, c-format
+msgid "character %s'%s' in class `%s' must not be in class `%s'"
+msgstr "karakter %s'%s' in klasse `%s' hoort niet in klasse `%s'"
+
+#: locale/programs/ld-ctype.c:309
+msgid "character <SP> not defined in character map"
+msgstr "karakter <SP> niet gedefinieerd in karaktermap"
+
+#: locale/programs/ld-ctype.c:1140
+#, c-format
+msgid "character `%c' not defined while needed as default value"
+msgstr "karakter `%c' niet gedefinieerd maar nodig als standaard waarde"
+
+#: locale/programs/ld-ctype.c:938 locale/programs/ld-ctype.c:1001
+#: locale/programs/ld-ctype.c:1009 locale/programs/ld-ctype.c:1017
+#: locale/programs/ld-ctype.c:1025 locale/programs/ld-ctype.c:1033
+#: locale/programs/ld-ctype.c:1041 locale/programs/ld-ctype.c:1067
+#: locale/programs/ld-ctype.c:1075 locale/programs/ld-ctype.c:1113
+#: locale/programs/ld-ctype.c:1151
+#, c-format
+msgid "character `%s' not defined while needed as default value"
+msgstr "karakter `%s' niet gedefinieerd maar nodig als standaard waarde"
+
+#: locale/programs/ld-ctype.c:800
+#, c-format
+msgid "character class `%s' already defined"
+msgstr "karakterklasse `%s' is al gedefinieerd"
+
+#: locale/programs/ld-ctype.c:832
+#, c-format
+msgid "character map `%s' already defined"
+msgstr "karaktermap `%s' is al gedefinieerd"
+
+#: locale/programs/charmap.c:76
+#, c-format
+msgid "character map file `%s' not found"
+msgstr "karaktermapbestand `%s' niet gevonden"
+
 #: sunrpc/clnt_raw.c:106
 msgid "clnt_raw.c - Fatal header serialization error."
 msgstr ""
 
+#: locale/programs/ld-collate.c:1328
+#, c-format
+msgid "collation element `%.*s' appears more than once: ignore line"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1346
+msgid "collation symbol `.*s' appears more than once: ignore line"
+msgstr ""
+
+#: locale/programs/locfile.c:522
+#, c-format
+msgid "collation symbol expected after `%s'"
+msgstr ""
+
 #: inet/rcmd.c:112
 #, c-format
 msgid "connect to address %s: "
@@ -1076,11 +1864,11 @@ msgstr "verwacht konstante of identifier (FIXME)"
 msgid "couldn't create an rpc server\n"
 msgstr "kan geen rpc server aanmaken\n"
 
-#: sunrpc/portmap.c:122
+#: sunrpc/portmap.c:121
 msgid "couldn't do tcp_create\n"
 msgstr "kan niet tcp_create doen\n"
 
-#: sunrpc/portmap.c:100
+#: sunrpc/portmap.c:99
 msgid "couldn't do udp_create\n"
 msgstr "kan niet udp_create doen\n"
 
@@ -1089,27 +1877,54 @@ msgstr "kan niet udp_create doen\n"
 msgid "couldn't register prog %d vers %d\n"
 msgstr "kan programma %d versie %d niet registreren\n"
 
+#: locale/programs/charmap.c:86
+#, c-format
+msgid "default character map file `%s' not found"
+msgstr "standaard karaktermapbestand `%s' niet gevonden"
+
 #: sunrpc/rpc_parse.c:77
 msgid "definition keyword expected"
 msgstr "verwacht definitie keyword"
 
-#: catgets/gencat.c:367
+#: locale/programs/charset.c:87 locale/programs/charset.c:132
+#, c-format
+msgid "duplicate character name `%s'"
+msgstr "dubbele karakternaam `%s'"
+
+#: locale/programs/ld-collate.c:1140
+msgid "duplicate collating element definition"
+msgstr "dubbele collating element definitie"
+
+#: locale/programs/ld-collate.c:1286
+#, c-format
+msgid "duplicate definition for character `%.*s'"
+msgstr "dubbele definietie voor karakter `%.*s'"
+
+#: db/makedb.c:295
+msgid "duplicate key"
+msgstr "dubbele sleutel"
+
+#: catgets/gencat.c:369
 msgid "duplicate set definition"
 msgstr "tweede set definitie"
 
-#: time/zic.c:928
+#: time/zic.c:966
 #, c-format
 msgid "duplicate zone name %s (file \"%s\", line %d)"
 msgstr "dubbele zonenaam %s (bestand \"%s\", regel %d)"
 
-#: catgets/gencat.c:530
+#: catgets/gencat.c:532
 msgid "duplicated message identifier"
 msgstr "gedupliceerde meldings identifier"
 
-#: catgets/gencat.c:503
+#: catgets/gencat.c:505
 msgid "duplicated message number"
 msgstr "gedupliceerd meldingnummer"
 
+#: locale/programs/ld-collate.c:1695
+msgid "empty weight name: line ignored"
+msgstr "lege gewicht naam: regel genegeerd"
+
 #: sunrpc/svc_udp.c:344
 msgid "enablecache: cache already enabled"
 msgstr "enablecache: cache is al mogelijk"
@@ -1126,6 +1941,22 @@ msgstr ""
 msgid "enablecache: could not allocate cache fifo"
 msgstr ""
 
+#: locale/programs/ld-collate.c:1418
+msgid "end point of ellipsis range is bigger then start"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1148
+msgid "error while inserting collation element into hash table"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1160
+msgid "error while inserting to hash table"
+msgstr "fout tijdens bij invoegen in hash tabel"
+
+#: locale/programs/locfile.c:465
+msgid "expect string argument for `copy'"
+msgstr "verwacht string argument voor `copy'"
+
 #: sunrpc/rpc_util.c:300
 #, c-format
 msgid "expected '%s'"
@@ -1141,7 +1972,7 @@ msgstr "verwachte '%s' of '%s'"
 msgid "expected '%s', '%s' or '%s'"
 msgstr "verwachte '%s', '%s' of '%s'"
 
-#: time/zic.c:819
+#: time/zic.c:857
 msgid "expected continuation line not found"
 msgstr "verwachte continuation regel niet gevonden (FIXME)"
 
@@ -1149,95 +1980,197 @@ msgstr "verwachte continuation regel niet gevonden (FIXME)"
 msgid "expected type specifier"
 msgstr "verwachte type specificatie"
 
+#: locale/programs/locfile.c:1010
+#, c-format
+msgid "failure while writing data for category `%s'"
+msgstr "gefaald bij schrijven data voor categorie `%s'"
+
+#: locale/programs/ld-monetary.c:154 locale/programs/ld-numeric.c:95
+#, c-format
+msgid "field `%s' in category `%s' not defined"
+msgstr "veld `%s' uit categorie `%s' niet gedefinieerd"
+
+#: locale/programs/ld-messages.c:81 locale/programs/ld-messages.c:102
+#, c-format
+msgid "field `%s' in category `%s' undefined"
+msgstr "veld `%s' uit category `%s' ongedefinieerd"
+
+#: locale/programs/locfile.c:547
+msgid "from-value of `collating-element' must be a string"
+msgstr ""
+
+#: locale/programs/linereader.c:328
+msgid "garbage at end of character code specification"
+msgstr "rommel aan het einde van de karakter code specificatie"
+
+#: locale/programs/linereader.c:214
+msgid "garbage at end of digit"
+msgstr "rommel aan het einde van digit"
+
 #: sunrpc/get_myaddr.c:73
 msgid "get_myaddress: ioctl (get interface configuration)"
 msgstr "get_myaddress: ioctl (haal interface configuratie op)"
 
-#: time/zic.c:1113
+#: time/zic.c:1150
 msgid "illegal CORRECTION field on Leap line"
 msgstr "ongeldige CORRECTION veld op schrikkel regel"
 
-#: time/zic.c:1117
+#: time/zic.c:1154
 msgid "illegal Rolling/Stationary field on Leap line"
 msgstr "ongeldig Rolling/Stationary veld op schrikkelregel"
 
+#: locale/programs/ld-collate.c:1766
+msgid "illegal character constant in string"
+msgstr "ongeldige karakterkonstante in string"
+
 #: sunrpc/rpc_scan.c:281
 msgid "illegal character in file: "
 msgstr "ongeldig karakter in bestand: "
 
+#: locale/programs/ld-collate.c:1115
+msgid "illegal collation element"
+msgstr ""
+
+#: locale/programs/charmap.c:196
+msgid "illegal definition"
+msgstr "ongeldige definitie"
+
+#: locale/programs/charmap.c:349
+msgid "illegal encoding given"
+msgstr "ongeldige codering gegeven"
+
+#: locale/programs/linereader.c:546
+msgid "illegal escape sequence at end of string"
+msgstr ""
+
+#: locale/programs/charset.c:101
+msgid "illegal names for character range"
+msgstr "ongeldige namen voor karakter range"
+
 #: sunrpc/rpc_parse.c:146
 msgid "illegal result type"
 msgstr "ongeldig resultaat type"
 
-#: catgets/gencat.c:340 gencat.c:417
+#: catgets/gencat.c:342 catgets/gencat.c:419
 msgid "illegal set number"
 msgstr "ongeldig set nummer"
 
-#: time/zic.c:777
+#: locale/programs/ld-ctype.c:806
+#, c-format
+msgid "implementation limit: no more than %d character classes allowed"
+msgstr "implementatielimiet: niet meer dan %d karakterklassen toegestaan"
+
+#: locale/programs/ld-ctype.c:838
+#, c-format
+msgid "implementation limit: no more than %d character maps allowed"
+msgstr "implementatielimiet: niet meer dan %d karaktermappen toegestaan"
+
+#: db/makedb.c:151
+msgid "incorrectly formatted file"
+msgstr "onjuist geformateerd bestand"
+
+#: time/zic.c:815
 msgid "input line of unknown type"
 msgstr "invoer regel van onbekend type"
 
-#: time/zic.c:984
+#: time/zic.c:1734
+msgid "internal error - addtype called with bad isdst"
+msgstr "interne fout - `addtype' aangeroepen met onjuiste `isdst'"
+
+#: time/zic.c:1742
+msgid "internal error - addtype called with bad ttisgmt"
+msgstr "interne fout - `addtype' aangeroepen met onjuiste `ttisgmt'"
+
+#: time/zic.c:1738
+msgid "internal error - addtype called with bad ttisstd"
+msgstr "interne fout - `addtype' aangeroepen met onjuiste `ttisstd'"
+
+#: locale/programs/ld-ctype.c:300
+#, c-format
+msgid "internal error in %s, line %u"
+msgstr "interne fout in %s, regel %u"
+
+#: time/zic.c:1022
 msgid "invalid GMT offset"
 msgstr "onjuiste GMT offset"
 
-#: time/zic.c:987
+#: time/zic.c:1025
 msgid "invalid abbreviation format"
 msgstr "onjuist afkortingsformaat"
 
-#: time/zic.c:1078 zic.c:1277 zic.c:1291
+#: time/zic.c:1115 time/zic.c:1314 time/zic.c:1328
 msgid "invalid day of month"
 msgstr "ongeldige dag van de maand"
 
-#: time/zic.c:1236
+#: time/zic.c:1273
 msgid "invalid ending year"
 msgstr "ongeldig ending jaar (FIXME)"
 
-#: time/zic.c:1050
+#: time/zic.c:1087
 msgid "invalid leaping year"
 msgstr "ongeldig schrikkeljaar"
 
-#: time/zic.c:1065 zic.c:1168
+#: time/zic.c:1102 time/zic.c:1205
 msgid "invalid month name"
 msgstr "ongeldige maandnaam"
 
-#: time/zic.c:883
+#: time/zic.c:921
 msgid "invalid saved time"
 msgstr "ongeldig bewaarde tijd"
 
-#: time/zic.c:1216
+#: time/zic.c:1253
 msgid "invalid starting year"
 msgstr "ongeldig starting jaar (FIXME)"
 
-#: time/zic.c:1094 zic.c:1196
+#: time/zic.c:1131 time/zic.c:1233
 msgid "invalid time of day"
 msgstr "ongeldige tijd van de dag"
 
-#: time/zic.c:1282
+#: time/zic.c:1319
 msgid "invalid weekday name"
 msgstr "ongeldig weekdagnaam"
 
-#: time/zic.c:757
+#: locale/programs/ld-collate.c:1411
+msgid "line after ellipsis must contain character definition"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1390
+msgid "line before ellipsis does not contain definition for character constant"
+msgstr ""
+
+#: time/zic.c:795
 msgid "line too long"
 msgstr "regel te lang"
 
-#: catgets/gencat.c:598
+#: locale/programs/localedef.c:275
+#, c-format
+msgid "locale file `%s', used in `copy' statement, not found"
+msgstr "locale bestand `%s', gebruikt in `copy' statement, niet gevonden"
+
+#: catgets/gencat.c:600
 msgid "malformed line ignored"
 msgstr "verkeerde regel genegeerd"
 
-#: malloc/mcheck.c:168
+#: malloc/mcheck.c:183
 msgid "memory clobbered before allocated block"
 msgstr "geheugen clobbered voordat blok gereserveerd was (FIXME)"
 
-#: malloc/mcheck.c:171
+#: malloc/mcheck.c:186
 msgid "memory clobbered past end of allocated block"
 msgstr ""
 
-#: malloc/mcheck.c:165
+#: locale/programs/ld-collate.c:167 locale/programs/ld-collate.c:173
+#: locale/programs/ld-collate.c:177 locale/programs/ld-collate.c:1438
+#: locale/programs/ld-collate.c:1467 locale/programs/locfile.c:940
+#: locale/programs/xmalloc.c:64 posix/getconf.c:174
+msgid "memory exhausted"
+msgstr "geen geheugen meer beschikbaar"
+
+#: malloc/mcheck.c:180
 msgid "memory is consistent, library is buggy"
 msgstr "geheugen is consistent, bibliotheek is buggy"
 
-#: time/zic.c:878
+#: time/zic.c:916
 msgid "nameless rule"
 msgstr "naamloze regel"
 
@@ -1246,37 +2179,78 @@ msgstr "naamloze regel"
 msgid "never registered prog %d\n"
 msgstr "nooit geregistreerd programma %d\n"
 
-#: rpc_parse.c:313 sunrpc/rpc_parse.c:305
+#: sunrpc/rpc_parse.c:305 sunrpc/rpc_parse.c:313
 msgid "no array-of-pointer declarations -- use typedef"
 msgstr "geen array-of-pointer declaraties -- gebruik typedef"
 
-#: time/zic.c:1955
+#: locale/programs/ld-messages.c:95 locale/programs/ld-messages.c:116
+#, c-format
+msgid "no correct regular expression for field `%s' in category `%s': %s"
+msgstr ""
+
+#: time/zic.c:2060
 msgid "no day in month matches rule"
-msgstr "geen dag in de maand voldoet aan regel"
+msgstr "geen enkele dag van de maand voldoet aan voorwaarde"
+
+#: locale/programs/ld-collate.c:259
+msgid "no definition of `UNDEFINED'"
+msgstr "geen definitie van `UNDEFINED'"
+
+#: locale/programs/locfile.c:479
+msgid "no other keyword shall be specified when `copy' is used"
+msgstr "geen ander sleutelwoord mag worden gespecificeerd wanneer `copy' is gebruikt"
+
+#: locale/programs/localedef.c:334
+msgid "no output file produced because warning were issued"
+msgstr "geen uitvoer bestand gemaakt omdat waarschuwingen zijn gegeven"
+
+#: locale/programs/charmap.c:315 locale/programs/charmap.c:466
+#: locale/programs/charmap.c:545
+msgid "no symbolic name given"
+msgstr "geen symbolische naam gegeven"
 
-#: sunrpc/portmap.c:452
+#: locale/programs/charmap.c:380 locale/programs/charmap.c:512
+#: locale/programs/charmap.c:578
+msgid "no symbolic name given for end of range"
+msgstr "geen symbolisch naam gegeven voor einde bereik"
+
+#: locale/programs/ld-collate.c:244
+#, c-format
+msgid "no weight defined for symbol `%s'"
+msgstr "geen gewicht gedefinieerd voor symbool `%s'"
+
+#: locale/programs/charmap.c:430
+msgid "only WIDTH definitions are allowed to follow the CHARMAP definition"
+msgstr "alleen WIDTH definities zijn toegestaan na de CHARMAP definitie"
+
+#: sunrpc/portmap.c:451
 msgid "portmap CALLIT: cannot fork.\n"
 msgstr "portmap CALLIT: kan niet `fork'en.\n"
 
-#: portmap.c:117 sunrpc/portmap.c:95
+#: sunrpc/portmap.c:94 sunrpc/portmap.c:116
 msgid "portmap cannot bind"
 msgstr "portmap kan niet bind (FIXME)"
 
-#: portmap.c:113 sunrpc/portmap.c:87
+#: sunrpc/portmap.c:86 sunrpc/portmap.c:112
 msgid "portmap cannot create socket"
 msgstr "portmap kan geen socket aanmaken"
 
-#: rpc_scan.c:464 sunrpc/rpc_scan.c:456
+#: sunrpc/rpc_scan.c:456 sunrpc/rpc_scan.c:464
 msgid "preprocessor error"
 msgstr "voorbewerkingsfout"
 
-#: rpcinfo.c:350 sunrpc/rpcinfo.c:222
+#: db/makedb.c:311
+#, c-format
+msgid "problems while reading `%s'"
+msgstr "problemem tijdens lezen `%s'"
+
+#: sunrpc/rpcinfo.c:222 sunrpc/rpcinfo.c:350
 #, c-format
 msgid "program %lu is not available\n"
 msgstr "programma %lu is niet beschikbaar\n"
 
-#: rpcinfo.c:282 rpcinfo.c:371 rpcinfo.c:408 rpcinfo.c:429
-#: sunrpc/rpcinfo.c:245 sunrpc/rpcinfo.c:462
+#: sunrpc/rpcinfo.c:245 sunrpc/rpcinfo.c:282 sunrpc/rpcinfo.c:371
+#: sunrpc/rpcinfo.c:408 sunrpc/rpcinfo.c:429 sunrpc/rpcinfo.c:462
 #, c-format
 msgid "program %lu version %lu is not available\n"
 msgstr "programma %lu versie %lu is niet beschikbaar\n"
@@ -1304,7 +2278,7 @@ msgstr "rcmd: schrijf (setting up stderr): %s (FIXME)\n"
 msgid "registerrpc: out of memory\n"
 msgstr "registerrpc: geen geheugen meer beschikbaar\n"
 
-#: time/zic.c:1690
+#: time/zic.c:1795
 msgid "repeated leap second moment"
 msgstr "herhalend schrikkelseconde moment"
 
@@ -1336,10 +2310,14 @@ msgstr ""
 msgid "rpcinfo: can't contact portmapper: "
 msgstr ""
 
-#: sunrpc/portmap.c:138
+#: sunrpc/portmap.c:137
 msgid "run_svc returned unexpectedly\n"
 msgstr "run_svc kwam onverwacht terug (FIXME)\n"
 
+#: time/zic.c:709 time/zic.c:711
+msgid "same rule name in multiple files"
+msgstr "zelfde regel naam in meerdere bestanden"
+
 #: inet/rcmd.c:158
 msgid "select: protocol failure in circuit setup\n"
 msgstr ""
@@ -1348,19 +2326,28 @@ msgstr ""
 msgid "socket: protocol failure in circuit setup.\n"
 msgstr ""
 
-#: time/zic.c:742
+#: locale/programs/locfile.c:600
+msgid "sorting order `forward' and `backward' are mutually exclusive"
+msgstr "sorteervolgorde `forward' en `backward' zijn niet eenduidig"
+
+#: locale/programs/ld-collate.c:1567 locale/programs/ld-collate.c:1613
+msgid ""
+"specification of sorting weight for collation symbol does not make sense"
+msgstr "specificatie van sorteergewich voor collation symbool heeft geen zin"
+
+#: time/zic.c:780
 msgid "standard input"
 msgstr "standaardinvoer"
 
-#: time/zdump.c:259
+#: time/zdump.c:260
 msgid "standard output"
 msgstr "standaarduitvoer"
 
-#: time/zic.c:1240
+#: time/zic.c:1277
 msgid "starting year greater than ending year"
 msgstr "beginjaar is groter dan eindejaar"
 
-#: sunrpc/svc_tcp.c:199 svc_tcp.c:204
+#: sunrpc/svc_tcp.c:199 sunrpc/svc_tcp.c:204
 msgid "svc_tcp: makefd_xprt: out of memory\n"
 msgstr ""
 
@@ -1372,7 +2359,7 @@ msgstr ""
 msgid "svctcp_.c - udp socket creation problem"
 msgstr ""
 
-#: sunrpc/svc_tcp.c:154 svc_tcp.c:161
+#: sunrpc/svc_tcp.c:154 sunrpc/svc_tcp.c:161
 msgid "svctcp_create: out of memory\n"
 msgstr "svctcp_create: geen geheugen meer beschikbaar\n"
 
@@ -1384,53 +2371,196 @@ msgstr ""
 msgid "svcudp_create: socket creation problem"
 msgstr ""
 
-#: catgets/gencat.c:369 gencat.c:505 gencat.c:532
+#: locale/programs/ld-collate.c:1190
+#, c-format
+msgid ""
+"symbol for multicharacter collating element `%.*s' duplicates element "
+"definition"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1063
+#, c-format
+msgid ""
+"symbol for multicharacter collating element `%.*s' duplicates other element "
+"definition"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1199
+#, c-format
+msgid ""
+"symbol for multicharacter collating element `%.*s' duplicates other symbol "
+"definition"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1072
+#, c-format
+msgid ""
+"symbol for multicharacter collating element `%.*s' duplicates symbol "
+"definition"
+msgstr ""
+
+#: locale/programs/ld-collate.c:1054 locale/programs/ld-collate.c:1181
+#, c-format
+msgid ""
+"symbol for multicharacter collating element `%.*s' duplicates symbolic name "
+"in charset"
+msgstr ""
+
+#: locale/programs/charmap.c:314 locale/programs/charmap.c:348
+#: locale/programs/charmap.c:378 locale/programs/charmap.c:465
+#: locale/programs/charmap.c:511 locale/programs/charmap.c:544
+#: locale/programs/charmap.c:576
+#, c-format
+msgid "syntax error in %s definition: %s"
+msgstr "syntactische fout in %s definitie: %s"
+
+#: locale/programs/locfile.c:620
+msgid "syntax error in `order_start' directive"
+msgstr "syntactische fout in `order_start' directief"
+
+#: locale/programs/locfile.c:362
+msgid "syntax error in character class definition"
+msgstr "syntactische fout in karakter klasse definitie"
+
+#: locale/programs/locfile.c:420
+msgid "syntax error in character conversion definition"
+msgstr "syntactische fout in karakter conversie definitie"
+
+#: locale/programs/locfile.c:662
+msgid "syntax error in collating order definition"
+msgstr ""
+
+#: locale/programs/locfile.c:512
+msgid "syntax error in collation definition"
+msgstr ""
+
+#: locale/programs/locfile.c:335
+msgid "syntax error in definition of LC_CTYPE category"
+msgstr "syntactische fout in definitie van LC_CTYPE category"
+
+#: locale/programs/locfile.c:278
+msgid "syntax error in definition of new character class"
+msgstr "syntactische fout in definitie van nieuwe karakterklasse"
+
+#: locale/programs/locfile.c:288
+msgid "syntax error in definition of new character map"
+msgstr "syntactische fout in definitie van nieuwe karaktermap"
+
+#: locale/programs/locfile.c:873
+msgid "syntax error in message locale definition"
+msgstr "syntactische fout in melding locale definitie"
+
+#: locale/programs/locfile.c:784
+msgid "syntax error in monetary locale definition"
+msgstr "syntactische fout in monetaire locale definitie"
+
+#: locale/programs/locfile.c:811
+msgid "syntax error in numeric locale definition"
+msgstr "syntactische fout in numerieke locale definitie"
+
+#: locale/programs/locfile.c:722
+msgid "syntax error in order specification"
+msgstr "syntactische fout in volgorde specificatie"
+
+#: locale/programs/charmap.c:195 locale/programs/charmap.c:211
+#, c-format
+msgid "syntax error in prolog: %s"
+msgstr "syntactische fout in prolog: %s"
+
+#: locale/programs/locfile.c:849
+msgid "syntax error in time locale definition"
+msgstr "syntactische fout in tijd locale definitie"
+
+#: locale/programs/locfile.c:255
+msgid "syntax error: not inside a locale definition section"
+msgstr "syntactische fout: niet in een locale definitie deel"
+
+#: catgets/gencat.c:371 catgets/gencat.c:507 catgets/gencat.c:534
 msgid "this is the first definition"
 msgstr "dit is de eerste definitie"
 
-#: time/zic.c:1083
+#: time/zic.c:1120
 msgid "time before zero"
 msgstr "tijd voor nul"
 
-#: time/zic.c:1091 zic.c:1855 zic.c:1874
+#: time/zic.c:1128 time/zic.c:1960 time/zic.c:1979
 msgid "time overflow"
 msgstr "tijd overflow"
 
+#: locale/programs/charset.c:44
+msgid "too few bytes in character encoding"
+msgstr "te weinig bytes in karaktercodering"
+
+#: locale/programs/charset.c:46
+msgid "too many bytes in character encoding"
+msgstr "te veel bytes in karaktercodering"
+
+#: locale/programs/locales.h:72
+msgid "too many character classes defined"
+msgstr "te veel karakterklassen gedefinieerd"
+
 #: sunrpc/rpc_util.c:285
 msgid "too many files!\n"
 msgstr "te veel bestanden!\n"
 
-#: time/zic.c:1684
+#: time/zic.c:1789
 msgid "too many leap seconds"
 msgstr "te veel schrikkelseconden"
 
-#: time/zic.c:1656
+#: time/zic.c:1761
 msgid "too many local time types"
 msgstr "te veel lokale tijd typen"
 
-#: time/zic.c:1622
+#: time/zic.c:1715
 msgid "too many transitions?!"
 msgstr "te veel overgangen?!"
 
-#: time/zic.c:1978
+#: locale/programs/ld-collate.c:1622
+msgid "too many weights"
+msgstr "te veel gewichten"
+
+#: time/zic.c:2083
 msgid "too many, or too long, time zone abbreviations"
 msgstr "te veel, of te lange, tijdzone afkortingen"
 
+#: locale/programs/linereader.h:146
+msgid "trailing garbage at end of line"
+msgstr "rommel aan het einde van de regel"
+
 #: sunrpc/svc_simple.c:132
 #, c-format
 msgid "trouble replying to prog %d\n"
 msgstr "moeite met antwoorden naar programma %d\n"
 
-#: time/zic.c:1247
+#: locale/programs/ld-collate.c:1382
+msgid "two lines in a row containing `...' are not allowed"
+msgstr "twee regels in een rij bevattende `...' zijn niet toegestaan"
+
+#: time/zic.c:1284
 msgid "typed single year"
 msgstr "typed enkel jaar (FIMXE)"
 
-#: catgets/gencat.c:466
+#: locale/programs/charmap.c:617 locale/programs/charmap.c:628
+#, c-format
+msgid "unknown character `%s'"
+msgstr "onbekend karakter `%s'"
+
+#: locale/programs/ld-messages.c:193 locale/programs/ld-messages.c:204
+#: locale/programs/ld-messages.c:215 locale/programs/ld-messages.c:226
+#, c-format
+msgid "unknown character in field `%s' of category `%s'"
+msgstr "onbekend karakter in veld `%s' uit category `%s'"
+
+#: locale/programs/locfile.c:585
+msgid "unknown collation directive"
+msgstr ""
+
+#: catgets/gencat.c:468
 #, c-format
 msgid "unknown directive `%s': line ignored"
 msgstr "onbekende richtlijn `%s': regel genegeerd (FIXME)"
 
-#: catgets/gencat.c:445
+#: catgets/gencat.c:447
 #, c-format
 msgid "unknown set `%s'"
 msgstr "onbekende set `%s'"
@@ -1438,27 +2568,93 @@ msgstr "onbekende set `%s'"
 msgid "unknown signal"
 msgstr "onbekend signaal"
 
-#: time/zic.c:714
+#: locale/programs/ld-collate.c:1366 locale/programs/ld-collate.c:1557
+#: locale/programs/ld-collate.c:1731
+#, c-format
+msgid "unknown symbol `%.*s': line ignored"
+msgstr "onbekend symbool `%.*s': regel genegeerd"
+
+#: time/zic.c:752
 msgid "unruly zone"
 msgstr "regelloze zone"
 
-#: catgets/gencat.c:950
+#: catgets/gencat.c:952
 msgid "unterminated message"
 msgstr "niet getermineerde melding"
 
+#: locale/programs/linereader.c:515 locale/programs/linereader.c:550
+msgid "unterminated string"
+msgstr "niet getermineerde string"
+
 #: sunrpc/rpc_scan.c:319
 msgid "unterminated string constant"
 msgstr "niet getermineerde string konstante"
 
+#: locale/programs/linereader.c:385
+msgid "unterminated symbolic name"
+msgstr "niet getermineerde symbolische naam"
+
+#: locale/programs/ld-collate.c:1684
+msgid "unterminated weight name"
+msgstr "niet getermineerde gewichtnaam"
+
+#: locale/programs/charset.c:119
+msgid "upper limit in range is not smaller then lower limit"
+msgstr "grootste limiet in bereik is niet kleiner dan kleinste limiet"
+
 #: sunrpc/rpc_main.c:78
 #, c-format
 msgid "usage: %s infile\n"
 msgstr "gebruik: %s invoerbestand\n"
 
-#: time/zic.c:1921
+#: time/zic.c:2026
 msgid "use of 2/29 in non leap-year"
 msgstr "gebruik van 29 februari in niet schrikkeljaar"
 
+#: locale/programs/charmap.c:438 locale/programs/charmap.c:492
+#, c-format
+msgid "value for %s must be an integer"
+msgstr "waarde voor %s moet een integer zijn"
+
+#: locale/programs/charmap.c:233
+#, c-format
+msgid "value for <%s> must lie between 1 and 4"
+msgstr "waarde voor <%s> moet tussen 1 en 4 liggen"
+
+#: locale/programs/ld-monetary.c:148 locale/programs/ld-numeric.c:89
+#, c-format
+msgid "value for field `%s' in category `%s' must not be the empty string"
+msgstr "waarde voor veld `%s' in categorie `%s' mag geen lege string zijn"
+
+#: locale/programs/charmap.c:245
+msgid "value of <mb_cur_max> must be greater than the value of <mb_cur_min>"
+msgstr "waarde van <mb_cur_max> moet groter zijn dan de waarde van <mb_cur_min>"
+
+#: locale/programs/ld-monetary.c:138
+msgid ""
+"value of field `int_curr_symbol' in category `LC_MONETARY' does not "
+"correspond to a valid name in ISO 4217"
+msgstr ""
+"waarde van veld `int_curr_symbol' in categorie `LC_MONETARY'\n"
+"korrespondeert niet met een geldige naam in ISO 4217"
+
+#: locale/programs/ld-monetary.c:133
+msgid ""
+"value of field `int_curr_symbol' in category `LC_MONETARY' has wrong length"
+msgstr ""
+"de lengte van waarde van veld `int_curr_symbol' in categorie\n"
+"`LC_MONETARY' is niet juist"
+
+#: locale/programs/ld-monetary.c:370 locale/programs/ld-numeric.c:199
+#, c-format
+msgid "values for field `%s' in category `%s' must be smaller than 127"
+msgstr "waarden voor veld `%s' uit categorie `%s' moeten kleiner zijn dan 127"
+
+#: locale/programs/ld-monetary.c:366
+#, c-format
+msgid "values for field `%s' in category `%s' must not be zero"
+msgstr "waarden voor veld `%s' uit categorie `%s' mogen geen nul zijn"
+
 #: sunrpc/rpc_parse.c:330
 msgid "variable-length array declaration expected"
 msgstr "verwachte variabelelengte `array' declaratie"
@@ -1471,26 +2667,38 @@ msgstr "voids enkel toegestaan in union en programma definities"
 msgid "while opening UTMP file"
 msgstr "bij openen UTMP bestand"
 
-#: catgets/gencat.c:977
+#: catgets/gencat.c:979
 msgid "while opening old catalog file"
 msgstr "bij openen oud catalogusbestand"
 
-#: time/zic.c:1041
+#: db/makedb.c:338
+msgid "while reading database"
+msgstr "bij lezen database"
+
+#: db/makedb.c:300
+msgid "while writing data base file"
+msgstr "bij schrijven databasebestand"
+
+#: db/makedb.c:130
+msgid "wrong number of arguments"
+msgstr "onjuist aantal argumenten"
+
+#: time/zic.c:1078
 msgid "wrong number of fields on Leap line"
 msgstr "onjuist aantal velden op schrikkelregel"
 
-#: time/zic.c:1132
+#: time/zic.c:1169
 msgid "wrong number of fields on Link line"
 msgstr "onjuist aantal velden op `Link' regel"
 
-#: time/zic.c:874
+#: time/zic.c:912
 msgid "wrong number of fields on Rule line"
 msgstr "onjuist aantal velden op `Rule' regel"
 
-#: time/zic.c:944
+#: time/zic.c:982
 msgid "wrong number of fields on Zone continuation line"
 msgstr "onjuist aantal velden op `Zone' continuation regel (FIXME)"
 
-#: time/zic.c:902
+#: time/zic.c:940
 msgid "wrong number of fields on Zone line"
 msgstr "onjuist aantal velden op `Zone' regel"
diff --git a/shlib-versions b/shlib-versions
index 5f9ed657da..4699b1f7d1 100644
--- a/shlib-versions
+++ b/shlib-versions
@@ -47,10 +47,3 @@ alpha-*-linux*		libc=6
 
 # We use libdb.so.2 for the interface in version 1.85 of the Berkeley DB code.
 *-*-*			libdb=2
-
-# So far libcrypt.so.0 specifies the interface of the traditional `crypt'
-# function.  The libc distribution installs the stub `nocrypt' library
-# with this interface.  The separate crypt distribution (which cannot be
-# legally exported from the USA) provides real DES encryption in a shared
-# library libcrypt.so.0 with the same interface.
-*-*-*			libcrypt=0
diff --git a/stdio-common/Makefile b/stdio-common/Makefile
index 8c7bae9c45..e65ff70713 100644
--- a/stdio-common/Makefile
+++ b/stdio-common/Makefile
@@ -50,3 +50,9 @@ include ../Rules
 
 CFLAGS-_itoa.c = -Wno-unused
 CFLAGS-tst-printf.c = -Wno-format
+
+ifeq ($(stdio),libio)
+ifneq (,$(filter %REENTRANT, $(defines)))
+CPPFLAGS += -D_IO_MTSAFE_IO
+endif
+endif
diff --git a/stdio-common/bug3.c b/stdio-common/bug3.c
index 1684720b9f..3bb0158a21 100644
--- a/stdio-common/bug3.c
+++ b/stdio-common/bug3.c
@@ -7,8 +7,9 @@ DEFUN_VOID(main)
 {
   FILE *f;
   int i;
+  const char filename[] = "/tmp/bugtest";
 
-  f = fopen("/tmp/bugtest", "w+");
+  f = fopen(filename, "w+");
   for (i=0; i<9000; i++)
     putc ('x', f);
   fseek (f, 8180L, 0);
@@ -45,6 +46,7 @@ DEFUN_VOID(main)
     }
 
   fclose(f);
+  remove(filename);
 
   puts ("Test succeeded.");
 
diff --git a/stdio-common/bug4.c b/stdio-common/bug4.c
index 00abf3c502..acf5b5433b 100644
--- a/stdio-common/bug4.c
+++ b/stdio-common/bug4.c
@@ -14,6 +14,7 @@ DEFUN(main, (argc, argv),
   FILE *f;
   int i;
   char buffer[31];
+  const char filename[] = "/tmp/bugtest";
 
   while ((i = getopt (argc, argv, "rw")) != EOF)
     switch (i)
@@ -26,7 +27,7 @@ DEFUN(main, (argc, argv),
 	break;
       }
 
-  f = fopen("/tmp/bugtest", "w+");
+  f = fopen(filename, "w+");
   for (i=0; i<9000; i++) {
     putc('x', f);
   }
@@ -36,6 +37,7 @@ DEFUN(main, (argc, argv),
   fread(buffer, 1, 31, f);
   fwrite(buffer, 1, 31, stdout);
   fclose(f);
+  remove(filename);
 
   if (!memcmp (buffer, "Where does this text come from?", 31))
     {
diff --git a/stdio-common/bug5.c b/stdio-common/bug5.c
index 18f069ae29..def73397de 100644
--- a/stdio-common/bug5.c
+++ b/stdio-common/bug5.c
@@ -17,7 +17,8 @@ DEFUN_VOID(main)
   FILE *out;
   static char inname[] = "/tmp/bug5.in";
   static char outname[] = "/tmp/bug5.out";
-  int i;
+  char *printbuf;
+  int i, result;
 
   /* Create a test file.  */
   in = fopen (inname, "w+");
@@ -54,7 +55,11 @@ DEFUN_VOID(main)
 
   puts ("There should be no further output from this test.");
   fflush (stdout);
-  execlp ("cmp", "cmp", inname, outname, (char *) NULL);
-  perror ("execlp: cmp");
-  exit (1);
+
+  asprintf (&printbuf, "cmp %s %s", inname, outname);
+  result = system (printbuf);
+  remove (inname);
+  remove (outname);
+
+  exit ((result != 0));
 }
diff --git a/stdio-common/scanf7.c b/stdio-common/scanf7.c
index 386dac4d06..d5023af8a1 100644
--- a/stdio-common/scanf7.c
+++ b/stdio-common/scanf7.c
@@ -8,7 +8,7 @@ main ()
 
   n = -1;
   ret = sscanf ("1000", "%lld", &n);
-  printf ("%%lld: ret: %d, n: %Ld, c: %c\n", ret, n);
+  printf ("%%lld: ret: %d, n: %Ld\n", ret, n);
   if (ret != 1 || n != 1000L)
     abort ();
 
diff --git a/stdio-common/test-popen.c b/stdio-common/test-popen.c
index b452f3f63c..a17606e503 100644
--- a/stdio-common/test-popen.c
+++ b/stdio-common/test-popen.c
@@ -58,10 +58,8 @@ DEFUN_VOID(main)
   rstatus = pclose (input);
   printf ("reading pclose returned %d\n", rstatus);
 
+  remove ("/tmp/tstpopen.tmp");
+
   puts (wstatus | rstatus  ? "Test FAILED!" : "Test succeeded.");
   exit (wstatus | rstatus);
 }
-
-  
-
-  
diff --git a/stdlib/test-canon.c b/stdlib/test-canon.c
index 6f0171d200..8d04bb6ba0 100644
--- a/stdlib/test-canon.c
+++ b/stdlib/test-canon.c
@@ -45,7 +45,7 @@ struct {
 
 struct {
   const char * in, * out, * resolved;
-  int errno;
+  int error;
 } tests[] = {
   /*  0 */
   {"/",					"/"},
@@ -145,10 +145,10 @@ main (int argc, char ** argv)
 	  continue;
 	}
 
-      if (!tests[i].out && errno != tests[i].errno)
+      if (!tests[i].out && errno != tests[i].error)
 	{
 	  printf ("%s: flunked test %d (expected errno %d, got %d)\n",
-		  argv[0], i, tests[i].errno, errno);
+		  argv[0], i, tests[i].errno, error);
 	  ++errors;
 	  continue;
 	}
diff --git a/sysdeps/libm-ieee754/e_acoshl.c b/sysdeps/libm-ieee754/e_acoshl.c
index 8af7c27aa7..7b7bea7054 100644
--- a/sysdeps/libm-ieee754/e_acoshl.c
+++ b/sysdeps/libm-ieee754/e_acoshl.c
@@ -52,17 +52,17 @@ ln2	= 6.931471805599453094287e-01L; /* 0x3FFE, 0xB17217F7, 0xD1CF79AC */
 {
 	long double t;
 	u_int32_t se,i0,i1;
-	EXTRACT_LDOUBLE_WORDS(se,i0,i1,x);
+	GET_LDOUBLE_WORDS(se,i0,i1,x);
 	if(se<0x3fff) {			/* x < 1 */
 	    return (x-x)/(x-x);
-	} else if(hx >=0x401b) {	/* x > 2**28 */
-	    if(hx >=0x7fff) {		/* x is inf of NaN */
+	} else if(se >=0x401b) {	/* x > 2**28 */
+	    if(se >=0x7fff) {		/* x is inf of NaN */
 	        return x+x;
 	    } else
 		return __ieee754_logl(x)+ln2;	/* acoshl(huge)=logl(2x) */
 	} else if(((se-0x3fff)|i0|i1)==0) {
 	    return 0.0;			/* acosh(1) = 0 */
-	} else if (hx > 0x4000) {	/* 2**28 > x > 2 */
+	} else if (se > 0x4000) {	/* 2**28 > x > 2 */
 	    t=x*x;
 	    return __ieee754_logl(2.0*x-one/(x+__ieee754_sqrtl(t-one)));
 	} else {			/* 1<x<2 */
diff --git a/sysdeps/libm-ieee754/s_cbrtl.c b/sysdeps/libm-ieee754/s_cbrtl.c
index 03ebfe7eb8..9f45faa00c 100644
--- a/sysdeps/libm-ieee754/s_cbrtl.c
+++ b/sysdeps/libm-ieee754/s_cbrtl.c
@@ -53,7 +53,6 @@ G =  3.57142857142857150787e-01L; /* 5/14 */
 	long double x;
 #endif
 {
-	int32_t	hx;
 	long double r,s,t=0.0,w;
 	u_int32_t sign, se, x0, x1;
 
diff --git a/sysdeps/m68k/fpu/__math.h b/sysdeps/m68k/fpu/__math.h
index 4992aea561..0e3e2a3d8c 100644
--- a/sysdeps/m68k/fpu/__math.h
+++ b/sysdeps/m68k/fpu/__math.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 93, 94, 96 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
@@ -39,30 +39,30 @@ Cambridge, MA 02139, USA.  */
   __m81_inline rettype							      \
   __m81_u(func) args
 
+/* Define the three variants of a math function that has a direct
+   implementation in the m68k fpu.  FUNC is the name for C (which will be
+   suffixed with f and l for the float and long double version, resp).  OP
+   is the name of the fpu operation (without leading f).  */
 #define	__inline_mathop(func, op)					      \
   __m81_defun (double, func, (double __mathop_x))			      \
   {									      \
     double __result;							      \
     __asm("f" __STRING(op) "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x));\
     return __result;							      \
-  }
-
-#define __inline_mathopf(func, op)					      \
-  __m81_defun (float, func, (float __mathop_x))				      \
+  }									      \
+  __m81_defun (float, func##f, (float __mathop_x))			      \
   {									      \
     float __result;							      \
     __asm("f" __STRING(op) "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x));\
     return __result;							      \
-  }
-
-#define __inline_mathopl(func, op)					      \
-  __m81_defun (long double, func, (long double __mathop_x))		      \
+  }									      \
+  __m81_defun (long double, func##l, (long double __mathop_x))		      \
   {									      \
     long double __result;						      \
     __asm("f" __STRING(op) "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x));\
     return __result;							      \
   }
-  
+
 /* ieee style elementary functions */
 __inline_mathop(__ieee754_acos, acos)
 __inline_mathop(__ieee754_asin, asin)
@@ -74,28 +74,6 @@ __inline_mathop(__ieee754_log, logn)
 __inline_mathop(__ieee754_sqrt, sqrt)
 __inline_mathop(__ieee754_atanh, atanh)
 
-/* ieee style elementary float functions */
-__inline_mathopf(__ieee754_acosf, acos)
-__inline_mathopf(__ieee754_asinf, asin)
-__inline_mathopf(__ieee754_coshf, cosh)
-__inline_mathopf(__ieee754_sinhf, sinh)
-__inline_mathopf(__ieee754_expf, etox)
-__inline_mathopf(__ieee754_log10f, log10)
-__inline_mathopf(__ieee754_logf, logn)
-__inline_mathopf(__ieee754_sqrtf, sqrt)
-__inline_mathopf(__ieee754_atanhf, atan)
-
-/* ieee style elementary long double functions */
-__inline_mathopl(__ieee754_acosl, acos)
-__inline_mathopl(__ieee754_asinl, asin)
-__inline_mathopl(__ieee754_coshl, cosh)
-__inline_mathopl(__ieee754_sinhl, sinh)
-__inline_mathopl(__ieee754_expl, etox)
-__inline_mathopl(__ieee754_log10l, log10)
-__inline_mathopl(__ieee754_logl, logn)
-__inline_mathopl(__ieee754_sqrtl, sqrt)
-__inline_mathopl(__ieee754_atanhl, atan)
-
 __inline_mathop(__atan, atan)
 __inline_mathop(__cos, cos)
 __inline_mathop(__sin, sin)
@@ -110,517 +88,226 @@ __inline_mathop(__log1p, lognp1)
 __inline_mathop(__logb, log2)
 __inline_mathop(__significand, getman)
 
-__inline_mathopf(__atanf, atan)
-__inline_mathopf(__cosf, cos)
-__inline_mathopf(__sinf, sin)
-__inline_mathopf(__tanf, tan)
-__inline_mathopf(__tanhf, tanh)
-__inline_mathopf(__fabsf, abs)
-__inline_mathopf(__sqrtf, sqrt)
-
-__inline_mathopf(__rintf, int)
-__inline_mathopf(__expm1f, etoxm1)
-__inline_mathopf(__log1pf, lognp1)
-__inline_mathopf(__logbf, log2)
-__inline_mathopf(__significandf, getman)
-
-__inline_mathopl(__atanl, atan)
-__inline_mathopl(__cosl, cos)
-__inline_mathopl(__sinl, sin)
-__inline_mathopl(__tanl, tan)
-__inline_mathopl(__tanhl, tanh)
-__inline_mathopl(__fabsl, abs)
-__inline_mathopl(__sqrtl, sqrt)
-
-__inline_mathopl(__rintl, int)
-__inline_mathopl(__expm1l, etoxm1)
-__inline_mathopl(__log1pl, lognp1)
-__inline_mathopl(__logbl, log2)
-__inline_mathopl(__significandl, getman)
-
-__m81_defun (double, __ieee754_remainder, (double __x, double __y))
-{
-  double __result;
-  __asm("frem%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));
-  return __result;
-}
-
-__m81_defun (double, __ldexp, (double __x, int __e))
-{
-  double __result;
-  double __double_e = (double) __e;
-  __asm("fscale%.x %1, %0" : "=f" (__result) : "f" (__double_e), "0" (__x));
-  return __result;
-}
-
-__m81_defun (double, __ieee754_fmod, (double __x, double __y))
-{
-  double __result;
-  __asm("fmod%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));
-  return __result;
-}
-
-__m81_inline double
-__m81_u(__frexp)(double __value, int *__expptr)
-{
-  double __mantissa, __exponent;
-  __asm("fgetexp%.x %1, %0" : "=f" (__exponent) : "f" (__value));
-  __asm("fgetman%.x %1, %0" : "=f" (__mantissa) : "f" (__value));
-  *__expptr = (int) __exponent;
-  return __mantissa;
-}
-
-__m81_defun (double, __floor, (double __x))
-{
-  double __result;
-  unsigned long int __ctrl_reg;
-  __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));
-  /* Set rounding towards negative infinity.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */ 
-		      : "dmi" ((__ctrl_reg & ~0x10) | 0x20));
-  /* Convert X to an integer, using -Inf rounding.  */
-  __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));
-  /* Restore the previous rounding mode.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */
-		      : "dmi" (__ctrl_reg));
-  return __result;
-}
-
-__m81_defun (double, __ieee754_pow, (double __x, double __y))
-{
-  double __result;
-  if (__x == 0.0)
-    {
-      if (__y <= 0.0)
-	__result = 0.0 / 0.0;
-      else
-	__result = 0.0;
-    }
-  else if (__y == 0.0 || __x == 1.0)
-    __result = 1.0;
-  else if (__y == 1.0)
-    __result = __x;
-  else if (__y == 2.0)
-    __result = __x * __x;
-  else if (__x == 10.0)
-    __asm("ftentox%.x %1, %0" : "=f" (__result) : "f" (__y));
-  else if (__x == 2.0)
-    __asm("ftwotox%.x %1, %0" : "=f" (__result) : "f" (__y));
-  else if (__x < 0.0)
-    {
-      double __temp = __m81_u (__rint) (__y);
-      if (__y == __temp)
-	{
-	  int i = (int) __y;
-	  __result = __m81_u(__ieee754_exp)(__y * __m81_u(__ieee754_log)(-__x));
-	  if (i & 1)
-	    __result = -__result;
-	}
-      else
-	__result = 0.0 / 0.0;
-    }
-  else
-    __result = __m81_u(__ieee754_exp)(__y * __m81_u(__ieee754_log)(__x));
-  return __result;
-}
-
-__m81_defun (double, __ceil, (double __x))
-{
-  double __result;
-  unsigned long int __ctrl_reg;
-  __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));
-  /* Set rounding towards positive infinity.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */
-		      : "dmi" (__ctrl_reg | 0x30));
-  /* Convert X to an integer, using +Inf rounding.  */
-  __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));
-  /* Restore the previous rounding mode.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */
-		      : "dmi" (__ctrl_reg));
-  return __result;
-}
-
-__m81_inline double
-__m81_u(__modf)(double __value, double *__iptr)
-{
-  double __modf_int;
-  __asm ("fintrz%.x %1, %0" : "=f" (__modf_int) : "f" (__value));
-  *__iptr = __modf_int;
-  return __value - __modf_int;
-}
-
-__m81_defun (int, __isinf, (double __value))
-{
-  /* There is no branch-condition for infinity,
-     so we must extract and examine the condition codes manually.  */
-  unsigned long int __fpsr;
-  __asm("ftst%.x %1\n"
-	"fmove%.l %/fpsr, %0" : "=dm" (__fpsr) : "f" (__value));
-  return (__fpsr & (2 << 24)) ? (__fpsr & (8 << 24) ? -1 : 1) : 0;
-}
-
-__m81_defun (int, __isnan, (double __value))
-{
-  char __result;
-  __asm("ftst%.x %1\n"
-	"fsun %0" : "=dm" (__result) : "f" (__value));
-  return __result;
-}
-
-__m81_defun (int, __finite, (double __value))
-{
-  /* There is no branch-condition for infinity, so we must extract and
-     examine the condition codes manually.  */
-  unsigned long int __fpsr;
-  __asm ("ftst%.x %1\n"
-	 "fmove%.l %/fpsr, %0" : "=dm" (__fpsr) : "f" (__value));
-  return (__fpsr & (3 << 24)) == 0;
-}
-
-__m81_defun (int, __ilogb, (double __x))
-{
-  double __result;
-  __asm("fgetexp%.x %1, %0" : "=f" (__result) : "f" (__x));
-  return (int) __result;
-}
-
-__m81_defun (double, __ieee754_scalb, (double __x, double __n))
-{
-  double __result;
-  __asm ("fscale%.x %1, %0" : "=f" (__result) : "f" (__n), "0" (__x));
-  return __result;
-}
-
-__m81_defun (double, __scalbn, (double __x, int __n))
-{
-  double __result;
-  double __double_n = (double) __n;
-  __asm ("fscale%.x %1, %0" : "=f" (__result) : "f" (__double_n), "0" (__x));
-  return __result;
-}
-
-__m81_defun (float, __ieee754_remainderf, (float __x, float __y))
-{
-  float __result;
-  __asm("frem%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));
-  return __result;
-}
-
-__m81_defun (float, __ldexpf, (float __x, int __e))
-{
-  float __result;
-  float __float_e = (float) __e;
-  __asm("fscale%.x %1, %0" : "=f" (__result) : "f" (__float_e), "0" (__x));
-  return __result;
-}
-
-__m81_defun (float, __ieee754_fmodf, (float __x, float __y))
-{
-  float __result;
-  __asm("fmod%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));
-  return __result;
-}
-
-__m81_inline float
-__m81_u(__frexpf)(float __value, int *__expptr)
-{
-  float __mantissa, __exponent;
-  __asm("fgetexp%.x %1, %0" : "=f" (__exponent) : "f" (__value));
-  __asm("fgetman%.x %1, %0" : "=f" (__mantissa) : "f" (__value));
-  *__expptr = (int) __exponent;
-  return __mantissa;
-}
-
-__m81_defun (float, __floorf, (float __x))
-{
-  float __result;
-  unsigned long int __ctrl_reg;
-  __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));
-  /* Set rounding towards negative infinity.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */ 
-		      : "dmi" ((__ctrl_reg & ~0x10) | 0x20));
-  /* Convert X to an integer, using -Inf rounding.  */
-  __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));
-  /* Restore the previous rounding mode.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */
-		      : "dmi" (__ctrl_reg));
-  return __result;
-}
-
-__m81_defun (float, __ieee754_powf, (float __x, float __y))
-{
-  float __result;
-  if (__x == 0.0f)
-    {
-      if (__y <= 0.0f)
-	__result = 0.0f / 0.0f;
-      else
-	__result = 0.0f;
-    }
-  else if (__y == 0.0f || __x == 1.0f)
-    __result = 1.0;
-  else if (__y == 1.0f)
-    __result = __x;
-  else if (__y == 2.0f)
-    __result = __x * __x;
-  else if (__x == 10.0f)
-    __asm("ftentox%.x %1, %0" : "=f" (__result) : "f" (__y));
-  else if (__x == 2.0f)
-    __asm("ftwotox%.x %1, %0" : "=f" (__result) : "f" (__y));
-  else if (__x < 0.0f)
-    {
-      float __temp = __m81_u(__rintf)(__y);
-      if (__y == __temp)
-	{
-	  int i = (int) __y;
-	  __result = __m81_u(__ieee754_expf)(__y * __m81_u(__ieee754_logf)(-__x));
-	  if (i & 1)
-	    __result = -__result;
-	}
-      else
-	__result = 0.0f / 0.0f;
-    }
-  else
-    __result = __m81_u(__ieee754_expf)(__y * __m81_u(__ieee754_logf)(__x));
-  return __result;
-}
-
-__m81_defun (float, __ceilf, (float __x))
-{
-  float __result;
-  unsigned long int __ctrl_reg;
-  __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));
-  /* Set rounding towards positive infinity.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */
-		      : "dmi" (__ctrl_reg | 0x30));
-  /* Convert X to an integer, using +Inf rounding.  */
-  __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));
-  /* Restore the previous rounding mode.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */
-		      : "dmi" (__ctrl_reg));
-  return __result;
-}
-
-__m81_inline float
-__m81_u(__modff)(float __value, float *__iptr)
-{
-  float __modf_int;
-  __asm ("fintrz%.x %1, %0" : "=f" (__modf_int) : "f" (__value));
-  *__iptr = __modf_int;
-  return __value - __modf_int;
-}
-
-__m81_defun (int, __isinff, (float __value))
-{
-  /* There is no branch-condition for infinity,
-     so we must extract and examine the condition codes manually.  */
-  unsigned long int __fpsr;
-  __asm("ftst%.x %1\n"
-	"fmove%.l %/fpsr, %0" : "=dm" (__fpsr) : "f" (__value));
-  return (__fpsr & (2 << 24)) ? (__fpsr & (8 << 24) ? -1 : 1) : 0;
-}
-
-__m81_defun (int, __isnanf, (float __value))
-{
-  char __result;
-  __asm("ftst%.x %1\n"
-	"fsun %0" : "=dm" (__result) : "f" (__value));
-  return __result;
-}
-
-__m81_defun (int, __finitef, (float __value))
-{
-  /* There is no branch-condition for infinity, so we must extract and
-     examine the condition codes manually.  */
-  unsigned long int __fpsr;
-  __asm ("ftst%.x %1\n"
-	 "fmove%.l %/fpsr, %0" : "=dm" (__fpsr) : "f" (__value));
-  return (__fpsr & (3 << 24)) == 0;
-}
-
-__m81_defun (int, __ilogbf, (float __x))
-{
-  float __result;
-  __asm("fgetexp%.x %1, %0" : "=f" (__result) : "f" (__x));
-  return (int) __result;
-}
-
-__m81_defun (float, __ieee754_scalbf, (float __x, float __n))
-{
-  float __result;
-  __asm ("fscale%.x %1, %0" : "=f" (__result) : "f" (__n), "0" (__x));
-  return __result;
-}
-
-__m81_defun (float, __scalbnf, (float __x, int __n))
-{
-  float __result;
-  float __float_n = (float) __n;
-  __asm ("fscale%.x %1, %0" : "=f" (__result) : "f" (__float_n), "0" (__x));
-  return __result;
-}
-
-__m81_defun (long double, __ieee754_remainderl, (long double __x,
-						 long double __y))
-{
-  long double __result;
-  __asm ("frem%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));
-  return __result;
-}
-
-__m81_defun (long double, __ldexpl, (long double __x, int __e))
-{
-  long double __result;
-  long double __float_e = (long double) __e;
-  __asm ("fscale%.x %1, %0" : "=f" (__result) : "f" (__float_e), "0" (__x));
-  return __result;
-}
-
-__m81_defun (long double, __ieee754_fmodl, (long double __x, long double __y))
-{
-  long double __result;
-  __asm("fmod%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));
-  return __result;
-}
-
-__m81_inline long double
-__m81_u(__frexpl)(long double __value, int *__expptr)
-{
-  long double __mantissa, __exponent;
-  __asm("fgetexp%.x %1, %0" : "=f" (__exponent) : "f" (__value));
-  __asm("fgetman%.x %1, %0" : "=f" (__mantissa) : "f" (__value));
-  *__expptr = (int) __exponent;
-  return __mantissa;
-}
-
-__m81_defun (long double, __floorl, (long double __x))
-{
-  long double __result;
-  unsigned long int __ctrl_reg;
-  __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));
-  /* Set rounding towards negative infinity.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */ 
-		      : "dmi" ((__ctrl_reg & ~0x10) | 0x20));
-  /* Convert X to an integer, using -Inf rounding.  */
-  __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));
-  /* Restore the previous rounding mode.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */
-		      : "dmi" (__ctrl_reg));
-  return __result;
-}
-
-__m81_defun (long double, __ieee754_powl, (long double __x, long double __y))
-{
-  long double __result;
-  if (__x == 0.0l)
-    {
-      if (__y <= 0.0l)
-	__result = 0.0l / 0.0l;
-      else
-	__result = 0.0l;
-    }
-  else if (__y == 0.0l || __x == 1.0l)
-    __result = 1.0;
-  else if (__y == 1.0l)
-    __result = __x;
-  else if (__y == 2.0l)
-    __result = __x * __x;
-  else if (__x == 10.0l)
-    __asm("ftentox%.x %1, %0" : "=f" (__result) : "f" (__y));
-  else if (__x == 2.0l)
-    __asm("ftwotox%.x %1, %0" : "=f" (__result) : "f" (__y));
-  else if (__x < 0.0l)
-    {
-      long double __temp = __m81_u(__rintl)(__y);
-      if (__y == __temp)
-	{
-	  int i = (int) __y;
-	  __result
-	    = __m81_u(__ieee754_expl)(__y * __m81_u(__ieee754_logl)(-__x));
-	  if (i & 1)
-	    __result = -__result;
-	}
-      else
-	__result = 0.0l / 0.0l;
-    }
-  else
-    __result = __m81_u(__ieee754_expl)(__y * __m81_u(__ieee754_logl)(__x));
-  return __result;
-}
-
-__m81_defun (long double, __ceill, (long double __x))
-{
-  long double __result;
-  unsigned long int __ctrl_reg;
-  __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));
-  /* Set rounding towards positive infinity.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */
-		      : "dmi" (__ctrl_reg | 0x30));
-  /* Convert X to an integer, using +Inf rounding.  */
-  __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));
-  /* Restore the previous rounding mode.  */
-  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */
-		      : "dmi" (__ctrl_reg));
-  return __result;
-}
-
-__m81_inline long double
-__m81_u(__modfl)(long double __value, long double *__iptr)
-{
-  long double __modf_int;
-  __asm ("fintrz%.x %1, %0" : "=f" (__modf_int) : "f" (__value));
-  *__iptr = __modf_int;
-  return __value - __modf_int;
-}
-
-__m81_defun (int, __isinfl, (long double __value))
-{
-  /* There is no branch-condition for infinity,
-     so we must extract and examine the condition codes manually.  */
-  unsigned long int __fpsr;
-  __asm("ftst%.x %1\n"
-	"fmove%.l %/fpsr, %0" : "=dm" (__fpsr) : "f" (__value));
-  return (__fpsr & (2 << 24)) ? (__fpsr & (8 << 24) ? -1 : 1) : 0;
-}
-
-__m81_defun (int, __isnanl, (long double __value))
-{
-  char __result;
-  __asm("ftst%.x %1\n"
-	"fsun %0" : "=dm" (__result) : "f" (__value));
-  return __result;
-}
-
-__m81_defun (int, __finitel, (long double __value))
-{
-  /* There is no branch-condition for infinity, so we must extract and
-     examine the condition codes manually.  */
-  unsigned long int __fpsr;
-  __asm ("ftst%.x %1\n"
-	 "fmove%.l %/fpsr, %0" : "=dm" (__fpsr) : "f" (__value));
-  return (__fpsr & (3 << 24)) == 0;
-}
-
-__m81_defun (int, __ilogbl, (long double __x))
-{
-  long double __result;
-  __asm("fgetexp%.x %1, %0" : "=f" (__result) : "f" (__x));
-  return (int) __result;
-}
-
-__m81_defun (long double, __ieee754_scalbl, (long double __x, long double __n))
-{
-  long double __result;
-  __asm ("fscale%.x %1, %0" : "=f" (__result) : "f" (__n), "0" (__x));
-  return __result;
-}
-
-__m81_defun (long double, __scalbnl, (long double __x, int __n))
-{
-  long double __result;
-  long double __float_n = (long double) __n;
-  __asm ("fscale%.x %1, %0" : "=f" (__result) : "f" (__float_n), "0" (__x));
-  return __result;
-}
+/* This macro contains the definition for the rest of the inline
+   functions, using __FLOAT_TYPE as the domain type and __S as the suffix
+   for the function names.  */
+
+#define __inline_functions(__float_type, __s)				     \
+__m81_defun (__float_type,						     \
+	     __ieee754_remainder##__s, (__float_type __x, __float_type __y)) \
+{									     \
+  __float_type __result;						     \
+  __asm("frem%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));	     \
+  return __result;							     \
+}									     \
+									     \
+__m81_defun (__float_type,						     \
+	     __ieee754_fmod##__s, (__float_type __x, __float_type __y))	     \
+{									     \
+  __float_type __result;						     \
+  __asm("fmod%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x));	     \
+  return __result;							     \
+}									     \
+									     \
+__m81_defun (__float_type,						     \
+	     __ieee754_atan2##__s, (__float_type __y, __float_type __x))     \
+{									     \
+  __float_type __pi, __pi_2;						     \
+									     \
+  __asm ("fmovecr%.x %#0, %0" : "=f" (__pi));				     \
+  __asm ("fscale%.w %#-1, %0" : "=f" (__pi_2) : "0" (__pi));		     \
+  if (__x > 0)								     \
+    {									     \
+      if (__y > 0)							     \
+	{								     \
+	  if (__x > __y)						     \
+	    return __m81_u(__atan##__s) (__y / __x);			     \
+	  else								     \
+	    return __pi_2 - __m81_u(__atan##__s) (__x / __y);		     \
+	}								     \
+      else								     \
+	{								     \
+	  if (__x > -__y)						     \
+	    return __m81_u(__atan##__s) (__y / __x);			     \
+	  else								     \
+	    return -__pi_2 - __m81_u(__atan##__s) (__x / __y);		     \
+	}								     \
+    }									     \
+  else									     \
+    {									     \
+      if (__y > 0)							     \
+	{								     \
+	  if (-__x < __y)						     \
+	    return __pi + __m81_u(__atan##__s) (__y / __x);		     \
+	  else								     \
+	    return __pi_2 - __m81_u(__atan##__s) (__x / __y);		     \
+	}								     \
+      else								     \
+	{								     \
+	  if (-__x > -__y)						     \
+	    return -__pi + __m81_u(__atan##__s) (__y / __x);		     \
+	  else								     \
+	    return -__pi_2 - __m81_u(__atan##__s) (__x / __y);		     \
+	}								     \
+    }									     \
+}									     \
+									     \
+__m81_inline __float_type						     \
+__m81_u(__frexp##__s)(__float_type __value, int *__expptr)		     \
+{									     \
+  __float_type __mantissa, __exponent;					     \
+  int __iexponent;							     \
+  if (__value == 0.0)							     \
+    {									     \
+      *__expptr = 0;							     \
+      return __value;							     \
+    }									     \
+  __asm("fgetexp%.x %1, %0" : "=f" (__exponent) : "f" (__value));	     \
+  __iexponent = (int) __exponent + 1;					     \
+  *__expptr = __iexponent;						     \
+  __asm("fscale%.l %2, %0" : "=f" (__mantissa)				     \
+	: "0" (__value), "dmi" (-__iexponent));				     \
+  return __mantissa;							     \
+}									     \
+									     \
+__m81_defun (__float_type, __floor##__s, (__float_type __x))		     \
+{									     \
+  __float_type __result;						     \
+  unsigned long int __ctrl_reg;						     \
+  __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));		     \
+  /* Set rounding towards negative infinity.  */			     \
+  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */ 		     \
+		      : "dmi" ((__ctrl_reg & ~0x10) | 0x20));		     \
+  /* Convert X to an integer, using -Inf rounding.  */			     \
+  __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));	     \
+  /* Restore the previous rounding mode.  */				     \
+  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */		     \
+		      : "dmi" (__ctrl_reg));				     \
+  return __result;							     \
+}									     \
+									     \
+__m81_defun (__float_type,						     \
+	     __ieee754_pow##__s, (__float_type __x, __float_type __y))	     \
+{									     \
+  __float_type __result;						     \
+  if (__x == 0.0)							     \
+    {									     \
+      if (__y <= 0.0)							     \
+	__result = 0.0 / 0.0;						     \
+      else								     \
+	__result = 0.0;							     \
+    }									     \
+  else if (__y == 0.0 || __x == 1.0)					     \
+    __result = 1.0;							     \
+  else if (__y == 1.0)							     \
+    __result = __x;							     \
+  else if (__y == 2.0)							     \
+    __result = __x * __x;						     \
+  else if (__x == 10.0)							     \
+    __asm("ftentox%.x %1, %0" : "=f" (__result) : "f" (__y));		     \
+  else if (__x == 2.0)							     \
+    __asm("ftwotox%.x %1, %0" : "=f" (__result) : "f" (__y));		     \
+  else if (__x < 0.0)							     \
+    {									     \
+      __float_type __temp = __m81_u (__rint##__s) (__y);		     \
+      if (__y == __temp)						     \
+	{								     \
+	  int __i = (int) __y;						     \
+	  __result = (__m81_u(__ieee754_exp##__s)			     \
+		      (__y * __m81_u(__ieee754_log##__s) (-__x)));	     \
+	  if (__i & 1)							     \
+	    __result = -__result;					     \
+	}								     \
+      else								     \
+	__result = 0.0 / 0.0;						     \
+    }									     \
+  else									     \
+    __result = (__m81_u(__ieee754_exp##__s)				     \
+		(__y * __m81_u(__ieee754_log##__s) (__x)));		     \
+  return __result;							     \
+}									     \
+									     \
+__m81_defun (__float_type, __ceil##__s, (__float_type __x))		     \
+{									     \
+  __float_type __result;						     \
+  unsigned long int __ctrl_reg;						     \
+  __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg));		     \
+  /* Set rounding towards positive infinity.  */			     \
+  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */		     \
+		      : "dmi" (__ctrl_reg | 0x30));			     \
+  /* Convert X to an integer, using +Inf rounding.  */			     \
+  __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x));	     \
+  /* Restore the previous rounding mode.  */				     \
+  __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs.  */		     \
+		      : "dmi" (__ctrl_reg));				     \
+  return __result;							     \
+}									     \
+									     \
+__m81_inline __float_type						     \
+__m81_u(__modf##__s)(__float_type __value, __float_type *__iptr)	     \
+{									     \
+  __float_type __modf_int;						     \
+  __asm ("fintrz%.x %1, %0" : "=f" (__modf_int) : "f" (__value));	     \
+  *__iptr = __modf_int;							     \
+  return __value - __modf_int;						     \
+}									     \
+									     \
+__m81_defun (int, __isinf##__s, (__float_type __value))			     \
+{									     \
+  /* There is no branch-condition for infinity,				     \
+     so we must extract and examine the condition codes manually.  */	     \
+  unsigned long int __fpsr;						     \
+  __asm("ftst%.x %1\n"							     \
+	"fmove%.l %/fpsr, %0" : "=dm" (__fpsr) : "f" (__value));	     \
+  return (__fpsr & (2 << 24)) ? (__fpsr & (8 << 24) ? -1 : 1) : 0;	     \
+}									     \
+									     \
+__m81_defun (int, __isnan##__s, (__float_type __value))			     \
+{									     \
+  char __result;							     \
+  __asm("ftst%.x %1\n"							     \
+	"fsun %0" : "=dm" (__result) : "f" (__value));			     \
+  return __result;							     \
+}									     \
+									     \
+__m81_defun (int, __finite##__s, (__float_type __value))		     \
+{									     \
+  /* There is no branch-condition for infinity, so we must extract and	     \
+     examine the condition codes manually.  */				     \
+  unsigned long int __fpsr;						     \
+  __asm ("ftst%.x %1\n"							     \
+	 "fmove%.l %/fpsr, %0" : "=dm" (__fpsr) : "f" (__value));	     \
+  return (__fpsr & (3 << 24)) == 0;					     \
+}									     \
+									     \
+__m81_defun (int, __ilogb##__s, (__float_type __x))			     \
+{									     \
+  __float_type __result;						     \
+  if (__x == 0.0)							     \
+    return 0x80000001;							     \
+  __asm("fgetexp%.x %1, %0" : "=f" (__result) : "f" (__x));		     \
+  return (int) __result;						     \
+}									     \
+									     \
+__m81_defun (__float_type,						     \
+	     __ieee754_scalb##__s, (__float_type __x, __float_type __n))     \
+{									     \
+  __float_type __result;						     \
+  __asm ("fscale%.x %1, %0" : "=f" (__result) : "f" (__n), "0" (__x));	     \
+  return __result;							     \
+}									     \
+									     \
+__m81_defun (__float_type, __scalbn##__s, (__float_type __x, int __n))	     \
+{									     \
+  __float_type __result;						     \
+  __asm ("fscale%.l %1, %0" : "=f" (__result) : "dmi" (__n), "0" (__x));     \
+  return __result;							     \
+}
+
+/* This defines the three variants of the inline functions.  */
+__inline_functions (double, )
+__inline_functions (float, f)
+__inline_functions (long double, l)
+#undef __inline_functions
 
 #endif	/* GCC.  */
diff --git a/sysdeps/m68k/fpu/s_ldexp.c b/sysdeps/m68k/fpu/s_ldexp.c
deleted file mode 100644
index 18f4d43c37..0000000000
--- a/sysdeps/m68k/fpu/s_ldexp.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* 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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include <ansidecl.h>
-#define __NO_M81_MATH_INLINES
-#include <math.h>
-
-#ifndef FUNC
-#define FUNC ldexp
-#endif
-#ifndef float_type
-#define float_type double
-#endif
-
-#define __CONCATX(a,b) __CONCAT(a,b)
-
-float_type
-DEFUN(__CONCATX(__,FUNC), (x, exp), float_type x AND int exp)
-{
-  return __m81_u(__CONCATX(__,FUNC))(x, exp);
-}
-
-#define weak_aliasx(a,b) weak_alias(a,b)
-weak_aliasx (__CONCATX(__,FUNC), FUNC)
diff --git a/sysdeps/m68k/fpu/s_ldexpf.c b/sysdeps/m68k/fpu/s_ldexpf.c
deleted file mode 100644
index 81a6b28acc..0000000000
--- a/sysdeps/m68k/fpu/s_ldexpf.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#ifndef FUNC
-#define FUNC ldexpf
-#endif
-#define float_type float
-#include <s_ldexp.c>
diff --git a/sysdeps/m68k/fpu/s_ldexpl.c b/sysdeps/m68k/fpu/s_ldexpl.c
deleted file mode 100644
index 25796b75f4..0000000000
--- a/sysdeps/m68k/fpu/s_ldexpl.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#ifndef FUNC
-#define FUNC ldexpl
-#endif
-#define float_type long double
-#include <s_ldexp.c>
diff --git a/sysdeps/m68k/fpu/s_scalbn.c b/sysdeps/m68k/fpu/s_scalbn.c
index 433aa757d2..4039bba652 100644
--- a/sysdeps/m68k/fpu/s_scalbn.c
+++ b/sysdeps/m68k/fpu/s_scalbn.c
@@ -1,2 +1,40 @@
+/* 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., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#define __NO_M81_MATH_INLINES
+#include <math.h>
+
+#ifndef FUNC
 #define FUNC scalbn
 #include <s_ldexp.c>
+#endif
+#ifndef float_type
+#define float_type double
+#endif
+
+#define __CONCATX(a,b) __CONCAT(a,b)
+
+float_type
+DEFUN(__CONCATX(__,FUNC), (x, exp), float_type x AND int exp)
+{
+  return __m81_u(__CONCATX(__,FUNC))(x, exp);
+}
+
+#define weak_aliasx(a,b) weak_alias(a,b)
+weak_aliasx (__CONCATX(__,FUNC), FUNC)
diff --git a/sysdeps/m68k/fpu/s_scalbnf.c b/sysdeps/m68k/fpu/s_scalbnf.c
index 00461dc30c..55d64fd502 100644
--- a/sysdeps/m68k/fpu/s_scalbnf.c
+++ b/sysdeps/m68k/fpu/s_scalbnf.c
@@ -1,2 +1,6 @@
+#ifndef FUNC
 #define FUNC scalbnf
 #include <s_ldexpf.c>
+#endif
+#define float_type float
+#include <s_scalbn.c>
diff --git a/sysdeps/m68k/fpu/s_scalbnl.c b/sysdeps/m68k/fpu/s_scalbnl.c
index 83e8bfefc1..84849921dc 100644
--- a/sysdeps/m68k/fpu/s_scalbnl.c
+++ b/sysdeps/m68k/fpu/s_scalbnl.c
@@ -1,2 +1,6 @@
+#ifndef FUNC
 #define FUNC scalbnl
 #include <s_ldexpl.c>
+#endif
+#define float_type long double
+#include <s_scalbn.c>
diff --git a/sysdeps/posix/cuserid.c b/sysdeps/posix/cuserid.c
index b874e909ce..2fe535ea1d 100644
--- a/sysdeps/posix/cuserid.c
+++ b/sysdeps/posix/cuserid.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 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
@@ -16,22 +16,19 @@ 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.  */
 
-#include <ansidecl.h>
 #include <stdio.h>
 #include <string.h>
 #include <pwd.h>
 
-extern int EXFUN(geteuid, (NOARGS));
-
-
 /* Return the username of the caller.
    If S is not NULL, it points to a buffer of at least L_cuserid bytes
    into which the name is copied; otherwise, a static buffer is used.  */
 char *
-DEFUN(cuserid, (s), char *s)
+cuserid (s)
+     char *s;
 {
   static char name[L_cuserid];
-  struct passwd *pwent = getpwuid(geteuid());
+  struct passwd *pwent = getpwuid (geteuid ());
 
   if (pwent == NULL)
     {
@@ -42,5 +39,5 @@ DEFUN(cuserid, (s), char *s)
 
   if (s == NULL)
     s = name;
-  return strcpy(s, pwent->pw_name);
+  return strcpy (s, pwent->pw_name);
 }
diff --git a/sysdeps/posix/gettimeofday.c b/sysdeps/posix/gettimeofday.c
index c3b8108258..3c079a5af2 100644
--- a/sysdeps/posix/gettimeofday.c
+++ b/sysdeps/posix/gettimeofday.c
@@ -56,7 +56,7 @@ __gettimeofday (tv, tz)
       save_tzname[0] = __tzname[0];
       save_tzname[1] = __tzname[1];
 
-      tmp = localtime (&timer, &tm);
+      tmp = localtime_r (&timer, &tm);
 
       tz->tz_minuteswest = __timezone / 60;
       tz->tz_dsttime = __daylight;
diff --git a/sysdeps/stub/fpu_control.h b/sysdeps/stub/fpu_control.h
index 65f58824ae..832c15aac9 100644
--- a/sysdeps/stub/fpu_control.h
+++ b/sysdeps/stub/fpu_control.h
@@ -43,4 +43,4 @@ extern void __setfpucw __P ((fpu_control_t));
 
 __END_DECLS
 
-#endif /* _M68K_FPU_CONTROL_H */
+#endif /* _FPU_CONTROL_H */
diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.S b/sysdeps/unix/sysv/linux/i386/sysdep.S
index 7d5444d6a6..0f3e31dbce 100644
--- a/sysdeps/unix/sysv/linux/i386/sysdep.S
+++ b/sysdeps/unix/sysv/linux/i386/sysdep.S
@@ -16,6 +16,8 @@ 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.  */
 
+#include <sysdep.h>
+
 /* Because the Linux version is in fact i386/ELF and the start.? file
    for this system (sysdeps/i386/elf/start.S) is also used by The Hurd
    and therefore this files must not contain the definition of the
@@ -43,9 +45,7 @@ _errno = errno	/* This name is expected by hj libc.so.5 startup code.  */
    The code for Linux is almost identical to the canonical Unix/i386
    code, except that the error number in %eax is negated.  */
 
-	.globl	__syscall_error
-	.type	__syscall_error,@function
-__syscall_error:
+ENTRY (__syscall_error)
 	negl %eax
 
 #define __syscall_error __syscall_error_1
@@ -54,10 +54,7 @@ __syscall_error:
 #endif	/* !PIC */
 
 
-#ifdef	_LIBC_REENTRANT
-	.globl	__errno_location
-	.type	__errno_location,@function
-__errno_location:
+ENTRY (__errno_location)
 #ifdef PIC
 	call .L2
 .L2:	popl %ecx
@@ -69,4 +66,3 @@ __errno_location:
 	ret
 .Lfe1:
 	.size	__errno_location, .Lfe1-__errno_location
-#endif
diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h
index 96470a19b9..cbd7b5553b 100644
--- a/sysdeps/unix/sysv/linux/i386/sysdep.h
+++ b/sysdeps/unix/sysv/linux/i386/sysdep.h
@@ -17,6 +17,9 @@ 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.  */
 
+#ifndef _LINUX_I386_SYSDEP_H
+#define _LINUX_I386_SYSDEP_H 1
+
 /* There is some commonality.  */
 #include <sysdeps/unix/i386/sysdep.h>
 
@@ -179,3 +182,5 @@ syscall_error:								      \
 #define _POPARGS_5	_POPARGS_4; popl %edi
 
 #endif	/* ASSEMBLER */
+
+#endif /* linux/i386/sysdep.h */
diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep.S b/sysdeps/unix/sysv/linux/m68k/sysdep.S
index 674715f824..b47e167159 100644
--- a/sysdeps/unix/sysv/linux/m68k/sysdep.S
+++ b/sysdeps/unix/sysv/linux/m68k/sysdep.S
@@ -62,7 +62,6 @@ __syscall_error:
 	.size	__syscall_error, . - __syscall_error
 #endif /* PIC */
 
-#ifdef	_LIBC_REENTRANT
 	.globl	__errno_location
 	.type	__errno_location, @function
 __errno_location:
@@ -73,4 +72,3 @@ __errno_location:
 #endif
 	rts
 	.size	__errno_location, . - __errno_location
-#endif
diff --git a/time/mktime.c b/time/mktime.c
index c3c539526a..7fa5ccb23a 100644
--- a/time/mktime.c
+++ b/time/mktime.c
@@ -133,11 +133,19 @@ ydhms_tm_diff (year, yday, hour, min, sec, tp)
      int year, yday, hour, min, sec;
      const struct tm *tp;
 {
-  time_t ay = year + (time_t) (TM_YEAR_BASE - 1);
-  time_t by = tp->tm_year + (time_t) (TM_YEAR_BASE - 1);
-  time_t intervening_leap_days =
-    (ay/4 - by/4) - (ay/100 - by/100) + (ay/400 - by/400);
-  time_t years = ay - by;
+  /* Compute intervening leap days correctly even if year is negative.
+     Take care to avoid int overflow.  time_t overflow is OK, since
+     only the low order bits of the correct time_t answer are needed.
+     Don't convert to time_t until after all divisions are done, since
+     time_t might be unsigned.  */
+  int a4 = (year >> 2) + (TM_YEAR_BASE >> 2) - ! (year & 3);
+  int b4 = (tp->tm_year >> 2) + (TM_YEAR_BASE >> 2) - ! (tp->tm_year & 3);
+  int a100 = a4 / 25 - (a4 % 25 < 0);
+  int b100 = b4 / 25 - (b4 % 25 < 0);
+  int a400 = a100 >> 2;
+  int b400 = b100 >> 2;
+  int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400);
+  time_t years = year - (time_t) tp->tm_year;
   time_t days = (365 * years + intervening_leap_days
 		 + (yday - tp->tm_yday));
   return (60 * (60 * (24 * days + (hour - tp->tm_hour))
diff --git a/time/strftime.c b/time/strftime.c
index 866a28065d..7837373aed 100644
--- a/time/strftime.c
+++ b/time/strftime.c
@@ -23,8 +23,10 @@ Cambridge, MA 02139, USA.  */
 #ifdef _LIBC
 # define HAVE_LIMITS_H 1
 # define HAVE_MBLEN 1
+# define HAVE_MBRLEN 1
 # define HAVE_TM_GMTOFF 1
 # define HAVE_TM_ZONE 1
+# define MULTIBYTE_IS_FORMAT_SAFE 1
 # define STDC_HEADERS 1
 # include <ansidecl.h>
 # include "../locale/localeinfo.h"
@@ -43,8 +45,24 @@ Cambridge, MA 02139, USA.  */
 # endif
 #endif
 
-#if HAVE_MBLEN
-# include <ctype.h>
+/* Do multibyte processing if multibytes are supported, unless
+   multibyte sequences are safe in formats.  Multibyte sequences are
+   safe if they cannot contain byte sequences that look like format
+   conversion specifications.  The GNU C Library uses UTF8 multibyte
+   encoding, which is safe for formats, but strftime.c can be used
+   with other C libraries that use unsafe encodings.  */
+#define DO_MULTIBYTE (HAVE_MBLEN && ! MULTIBYTE_IS_FORMAT_SAFE)
+
+#if DO_MULTIBYTE
+# if HAVE_MBRLEN
+#  include <wchar.h>
+# else
+   /* Simulate mbrlen with mblen as best we can.  */
+#  define mbstate_t int
+#  define mbrlen(s, n, ps) mblen (s, n)
+#  define mbsinit(ps) (*(ps) == 0)
+# endif
+  static const mbstate_t mbstate_zero;
 #endif
 
 #if HAVE_LIMITS_H
@@ -91,6 +109,13 @@ Cambridge, MA 02139, USA.  */
 
 #define TM_YEAR_BASE 1900
 
+#ifndef __isleap
+/* Nonzero if YEAR is a leap year (every 4 years,
+   except every 100th isn't, and every 400th is).  */
+#define __isleap(year)	\
+  ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0))
+#endif
+
 
 #ifdef _LIBC
 # define gmtime_r __gmtime_r
@@ -132,9 +157,6 @@ localtime_r (t, tp)
 #endif /* ! defined (_LIBC) */
 
 
-static unsigned int week __P ((const struct tm *const, int, int));
-
-
 #define	add(n, f)							      \
   do									      \
     {									      \
@@ -159,14 +181,17 @@ tm_diff (a, b)
      const struct tm *a;
      const struct tm *b;
 {
-  int ay = a->tm_year + TM_YEAR_BASE - 1;
-  int by = b->tm_year + TM_YEAR_BASE - 1;
-  /* Divide years by 100, rounding towards minus infinity.  */
-  int ac = ay / 100 - (ay % 100 < 0);
-  int bc = by / 100 - (by % 100 < 0);
-  int intervening_leap_days =
-    ((ay >> 2) - (by >> 2)) - (ac - bc) + ((ac >> 2) - (bc >> 2));
-  int years = ay - by;
+  /* Compute intervening leap days correctly even if year is negative.
+     Take care to avoid int overflow in leap day calculations,
+     but it's OK to assume that A and B are close to each other.  */
+  int a4 = (a->tm_year >> 2) + (TM_YEAR_BASE >> 2) - ! (a->tm_year & 3);
+  int b4 = (b->tm_year >> 2) + (TM_YEAR_BASE >> 2) - ! (b->tm_year & 3);
+  int a100 = a4 / 25 - (a4 % 25 < 0);
+  int b100 = b4 / 25 - (b4 % 25 < 0);
+  int a400 = a100 >> 2;
+  int b400 = b100 >> 2;
+  int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400);
+  int years = a->tm_year - b->tm_year;
   int days = (365 * years + intervening_leap_days
 	      + (a->tm_yday - b->tm_yday));
   return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour))
@@ -177,45 +202,30 @@ tm_diff (a, b)
 
 
 
-/* Return the week in the year specified by TP,
-   with weeks starting on STARTING_DAY.  */
-#ifdef	__GNUC__
+/* The number of days from the first day of the first ISO week of this
+   year to the year day YDAY with week day WDAY.  ISO weeks start on
+   Monday; the first ISO week has the year's first Thursday.  YDAY may
+   be as small as YDAY_MINIMUM.  */
+#define ISO_WEEK_START_WDAY 1 /* Monday */
+#define ISO_WEEK1_WDAY 4 /* Thursday */
+#define YDAY_MINIMUM (-366)
+static int iso_week_days __P ((int, int));
+#ifdef __GNUC__
 inline
 #endif
-static unsigned int
-week (tp, starting_day, max_preceding)
-      const struct tm *const tp;
-      int starting_day;
-      int max_preceding;
+static int
+iso_week_days (yday, wday)
+     int yday;
+     int wday;
 {
-  int wday, dl, base;
-
-  wday = tp->tm_wday - starting_day;
-  if (wday < 0)
-    wday += 7;
-
-  /* Set DL to the day in the year of the first day of the week
-     containing the day specified in TP.  */
-  dl = tp->tm_yday - wday;
-
-  /* For the computation following ISO 8601:1988 we set the number of
-     the week containing January 1st to 1 if this week has more than
-     MAX_PRECEDING days in the new year.  For ISO 8601 this number is
-     3, for the other representation it is 7 (i.e., not to be
-     fulfilled).  */
-  base = ((dl + 7) % 7) > max_preceding ? 1 : 0;
-
-  /* If DL is negative we compute the result as 0 unless we have to
-     compute it according ISO 8601.  In this case we have to return 53
-     or 1 if the week containing January 1st has less than 4 days in
-     the new year or not.  If DL is not negative we calculate the
-     number of complete weeks for our week (DL / 7) plus 1 (because
-     only for DL < 0 we are in week 0/53 and plus the number of the
-     first week computed in the last step.  */
-  return dl < 0 ? (dl < -max_preceding ? 53 : base)
-		: base + 1 + dl / 7;
+  /* Add enough to the first operand of % to make it nonnegative.  */
+  int big_enough_multiple_of_7 = (-YDAY_MINIMUM / 7 + 2) * 7;
+  return (yday
+	  - (yday - wday + ISO_WEEK1_WDAY + big_enough_multiple_of_7) % 7
+	  + ISO_WEEK1_WDAY - ISO_WEEK_START_WDAY);
 }
 
+
 #ifndef _NL_CURRENT
 static char const weekday_name[][10] =
   {
@@ -254,8 +264,8 @@ strftime (s, maxsize, format, tp)
   size_t am_len = strlen(a_month);
   size_t ap_len = strlen (ampm);
 
-  const char * const*alt_digits = &_NL_CURRENT (LC_TIME, ALT_DIGITS);
-  int nr_alt_digits = (_NL_CURRENT (LC_TIME, ALT_DIGITS + 1) - *alt_digits);
+  const char *alt_digits = _NL_CURRENT (LC_TIME, ALT_DIGITS);
+  const char *end_alt_digits = _NL_CURRENT (LC_TIME, ALT_DIGITS + 1);
 #else
   const char *const f_wkday = weekday_name[tp->tm_wday];
   const char *const f_month = month_name[tp->tm_mon];
@@ -268,9 +278,6 @@ strftime (s, maxsize, format, tp)
 #endif
   size_t wkday_len = strlen (f_wkday);
   size_t month_len = strlen (f_month);
-  const unsigned int y_week0 = week (tp, 0, 7);
-  const unsigned int y_week1 = week (tp, 1, 7);
-  const unsigned int y_week2 = week (tp, 1, 3);
   const char *zone;
   size_t zonelen;
   register size_t i = 0;
@@ -285,8 +292,8 @@ strftime (s, maxsize, format, tp)
   if (!(zone && *zone) && tp->tm_isdst >= 0)
     zone = tzname[tp->tm_isdst];
 #endif
-  if (!(zone && *zone))
-    zone = "???";
+  if (! zone)
+    zone = "";		/* POSIX.2 requires the empty string here.  */
 
   zonelen = strlen (zone);
 
@@ -297,50 +304,101 @@ strftime (s, maxsize, format, tp)
 
   for (f = format; *f != '\0'; ++f)
     {
-      enum { pad_zero, pad_space, pad_none } pad; /* Padding for number.  */
-      unsigned int digits;	/* Max digits for numeric format.  */
-      unsigned int number_value; /* Numeric value to be printed.  */
+      int pad;			/* Padding for number ('-', '_', or 0).  */
+      int modifier;		/* Field modifier ('E', 'O', or 0).  */
+      int digits;		/* Max digits for numeric format.  */
+      int number_value; 	/* Numeric value to be printed.  */
       int negative_number;	/* 1 if the number is negative.  */
-      const char *subfmt = "";
-      enum { none, alternate, era } modifier;
+      const char *subfmt;
       char *bufp;
       char buf[1 + (sizeof (int) < sizeof (time_t)
 		    ? INT_STRLEN_BOUND (time_t)
 		    : INT_STRLEN_BOUND (int))];
 
-#if HAVE_MBLEN
-      if (!isascii (*f))
+#if DO_MULTIBYTE
+
+       switch (*f)
 	{
-	  /* Non-ASCII, may be a multibyte.  */
-	  int len = mblen (f, strlen (f));
-	  if (len > 0)
-	    {
-	      cpy(len, f);
-	      continue;
-	    }
+	case '%':
+	  break;
+
+	case '\a': case '\b': case '\t': case '\n':
+	case '\v': case '\f': case '\r':
+	case ' ': case '!': case '"': case '#': case '&': case'\'':
+	case '(': case ')': case '*': case '+': case ',': case '-':
+	case '.': case '/': case '0': case '1': case '2': case '3':
+	case '4': case '5': case '6': case '7': case '8': case '9':
+	case ':': case ';': case '<': case '=': case '>': case '?':
+	case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+	case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+	case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
+	case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+	case 'Y': case 'Z': case '[': case'\\': case ']': case '^':
+	case '_': case 'a': case 'b': case 'c': case 'd': case 'e':
+	case 'f': case 'g': case 'h': case 'i': case 'j': case 'k':
+	case 'l': case 'm': case 'n': case 'o': case 'p': case 'q':
+	case 'r': case 's': case 't': case 'u': case 'v': case 'w':
+	case 'x': case 'y': case 'z': case '{': case '|': case '}':
+	case '~':
+	  /* The C Standard requires these 98 characters (plus '%') to
+	     be in the basic execution character set.  None of these
+	     characters can start a multibyte sequence, so they need
+	     not be analyzed further.  */
+	  add (1, *p = *f);
+	  continue;
+
+	default:
+	  /* Copy this multibyte sequence until we reach its end, find
+	     an error, or come back to the initial shift state.  */
+	  {
+	    mbstate_t mbstate = mbstate_zero;
+	    size_t len = 0;
+
+	    do
+	      {
+		size_t bytes = mbrlen (f + len, (size_t) -1, &mbstate);
+
+		if (bytes == 0)
+		  break;
+
+		if (bytes == (size_t) -2 || bytes == (size_t) -1)
+		  {
+		    len++;
+		    break;
+		  }
+
+		len += bytes;
+	      }
+	    while (! mbsinit (&mbstate));
+
+	    cpy (len, f);
+	    continue;
+	  }
 	}
-#endif
 
+#else /* ! DO_MULTIBYTE */
+
+      /* Either multibyte encodings are not supported, or they are
+	 safe for formats, so any non-'%' byte can be copied through.  */
       if (*f != '%')
 	{
 	  add (1, *p = *f);
 	  continue;
 	}
 
+#endif /* ! DO_MULTIBYTE */
+
       /* Check for flags that can modify a number format.  */
       ++f;
       switch (*f)
 	{
 	case '_':
-	  pad = pad_space;
-	  ++f;
-	  break;
 	case '-':
-	  pad = pad_none;
-	  ++f;
+	  pad = *f++;
 	  break;
+
 	default:
-	  pad = pad_zero;
+	  pad = 0;
 	  break;
 	}
 
@@ -348,15 +406,12 @@ strftime (s, maxsize, format, tp)
       switch (*f)
 	{
 	case 'E':
-	  ++f;
-	  modifier = era;
-	  break;
 	case 'O':
-	  ++f;
-	  modifier = alternate;
+	  modifier = *f++;
 	  break;
+
 	default:
-	  modifier = none;
+	  modifier = 0;
 	  break;
 	}
 
@@ -372,43 +427,42 @@ strftime (s, maxsize, format, tp)
 	    --f;
 	    /* Fall through.  */
 	case '%':
-	  if (modifier != none)
+	  if (modifier != 0)
 	    goto bad_format;
 	  add (1, *p = *f);
 	  break;
 
 	case 'a':
-	  if (modifier != none)
+	  if (modifier != 0)
 	    goto bad_format;
 	  cpy (aw_len, a_wkday);
 	  break;
 
 	case 'A':
-	  if (modifier != none)
+	  if (modifier != 0)
 	    goto bad_format;
 	  cpy (wkday_len, f_wkday);
 	  break;
 
 	case 'b':
-	case 'h':		/* GNU extension.  */
-	  if (modifier != none)
+	case 'h':		/* POSIX.2 extension.  */
+	  if (modifier != 0)
 	    goto bad_format;
 	  cpy (am_len, a_month);
 	  break;
 
 	case 'B':
-	  if (modifier != none)
+	  if (modifier != 0)
 	    goto bad_format;
 	  cpy (month_len, f_month);
 	  break;
 
 	case 'c':
-	  if (modifier == alternate)
+	  if (modifier == 'O')
 	    goto bad_format;
 #ifdef _NL_CURRENT
-	  if (modifier == era)
-	    subfmt = _NL_CURRENT (LC_TIME, ERA_D_T_FMT);
-	  if (*subfmt == '\0')
+	  if (! (modifier == 'E'
+		 && *(subfmt = _NL_CURRENT (LC_TIME, ERA_D_T_FMT)) != '\0'))
 	    subfmt = _NL_CURRENT (LC_TIME, D_T_FMT);
 #else
 	  subfmt = "%a %b %e %H:%M:%S %Z %Y";
@@ -423,40 +477,41 @@ strftime (s, maxsize, format, tp)
 	  }
 	  break;
 
-	case 'C':
-	  if (modifier == alternate)
+	case 'C':		/* POSIX.2 extension.  */
+	  if (modifier == 'O')
 	    goto bad_format;
 #ifdef _NL_CURRENT
-	  /* XXX I'm not sure about this.  --drepper@gnu */
-	  if (modifier == era &&
-	      *(subfmt = _NL_CURRENT (LC_TIME, ERA)) != '\0')
-	    goto subformat;
+	  /* XXX %EC is not implemented yet.  */
 #endif
-	  DO_NUMBER (2, (1900 + tp->tm_year) / 100);
+	  {
+	    int year = tp->tm_year + TM_YEAR_BASE;
+	    DO_NUMBER (1, year / 100 - (year % 100 < 0));
+	  }
 
 	case 'x':
-	  if (modifier == alternate)
+	  if (modifier == 'O')
 	    goto bad_format;
 #ifdef _NL_CURRENT
-	  if (modifier == era)
-	    subfmt = _NL_CURRENT (LC_TIME, ERA_D_FMT);
-	  if (*subfmt == '\0')
+	  if (! (modifier == 'E'
+		 && *(subfmt = _NL_CURRENT (LC_TIME, ERA_D_FMT)) != '\0'))
 	    subfmt = _NL_CURRENT (LC_TIME, D_FMT);
 	  goto subformat;
 #endif
 	  /* Fall through.  */
-	case 'D':		/* GNU extension.  */
+	case 'D':		/* POSIX.2 extension.  */
+	  if (modifier != 0)
+	    goto bad_format;
 	  subfmt = "%m/%d/%y";
 	  goto subformat;
 
 	case 'd':
-	  if (modifier == era)
+	  if (modifier == 'E')
 	    goto bad_format;
 
 	  DO_NUMBER (2, tp->tm_mday);
 
-	case 'e':		/* GNU extension: %d, but blank-padded.  */
-	  if (modifier == era)
+	case 'e':		/* POSIX.2 extension.  */
+	  if (modifier == 'E')
 	    goto bad_format;
 
 	  DO_NUMBER_SPACEPAD (2, tp->tm_mday);
@@ -466,22 +521,33 @@ strftime (s, maxsize, format, tp)
 
 	do_number_spacepad:
 	  /* Force `_' flag.  */
-	  pad = pad_space;
+	  pad = '_';
 
 	do_number:
 	  /* Format the number according to the MODIFIER flag.  */
 
 #ifdef _NL_CURRENT
-	  if (modifier == alternate && 0 <= number_value
-	      && number_value < (unsigned int) nr_alt_digits)
+	  if (modifier == 'O' && 0 <= number_value)
 	    {
 	      /* ALT_DIGITS is the first entry in an array with
-		 alternative digit symbols.  */
-	      size_t digitlen = strlen (*(alt_digits + number_value));
-	      if (digitlen == 0)
-		break;
-	      cpy (digitlen, *(alt_digits + number_value));
-	      goto done_with_number;
+		 alternative digit symbols.  We have to find string
+		 number NUMBER_VALUE, but must not look beyond
+		 END_ALT_DIGITS.  */
+	      int run = number_value;
+	      const char *cp = alt_digits;
+
+	      while (run-- > 0 && cp < end_alt_digits)
+		cp = strchr (cp, '\0') + 1;
+
+	      if (cp < end_alt_digits)
+		{
+		  size_t digitlen = strlen (cp);
+		  if (digitlen != 0)
+		    {
+		      cpy (digitlen, cp);
+		      break;
+		    }
+		}
 	    }
 #endif
 	  {
@@ -502,11 +568,11 @@ strftime (s, maxsize, format, tp)
 	  if (negative_number)
 	    *--bufp = '-';
 
-	  if (pad != pad_none)
+	  if (pad != '-')
 	    {
 	      int padding = digits - (buf + sizeof (buf) - bufp);
 
-	      if (pad == pad_space)
+	      if (pad == '_')
 		{
 		  while (0 < padding--)
 		    *--bufp = ' ';
@@ -522,56 +588,52 @@ strftime (s, maxsize, format, tp)
 	    }
 
 	  cpy (buf + sizeof (buf) - bufp, bufp);
-
-#ifdef _NL_CURRENT
-	done_with_number:
-#endif
 	  break;
 
 
 	case 'H':
-	  if (modifier == era)
+	  if (modifier == 'E')
 	    goto bad_format;
 
 	  DO_NUMBER (2, tp->tm_hour);
 
 	case 'I':
-	  if (modifier == era)
+	  if (modifier == 'E')
 	    goto bad_format;
 
 	  DO_NUMBER (2, hour12);
 
 	case 'k':		/* GNU extension.  */
-	  if (modifier == era)
+	  if (modifier == 'E')
 	    goto bad_format;
 
 	  DO_NUMBER_SPACEPAD (2, tp->tm_hour);
 
 	case 'l':		/* GNU extension.  */
-	  if (modifier == era)
+	  if (modifier == 'E')
 	    goto bad_format;
 
 	  DO_NUMBER_SPACEPAD (2, hour12);
 
 	case 'j':
-	  if (modifier == era)
+	  if (modifier == 'E')
 	    goto bad_format;
 
 	  DO_NUMBER (3, 1 + tp->tm_yday);
 
 	case 'M':
-	  if (modifier == era)
+	  if (modifier == 'E')
 	    goto bad_format;
 
 	  DO_NUMBER (2, tp->tm_min);
 
 	case 'm':
-	  if (modifier == era)
+	  if (modifier == 'E')
 	    goto bad_format;
 
 	  DO_NUMBER (2, tp->tm_mon + 1);
 
-	case 'n':		/* GNU extension.  */
+	case 'n':		/* POSIX.2 extension.  */
 	  add (1, *p = '\n');
 	  break;
 
@@ -583,13 +645,16 @@ strftime (s, maxsize, format, tp)
 	  subfmt = "%H:%M";
 	  goto subformat;
 
-	case 'r':		/* GNU extension.  */
-	  subfmt = "%I:%M:%S %p";
+	case 'r':		/* POSIX.2 extension.  */
+#ifdef _NL_CURRENT
+	  if (*(subfmt = _NL_CURRENT (LC_TIME, T_FMT_AMPM)) == '\0')
+#endif
+	    subfmt = "%I:%M:%S %p";
 	  goto subformat;
 
 	case 'S':
-	  if (modifier == era)
-	    return 0;
+	  if (modifier == 'E')
+	    goto bad_format;
 
 	  DO_NUMBER (2, tp->tm_sec);
 
@@ -630,67 +695,101 @@ strftime (s, maxsize, format, tp)
 	  }
 
 	case 'X':
-	  if (modifier == alternate)
+	  if (modifier == 'O')
 	    goto bad_format;
 #ifdef _NL_CURRENT
-	  if (modifier == era)
-	    subfmt = _NL_CURRENT (LC_TIME, ERA_T_FMT);
-	  if (*subfmt == '\0')
+	  if (! (modifier == 'E'
+		 && *(subfmt = _NL_CURRENT (LC_TIME, ERA_T_FMT)) != '\0'))
 	    subfmt = _NL_CURRENT (LC_TIME, T_FMT);
 	  goto subformat;
 #endif
 	  /* Fall through.  */
-	case 'T':		/* GNU extension.  */
+	case 'T':		/* POSIX.2 extension.  */
 	  subfmt = "%H:%M:%S";
 	  goto subformat;
 
-	case 't':		/* GNU extension.  */
+	case 't':		/* POSIX.2 extension.  */
 	  add (1, *p = '\t');
 	  break;
 
+	case 'u':		/* POSIX.2 extension.  */
+	  DO_NUMBER (1, (tp->tm_wday - 1 + 7) % 7 + 1);
+
 	case 'U':
-	  if (modifier == era)
+	  if (modifier == 'E')
 	    goto bad_format;
 
-	  DO_NUMBER (2, y_week0);
+	  DO_NUMBER (2, (tp->tm_yday - tp->tm_wday + 7) / 7);
 
 	case 'V':
-	  if (modifier == era)
+	case 'g':		/* GNU extension.  */
+	case 'G':		/* GNU extension.  */
+	  if (modifier == 'E')
 	    goto bad_format;
+	  {
+	    int year = tp->tm_year + TM_YEAR_BASE;
+	    int days = iso_week_days (tp->tm_yday, tp->tm_wday);
+
+	    if (days < 0)
+	      {
+		/* This ISO week belongs to the previous year.  */
+		year--;
+		days = iso_week_days (tp->tm_yday + (365 + __isleap (year)),
+				      tp->tm_wday);
+	      }
+	    else
+	      {
+		int d = iso_week_days (tp->tm_yday - (365 + __isleap (year)),
+				       tp->tm_wday);
+		if (0 <= d)
+		  {
+		    /* This ISO week belongs to the next year.  */
+		    year++;
+		    days = d;
+		  }
+	      }
+
+	    switch (*f)
+	      {
+	      case 'g':
+		DO_NUMBER (2, (year % 100 + 100) % 100);
+
+	      case 'G':
+		DO_NUMBER (1, year);
 
-	  DO_NUMBER (2, y_week2);
+	      default:
+		DO_NUMBER (2, days / 7 + 1);
+	      }
+	  }
 
 	case 'W':
-	  if (modifier == era)
+	  if (modifier == 'E')
 	    goto bad_format;
 
-	  DO_NUMBER (2, y_week1);
+	  DO_NUMBER (2, (tp->tm_yday - (tp->tm_wday - 1 + 7) % 7 + 7) / 7);
 
 	case 'w':
-	  if (modifier == era)
+	  if (modifier == 'E')
 	    goto bad_format;
 
-	  DO_NUMBER (2, tp->tm_wday);
+	  DO_NUMBER (1, tp->tm_wday);
 
 	case 'Y':
 #ifdef _NL_CURRENT
-	  if (modifier == era
+	  if (modifier == 'E'
 	      && *(subfmt = _NL_CURRENT (LC_TIME, ERA_YEAR)) != '\0')
 	    goto subformat;
-	  else
 #endif
-	    if (modifier == alternate)
-	      goto bad_format;
-	    else
-	      DO_NUMBER (4, 1900 + tp->tm_year);
+	  if (modifier == 'O')
+	    goto bad_format;
+	  else
+	    DO_NUMBER (1, tp->tm_year + TM_YEAR_BASE);
 
 	case 'y':
 #ifdef _NL_CURRENT
-	  if (modifier == era
-	      && *(subfmt = _NL_CURRENT (LC_TIME, ERA_YEAR)) != '\0')
-	    goto subformat;
+	  /* XXX %Ey is not implemented yet.  */
 #endif
-	  DO_NUMBER (2, tp->tm_year % 100);
+	  DO_NUMBER (2, (tp->tm_year % 100 + 100) % 100);
 
 	case 'Z':
 	  cpy(zonelen, zone);
@@ -740,26 +839,21 @@ strftime (s, maxsize, format, tp)
 	    else
 	      add (1, *p = '+');
 
-	    pad = pad_zero;
-
 	    diff /= 60;
 	    DO_NUMBER (4, (diff / 60) * 100 + diff % 60);
 	  }
 
 	default:
-	  /* Bad format.  */
+	  /* Unknown format; output the format, including the '%',
+	     since this is most likely the right thing to do if a
+	     multibyte string has been misparsed.  */
 	bad_format:
-	  if (pad == pad_space)
-	    add (1, *p = '_');
-	  else if (pad == pad_zero)
-	    add (1, *p = '0');
-
-	  if (modifier == era)
-	    add (1, *p = 'E');
-	  else if (modifier == alternate)
-	    add (1, *p = 'O');
-
-	  add (1, *p = *f);
+	  {
+	    int flen;
+	    for (flen = 2; f[1 - flen] != '%'; flen++)
+	      continue;
+	    cpy (flen, &f[1 - flen]);
+	  }
 	  break;
 	}
     }