summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog192
-rw-r--r--FAQ.in16
-rw-r--r--Makeconfig3
-rw-r--r--README6
-rw-r--r--README.template13
-rw-r--r--Rules2
-rwxr-xr-xconfigure2
-rw-r--r--db2/makedb.c5
-rw-r--r--dirent/dirent.h8
-rw-r--r--iconvdata/koi8-r.h2
-rw-r--r--iconvdata/latin-greek-1.h2
-rw-r--r--iconvdata/latin-greek.h2
-rw-r--r--libc.map4
-rw-r--r--locale/langinfo.h75
-rw-r--r--locale/programs/charmap.c4
-rw-r--r--locale/programs/charset.c5
-rw-r--r--locale/programs/ld-collate.c12
-rwxr-xr-xlocaledata/configure3
-rw-r--r--manual/arith.texi7
-rw-r--r--manual/mbyte.texi2
-rw-r--r--manual/time.texi2
-rw-r--r--math/libm-test.c100
-rw-r--r--math/test-fenv.c17
-rw-r--r--misc/lsearch.c4
-rw-r--r--nss/db-Makefile5
-rw-r--r--nss/nss_db/db-XXX.c71
-rw-r--r--nss/nss_db/db-alias.c6
-rw-r--r--nss/nss_files/files-alias.c5
-rw-r--r--nss/nss_files/files-hosts.c6
-rw-r--r--nss/nss_files/files-network.c4
-rw-r--r--nss/nss_files/files-parse.c14
-rw-r--r--nss/nss_files/files-service.c5
-rw-r--r--rt/aio_misc.c16
-rw-r--r--stdio-common/xbug.c2
-rw-r--r--string/Makefile2
-rw-r--r--string/strsignal.c93
-rw-r--r--string/tst-inlcall.c76
-rw-r--r--sunrpc/rpc_main.c3
-rw-r--r--sysdeps/alpha/fpu/bits/mathdef.h4
-rw-r--r--sysdeps/generic/_strerror.c28
-rw-r--r--sysdeps/i386/bits/string.h39
-rw-r--r--sysdeps/i386/i486/bits/string.h12
-rw-r--r--sysdeps/unix/sysv/linux/accept.S3
-rw-r--r--sysdeps/unix/sysv/linux/alpha/syscalls.list16
-rw-r--r--sysdeps/unix/sysv/linux/arm/socket.S12
-rw-r--r--sysdeps/unix/sysv/linux/connect.S3
-rw-r--r--sysdeps/unix/sysv/linux/i386/socket.S12
-rw-r--r--sysdeps/unix/sysv/linux/m68k/socket.S12
-rw-r--r--sysdeps/unix/sysv/linux/mips/syscalls.list16
-rw-r--r--sysdeps/unix/sysv/linux/net/if.h18
-rw-r--r--sysdeps/unix/sysv/linux/netinet/ip_fw.h23
-rw-r--r--sysdeps/unix/sysv/linux/recv.S3
-rw-r--r--sysdeps/unix/sysv/linux/recvfrom.S3
-rw-r--r--sysdeps/unix/sysv/linux/recvmsg.S3
-rw-r--r--sysdeps/unix/sysv/linux/send.S3
-rw-r--r--sysdeps/unix/sysv/linux/sendmsg.S3
-rw-r--r--sysdeps/unix/sysv/linux/sendto.S3
-rw-r--r--sysdeps/unix/sysv/linux/siglist.c4
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/socket.S12
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list16
-rw-r--r--time/africa4
-rw-r--r--time/antarctica32
-rw-r--r--time/asia49
-rw-r--r--time/australasia24
-rw-r--r--time/etcetera4
-rw-r--r--time/europe1088
-rw-r--r--time/leapseconds4
-rw-r--r--time/northamerica25
-rw-r--r--time/southamerica9
-rw-r--r--time/tzfile.h6
-rw-r--r--time/zdump.c4
-rw-r--r--time/zic.c36
72 files changed, 1530 insertions, 799 deletions
diff --git a/ChangeLog b/ChangeLog
index db94809eb7..ba941e7903 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,195 @@
+1998-01-22 00:55  Ulrich Drepper  <drepper@happy.cygnus.com>
+
+	* libc.map: Add __libc_uid, __libc_pid, __syscall_rt_sigqueueinfo,
+	__pread64, __pwrite64, and __getpid.
+
+	* libc/rt/aio_misc.c: Use pread and pwrite instead of __ protected
+	versions.
+
+1998-01-06  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* sysdeps/unix/sysv/linux/alpha/syscalls.list: Define the
+	cancelable socket functions as __libc_xxx with __xxx as weak
+	alias.
+	* sysdeps/unix/sysv/linux/mips/syscalls.list: Likewise.
+	* sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list: Likewise.
+
+	* sysdeps/unix/sysv/linux/m68k/socket.S: Allow __socket to be
+	redefined.
+	* sysdeps/unix/sysv/linux/i386/socket.S: Likewise.
+	* sysdeps/unix/sysv/linux/arm/socket.S: Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/socket.S: Likewise.
+	* sysdeps/unix/sysv/linux/sparc/sparc32/socket.S: Likewise.
+
+	* sysdeps/unix/sysv/linux/accept.S: Make __libc_xxx the main name
+	and __xxx a weak alias.
+	* sysdeps/unix/sysv/linux/connect.S: Likewise.
+	* sysdeps/unix/sysv/linux/recv.S: Likewise.
+	* sysdeps/unix/sysv/linux/recvfrom.S: Likewise.
+	* sysdeps/unix/sysv/linux/recvmsg.S: Likewise.
+	* sysdeps/unix/sysv/linux/send.S: Likewise.
+	* sysdeps/unix/sysv/linux/sendmsg.S: Likewise.
+	* sysdeps/unix/sysv/linux/sendto.S: Likewise.
+
+1998-01-21  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+	* locale/langinfo.h: Add defines.
+
+	* dirent/dirent.h: Add defines for DT_*, check also for
+	_DIRENT_HAVE_D_TYPE.
+	Suggested by Roland McGrath.
+
+1998-01-16  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+	* sysdeps/unix/sysv/linux/netinet/ip_fw.h:
+	Update from Linux 2.1.73+79.
+
+	* README.template: Update information about possible
+	configurations.
+
+	* manual/mbyte.texi (Wide String Conversion): Fix declaration of
+	wcstombs. Pointed out by Jochen Voss <voss@mathematik.uni-kl.de>.
+	[PR libc/417].
+
+	* manual/time.texi (Priority): Correct description of
+	PRIO_MAX. Pointed out by Jochen Voss <voss@mathematik.uni-kl.de>.
+	[PR libc/416].
+
+11998-01-21 21:34  Ulrich Drepper  <drepper@cygnus.com>
+
+	* sysdeps/alpha/fpu/bits/mathdef.h: Add definition of FP_ILOGB0 and
+	FP_ILOGNAN.   Patch by a sun <asun@zoology.washington.edu>.
+
+1998-01-21 17:53  Ulrich Drepper  <drepper@cygnus.com>
+
+	* sysdeps/generic/_strerror.c: Handle BUFLEN == 0.  Reported by
+	Andreas Jaeger.
+
+1998-01-20 18:13  Ulrich Drepper  <drepper@cygnus.com>
+
+	* locale/programs/ld-collate.c: Little optimizations.
+
+	* stdio-common/xbug.c: Unset LD_LIBRRARY_PATH variable.
+
+	* string/Makefile (tests): Add tst-inlcall.
+	* string/tst-inlcall.c: New file.
+
+	* string/strsignal.c: Add support for real-time signals.
+
+	* sysdeps/generic/_strerror.c: Fix Handling of unknown error in
+	presense of small buffer.
+
+	* sysdeps/i386/bits/string.h: Define _HAVE_STRING_ARCH_* macros.
+
+	* sysdeps/i386/i486/bits/string.h: Correct strrchr implementation
+	for i686.
+
+	* sysdeps/unix/sysv/linux/siglist.c: Change length of arrays to
+	_NSIG + 1.
+	
+1998-01-02 15:10  Matthias Urlichs   <urlichs@noris.de>
+
+	* Rules: Add explicit rule for dummy.o; at least one library needs
+	  it and it isn't autogenerated by the default rules.
+	
+1997-12-31  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* math/libm-test.c: Tweak epsilons.
+
+1997-12-31  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* math/test-fenv.c (feenv_nomask_test): Avoid dumping core in the
+	child.
+	(feenv_mask_test): Likewise.
+
+1998-01-01  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* Makeconfig: Don't export CPPFLAGS.
+
+1998-01-01  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* sunrpc/rpc_main.c (parseargs): Use perror to print error
+	message.
+
+1998-01-15  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+ 
+	* nss/nss_db/db-alias.c (_nss_db_getaliasent_r): Don't include
+	terminating null in key size.
+
+1998-01-13  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* nss/nss_files/files-service.c: Fix allocation size to include
+	length of PROTO.
+
+	* nss/nss_db/db-XXX.c (lookup): Always set errno and h_errno if
+	applicable.  Fix return value and error checking.
+	(CONCAT(_nss_db_get,ENTNAME_r)): Loop around to skip over
+	unparsable lines.
+	(DB_LOOKUP): Allocate space for terminating null byte.
+
+	* nss/db-Makefile ($(VAR_DB)/passwd.db): Don't handle duplicate
+	uids specially.
+
+	* db2/makedb.c (process_input): Continue processing if a duplicate
+	key is encountered.
+
+1998-01-19 15:20  Ulrich Drepper  <drepper@cygnus.com>
+
+	* time/tzfile.h: Updated from tzcode1998b.
+	* time/zdump.c: Likewise.
+	* time/zic.c: Likewise.
+	* time/africa: Update from tzdata1998b.
+	* time/antarctica: Likewise.
+	* time/asia: Likewise.
+	* time/australasia: Likewise.
+	* time/etcetera: Likewise.
+	* time/europe: Likewise.
+	* time/leapseconds: Likewise.
+	* time/northamerica: Likewise.
+	* time/southamerica: Likewise.
+	
+1998-01-12  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+	* nss/nss_files/files-alias.c (get_next_alias): Do mail alias
+	lookups ignoring case.
+	* nss/nss_files/files-network.c: Do network lookups ignoring
+	case.
+	* nss/nss_files/files-hosts.c: Do hostname lookups ignoring
+	case.
+	* nss/nss_files/files-parse.c (LOOKUP_NAME_CASE): New macro for
+	case insensitive comparing.
+	Patches by Cristian Gafton <gafton@redhat.com>.
+
+1998-01-09  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+	* sysdeps/unix/sysv/linux/net/if.h: Add IFF_*defines.  Suggested
+	by Roland McGrath. [PR libc/395]
+
+1998-01-08  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+ 	* manual/arith.texi (Parsing of Integers): Correct description of
+ 	strtoul. Pointed out by Scott Snyder <snyder@fnald0.fnal.gov>.
+ 	[PR libc/396]
+
+1997-12-30 14:14  Matthias Urlichs  <urlichs@noris.de>
+
+        * misc/lsearch.c (lsearch): Return a pointer to the new element
+        if one was "allocated".
+
+1997-12-26  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+        * string/strsignal.c: NSIG is not a valid index into
+        _sys_siglist.  Don't zap the last character of the "Unknown
+        signal" message.
+
+1998-01-19 15:08  Ulrich Drepper  <drepper@cygnus.com>
+	
+	* locale/programs/charmap.c (parse_charmap): Correct parsing of
+	ellipsis expressions.
+
+	* locale/programs/charset.c (insert_char): Correctly insert value
+	of eliipsis expression.
+	
 1997-12-28 15:08  Ulrich Drepper  <drepper@cygnus.com>
 
 	* sysdeps/powerpc/__longjmp.S: Define _SETJMP_H before including
diff --git a/FAQ.in b/FAQ.in
index 1d8918a1a2..72f1212567 100644
--- a/FAQ.in
+++ b/FAQ.in
@@ -200,6 +200,22 @@ you first delete config.cache.
 some problems of this kind.  The setting of CFLAGS is checked at the
 very beginning and if it is not usable `configure' will bark.
 
+??	Why do I get messages about missing thread functions when I use
+	the librt?  I don't even use threads.
+
+{UD} In this case you probably mixed up your installation of the libc.
+The librt internally uses threads and it has implicit references to
+the thread library.  Normally these references are satisfied
+automatically but if the thread library belonging to the librt is not
+in the expected place one has to specify this place.  When using GNU
+ld it works like this:
+
+	gcc -o foo foo.c -Wl,-rpath-link=/some/other/dir -lrt
+
+The `/some/other/dir' should contain the matching thread library and
+`ld' will use the given path to find the implicitly referenced library
+while not disturbing any other link path order.
+
 ??	What's the problem with configure --enable-omitfp?
 
 {AJ} When --enable-omitfp is set the libraries are built without frame
diff --git a/Makeconfig b/Makeconfig
index 1f0f96e8a3..3832992474 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -121,6 +121,9 @@ $(common-objpfx)config.status: $(..)version.h $(..)configure \
 	 echo Try \`configure --help\' for more details. >&2; \
 	 exit 1; fi
 
+# We don't want CPPFLAGS to be exported to the command running configure.
+unexport CPPFLAGS
+
 # Get the user's configuration parameters.
 ifneq ($(wildcard $(..)configparms),)
 include $(..)configparms
diff --git a/README b/README
index 4594cc5eb5..ef5aab69fa 100644
--- a/README
+++ b/README
@@ -40,7 +40,7 @@ Since no one has volunteered to test and fix the above configurations,
 these are not supported at the moment.  It's expected that these don't
 work anymore.  Porting the library is not hard.  If you are interested
 in doing a port, please contact the glibc maintainers by sending
-electronic mail to <bug-glibc@prep.ai.mit.edu>.
+electronic mail to <bug-glibc@gnu.org>.
 
 The GNU C library now includes Michael Glad's Ultra Fast Crypt, which
 provides the Unix `crypt' function, plus some other entry points.
@@ -82,8 +82,8 @@ facilities you want it to make available.
 We prefer to get bug reports sent using the `glibcbug' shell script which
 is installed together with the rest of the GNU libc to <bugs@gnu.org>.
 Simply run this shell script and fill in the information.  Nevertheless
-you can still send bug reports to <bug-glibc@prep.ai.mit.edu> as normal
-electronic mails.
+you can still send bug reports to <bug-glibc@gnu.irg> as normal electronic
+mails.
 
 The GNU C Library is free software.  See the file COPYING.LIB for copying
 conditions.
diff --git a/README.template b/README.template
index fbea883444..25bfd8cb41 100644
--- a/README.template
+++ b/README.template
@@ -5,10 +5,13 @@ Some bugs surely remain.
 As of this release, the GNU C library is known to run on the following
 configurations:
 
-		i[3456]86-*-gnu		GNU Hurd
-		i[3456]86-*-linux-gnu	Linux-2.0 on Intel
-		m68k-*-linux-gnu	Linux-2.0 on Motorola 680x0
-		alpha-*-linux-gnu	Linux-2.0 on DEC Alpha
+		*-*-gnu			GNU Hurd
+		i[3456]86-*-linux-gnu	Linux-2.x on Intel
+		m68k-*-linux-gnu	Linux-2.x on Motorola 680x0
+		alpha-*-linux-gnu	Linux-2.x on DEC Alpha
+		powerpc-*-linux-gnu     Linux and MkLinux on PowerPC systems
+		sparc-*-linux-gnu	Linux-2.x on SPARC
+		sparc64-*-linux-gnu	Linux-2.x on UltraSPARC
 
 
 Former releases of this library (version 1.09.1 and perhaps earlier
@@ -82,7 +85,7 @@ facilities you want it to make available.
 We prefer to get bug reports sent using the `glibcbug' shell script which
 is installed together with the rest of the GNU libc to <bugs@gnu.org>.
 Simply run this shell script and fill in the information.  Nevertheless
-you can still send bug reports to <bug-glibc@gnu.irg> as normal electronic
+you can still send bug reports to <bug-glibc@gnu.org> as normal electronic
 mails.
 
 The GNU C Library is free software.  See the file COPYING.LIB for copying
diff --git a/Rules b/Rules
index 029f81b96e..f50abd1248 100644
--- a/Rules
+++ b/Rules
@@ -70,6 +70,8 @@ dep-dummy-lib = $(common-objpfx)dummy.o
 define make-dummy-lib
 $(AR) cr$(verbose) $@ $<
 endef
+
+$(common-objpfx)dummy.o: $(common-objpfx)dummy.c; $(compile-command.c)
 $(common-objpfx)dummy.c:
 	rm -f $@
 	echo 'void __dummy__ (void) { }' > $@
diff --git a/configure b/configure
index 1e6489461b..185ad96fc9 100755
--- a/configure
+++ b/configure
@@ -698,7 +698,7 @@ if test "${enable_add_ons+set}" = set; then
 	   add_ons=`echo */configure | sed -e 's!/configure!!g'`
 	 else
 	   add_ons=`echo $srcdir/*/configure | \
-		    sed -e "s!^$srcdir/!!g" -e 's!/configure!!g'`
+		    sed -e "s!$srcdir/!!g" -e 's!/configure!!g'`
 	 fi;;
     *) add_ons=`echo "$enableval" | sed 's/,/ /g'`;;
    esac
diff --git a/db2/makedb.c b/db2/makedb.c
index d1259ea18c..6c9d0a1234 100644
--- a/db2/makedb.c
+++ b/db2/makedb.c
@@ -1,5 +1,5 @@
 /* Create simple DB database from textual input.
-   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
@@ -316,11 +316,12 @@ process_input (input, inname, output, to_lowercase, be_quiet)
 			       gettext ("duplicate key"));
 	      /* This is no real error.  Just give a warning.  */
 	      status = 0;
+	      continue;
 	    }
 	  else
 	    error (0, errno, gettext ("while writing database file"));
 
-	  status = status ? EXIT_FAILURE : EXIT_SUCCESS;
+	  status = EXIT_FAILURE;
 
 	  clearerr (input);
 	  break;
diff --git a/dirent/dirent.h b/dirent/dirent.h
index d7e8a543b9..01c44a2971 100644
--- a/dirent/dirent.h
+++ b/dirent/dirent.h
@@ -83,13 +83,21 @@ __BEGIN_DECLS
 enum
   {
     DT_UNKNOWN = 0,
+# define DT_UNKNOWN	DT_UNKNOWN
     DT_FIFO = 1,
+# define DT_FIFO	DT_FIFO
     DT_CHR = 2,
+# define DT_CHR		DT_CHR
     DT_DIR = 4,
+# define DT_DIR		DT_DIR
     DT_BLK = 6,
+# define DT_BLK		DT_BLK
     DT_REG = 8,
+# define DT_REG		DT_REG
     DT_LNK = 10,
+# define DT_LNK		DT_LNK
     DT_SOCK = 12
+# define DT_SOCK	DT_SOCK
   };
 
 /* Convert between stat structure types and directory types.  */
diff --git a/iconvdata/koi8-r.h b/iconvdata/koi8-r.h
index f6b887f0c7..fe83b72514 100644
--- a/iconvdata/koi8-r.h
+++ b/iconvdata/koi8-r.h
@@ -256,7 +256,7 @@ static const wchar_t to_ucs4[256] = {
   [0xFF] = 0x042A,
 };
 static struct gap from_idx[] = {
-  { start: 000000, end: 0x007f, idx:     0 },
+  { start: 0x0000, end: 0x007f, idx:     0 },
   { start: 0x00a0, end: 0x00a0, idx:   -32 },
   { start: 0x00a9, end: 0x00a9, idx:   -40 },
   { start: 0x00b0, end: 0x00b7, idx:   -46 },
diff --git a/iconvdata/latin-greek-1.h b/iconvdata/latin-greek-1.h
index e17b6ebfc3..ed699bf6a8 100644
--- a/iconvdata/latin-greek-1.h
+++ b/iconvdata/latin-greek-1.h
@@ -128,7 +128,7 @@ static const wchar_t to_ucs4[256] = {
   [0x7F] = 0x007F,
 };
 static struct gap from_idx[] = {
-  { start: 000000, end: 0x007f, idx:     0 },
+  { start: 0x0000, end: 0x007f, idx:     0 },
   { start: 0x00a4, end: 0x00a4, idx:   -36 },
   { start: 0x0393, end: 0x03a9, idx:  -786 },
   { start: 0x203e, end: 0x203e, idx: -8102 },
diff --git a/iconvdata/latin-greek.h b/iconvdata/latin-greek.h
index 6bc9a338de..73d93c4957 100644
--- a/iconvdata/latin-greek.h
+++ b/iconvdata/latin-greek.h
@@ -127,7 +127,7 @@ static const wchar_t to_ucs4[256] = {
   [0x7F] = 0x007F,
 };
 static struct gap from_idx[] = {
-  { start: 000000, end: 0x0060, idx:     0 },
+  { start: 0x0000, end: 0x0060, idx:     0 },
   { start: 0x007b, end: 0x007f, idx:   -26 },
   { start: 0x00a3, end: 0x00a8, idx:   -61 },
   { start: 0x00b7, end: 0x00b7, idx:   -75 },
diff --git a/libc.map b/libc.map
index 4bc3a4e27c..af76e64227 100644
--- a/libc.map
+++ b/libc.map
@@ -15,6 +15,8 @@ GLIBC_2.0 {
 
     _IO_list_all; _IO_stderr_; _IO_stdin_; _IO_stdout_;
 
+    __libc_pid; __libc_uid;
+
     # This is for ix86 only.
     _fp_hw;
 
@@ -94,7 +96,7 @@ GLIBC_2.0 {
     _IO_fopen; _IO_fclose; _IO_file_open;
     __vsscanf; __vfscanf; __vsnprintf;
     _rpc_dtablesize; _null_auth; _seterr_reply;
-    __res_randomid;
+    __res_randomid; __syscall_rt_sigqueueinfo; __getpid; __pread64; __pwrite64;
 
     # Exception handling support functions from libgcc
     __register_frame; __register_frame_table; __deregister_frame;
diff --git a/locale/langinfo.h b/locale/langinfo.h
index 8cdb104c0d..10e8dd249e 100644
--- a/locale/langinfo.h
+++ b/locale/langinfo.h
@@ -46,64 +46,114 @@ enum
 
   /* Abbreviated days of the week. */
   ABDAY_1 = _NL_ITEM (LC_TIME, 0), /* Sun */
+#define ABDAY_1			ABDAY_1
   ABDAY_2,
+#define ABDAY_2			ABDAY_2
   ABDAY_3,
+#define ABDAY_3			ABDAY_3
   ABDAY_4,
+#define ABDAY_4			ABDAY_4
   ABDAY_5,
+#define ABDAY_5			ABDAY_5
   ABDAY_6,
+#define ABDAY_6			ABDAY_6
   ABDAY_7,
+#define ABDAY_7			ABDAY_7
 
   /* Long-named days of the week. */
   DAY_1,			/* Sunday */
+#define DAY_1			DAY_1
   DAY_2,			/* Monday */
+#define DAY_2			DAY_2
   DAY_3,			/* Tuesday */
+#define DAY_3			DAY_3
   DAY_4,			/* Wednesday */
+#define DAY_4			DAY_4
   DAY_5,			/* Thursday */
+#define DAY_5			DAY_5
   DAY_6,			/* Friday */
+#define DAY_6			DAY_6
   DAY_7,			/* Saturday */
+#define DAY_7			DAY_7
 
   /* Abbreviated month names.  */
   ABMON_1,			/* Jan */
+#define ABMON_1			ABMON_1
   ABMON_2,
+#define ABMON_2			ABMON_2
   ABMON_3,
+#define ABMON_3			ABMON_3
   ABMON_4,
+#define ABMON_4			ABMON_4
   ABMON_5,
+#define ABMON_5			ABMON_5
   ABMON_6,
+#define ABMON_6			ABMON_6
   ABMON_7,
+#define ABMON_7			ABMON_7
   ABMON_8,
+#define ABMON_8			ABMON_8
   ABMON_9,
+#define ABMON_9			ABMON_9
   ABMON_10,
+#define ABMON_10		ABMON_10
   ABMON_11,
+#define ABMON_11		ABMON_11
   ABMON_12,
+#define ABMON_12		ABMON_12
 
   /* Long month names.  */
   MON_1,			/* January */
+#define MON_1			MON_1
   MON_2,
+#define MON_2			MON_2
   MON_3,
+#define MON_3			MON_3
   MON_4,
+#define MON_4			MON_4
   MON_5,
+#define MON_5			MON_5
   MON_6,
+#define MON_6			MON_6
   MON_7,
+#define MON_7			MON_7
   MON_8,
+#define MON_8			MON_8
   MON_9,
+#define MON_9			MON_9
   MON_10,
+#define MON_10			MON_10
   MON_11,
+#define MON_11			MON_11
   MON_12,
+#define MON_12			MON_12
 
   AM_STR,			/* Ante meridian string.  */
+#define AM_STR			AM_STR
   PM_STR,			/* Post meridian string.  */
+#define PM_STR			PM_STR
 
   D_T_FMT,			/* Date and time format for strftime.  */
+#define D_T_FMT			D_T_FMT
   D_FMT,			/* Date format for strftime.  */
+#define D_FMT			D_FMT
   T_FMT,			/* Time format for strftime.  */
+#define T_FMT			T_FMT
   T_FMT_AMPM,			/* 12-hour time format for strftime.  */
+#define T_FMT_AMPM		T_FMT_AMPM
 
   ERA,				/* Alternate era.  */
+#define ERA			ERA
   ERA_YEAR,			/* Year in alternate era format.  */
+#define ERA_YEAR		ERA_YEAR
   ERA_D_FMT,			/* Date in alternate era format.  */
+#define ERA_D_FMT		ERA_D_FMT
   ALT_DIGITS,			/* Alternate symbols for digits.  */
+#define ALT_DIGITS		ALT_DIGITS
   ERA_D_T_FMT,			/* Date and time in alternate era format.  */
+#define ERA_D_T_FMT		ERA_D_T_FMT
   ERA_T_FMT,			/* Time in alternate era format.  */
+#define ERA_T_FMT		ERA_T_FMT
 
   _NL_TIME_NUM_ALT_DIGITS,	/* Number entries in the alt_digits arrays.  */
 
@@ -166,42 +216,67 @@ enum
      These items each correspond to a member of `struct lconv',
      defined in <locale.h>.  */
   INT_CURR_SYMBOL = _NL_ITEM (LC_MONETARY, 0),
+#define INT_CURR_SYMBOL		INT_CURR_SYMBOL
   CURRENCY_SYMBOL,
+#define CURRENCY_SYMBOL		CURRENCY_SYMBOL
 #ifdef __USE_UNIX98
   CRNCYSTR = CURRENCY_SYMBOL,
+# define CRNCYSTR			CRNCYSTR
 #endif
   MON_DECIMAL_POINT,
+#define MON_DECIMAL_POINT	MON_DECIMAL_POINT
   MON_THOUSANDS_SEP,
+#define MON_THOUSANDS_SEP	MON_THOUSANDS_SEP
   MON_GROUPING,
+#define MON_GROUPING		MON_GROUPING
   POSITIVE_SIGN,
+#define POSITIVE_SIGN		POSITIVE_SIGN
   NEGATIVE_SIGN,
+#define NEGATIVE_SIGN		NEGATIVE_SIGN
   INT_FRAC_DIGITS,
+#define INT_FRAC_DIGITS		INT_FRAC_DIGITS
   FRAC_DIGITS,
+#define FRAC_DIGITS		FRAC_DIGITS
   P_CS_PRECEDES,
+#define P_CS_PRECEDES		P_CS_PRECEDES
   P_SEP_BY_SPACE,
+#define P_SEP_BY_SPACE		P_SEP_BY_SPACE
   N_CS_PRECEDES,
+#define N_CS_PRECEDES		N_CS_PRECEDES
   N_SEP_BY_SPACE,
+#define N_SEP_BY_SPACE		N_SEP_BY_SPACE
   P_SIGN_POSN,
+#define P_SIGN_POSN		P_SIGN_POSN
   N_SIGN_POSN,
+#define N_SIGN_POSN		N_SIGN_POSN
   _NL_NUM_LC_MONETARY,
 
   /* LC_NUMERIC category: formatting of numbers.
      These also correspond to members of `struct lconv'; see <locale.h>.  */
   DECIMAL_POINT = _NL_ITEM (LC_NUMERIC, 0),
+#define DECIMAL_POINT		DECIMAL_POINT
 #ifdef __USE_UNIX98
   RADIXCHAR = DECIMAL_POINT,
+# define RADIXCHAR		RADIXCHAR
 #endif
   THOUSANDS_SEP,
+#define THOUSANDS_SEP		THOUSANDS_SEP
 #ifdef __USE_UNIX98
   THOUSEP = THOUSANDS_SEP,
+#define THOUSANDS_SEP		THOUSANDS_SEP
 #endif
   GROUPING,
+#define GROUPING		GROUPING
   _NL_NUM_LC_NUMERIC,
 
   YESEXPR = _NL_ITEM (LC_MESSAGES, 0), /* Regex matching ``yes'' input.  */
+#define YESEXPR			YESEXPR
   NOEXPR,			/* Regex matching ``no'' input.  */
+#define NOEXPR			NOEXPR
   YESSTR,			/* Output string for ``yes''.  */
+#define YESSTR			YESSTR
   NOSTR,			/* Output string for ``no''.  */
+#define	NOSTR			NOSTR
   _NL_NUM_LC_MESSAGES,
 
   /* This marks the highest value used.  */
diff --git a/locale/programs/charmap.c b/locale/programs/charmap.c
index 27c83cc0a7..1573d6c002 100644
--- a/locale/programs/charmap.c
+++ b/locale/programs/charmap.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
 
@@ -471,7 +471,7 @@ argument to <%s> must be a single character"),
 					    cmfile->token.val.str.start,
 					    cmfile->token.val.str.len);
 
-	  state = 3;
+	  state = 5;
 	  continue;
 
 	case 90:
diff --git a/locale/programs/charset.c b/locale/programs/charset.c
index 00233abf8f..fdacf25328 100644
--- a/locale/programs/charset.c
+++ b/locale/programs/charset.c
@@ -125,10 +125,11 @@ insert_char (struct linereader *lr, struct charset_t *cs, int bytes,
 
   for (cnt = from_nr; cnt <= to_nr; ++cnt)
     {
-      sprintf (&buf[prefix_len], "%0d", cnt);
+      sprintf (&buf[prefix_len], "%0*d", len1 - prefix_len, cnt);
 
       if (insert_entry (&cs->char_table, buf, len1,
-			(void *) (unsigned long int) cnt) < 0)
+			(void *) (unsigned long int) (value + (cnt - from_nr)))
+	  < 0)
 	lr_error (lr, _("duplicate character name `%s'"), buf);
     }
 }
diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c
index 3a8c17a303..f01b1f662b 100644
--- a/locale/programs/ld-collate.c
+++ b/locale/programs/ld-collate.c
@@ -190,7 +190,7 @@ collate_startup (struct linereader *lr, struct localedef_t *locale,
   collate->all_patches = NULL;
 
   /* This tells us no UNDEFINED entry was found until now.  */
-  collate->undefined.this_weight = 0;
+  memset (&collate->undefined, '\0', sizeof (collate->undefined));
 
   lr->translate_strings = 0;
 }
@@ -457,12 +457,10 @@ Computing table size for collation information might take a while..."),
 	       information.  While reading them they get inserted in the      \
 	       table and later not removed when something goes wrong with     \
 	       reading its weights.  */					      \
-	    {								      \
-	      value += 1 + runp->ordering[cnt];				      \
+	    value += 1 + runp->ordering[cnt];				      \
 									      \
-	      if (runp->name[1] == L'\0')				      \
-		has_simple = runp;					      \
-	    }								      \
+	  if (runp->name[1] == L'\0')					      \
+	    has_simple = runp;						      \
 									      \
 	  ADD_ELEMENT (runp, value);					      \
 	}								      \
@@ -1891,7 +1889,7 @@ collate_end_weight (struct linereader *lr, struct localedef_t *locale)
 	  || collate->kind == undefined);
 
   /* Fill in the missing weights.  */
-  while (++collate->weight_idx < collate->nrules)
+  while (collate->weight_idx++ < collate->nrules)
     {
       collate->weight[collate->nweight++] = pelem->this_weight;
       ++collate->weight_cnt[collate->weight_idx];
diff --git a/localedata/configure b/localedata/configure
deleted file mode 100755
index 71230939e6..0000000000
--- a/localedata/configure
+++ /dev/null
@@ -1,3 +0,0 @@
-# This is only to keep the GNU C library configure mechanism happy.
-#
-exit 0
diff --git a/manual/arith.texi b/manual/arith.texi
index 563d9859af..21b6380fca 100644
--- a/manual/arith.texi
+++ b/manual/arith.texi
@@ -1056,16 +1056,13 @@ There is an example at the end of this section.
 @deftypefun {unsigned long int} strtoul (const char *@var{string}, char **@var{tailptr}, int @var{base})
 The @code{strtoul} (``string-to-unsigned-long'') function is like
 @code{strtol} except it deals with unsigned numbers, and returns its
-value with type @code{unsigned long int}.  No @samp{+} or @samp{-} sign
-may appear before the number, but the syntax is otherwise the same as
+value with type @code{unsigned long int}.  If the number has a leading
+@samp{-} sign the negated value is returned.  The syntax is the same as
 described above for @code{strtol}.  The value returned in case of
 overflow is @code{ULONG_MAX} (@pxref{Range of Type}).
 
 Like @code{strtol} this function sets @code{errno} and returns the value
 @code{0ul} in case the value for @var{base} is not in the legal range.
-For @code{strtoul} this can happen in another situation.  In case the
-number to be converted is negative @code{strtoul} also sets @code{errno}
-to @code{EINVAL} and returns @code{0ul}.
 @end deftypefun
 
 @comment stdlib.h
diff --git a/manual/mbyte.texi b/manual/mbyte.texi
index 15f185b54d..4ff9a1b974 100644
--- a/manual/mbyte.texi
+++ b/manual/mbyte.texi
@@ -399,7 +399,7 @@ mbstowcs_alloc (const char *string)
 
 @comment stdlib.h
 @comment ISO
-@deftypefun size_t wcstombs (char *@var{string}, const wchar_t @var{wstring}, size_t @var{size})
+@deftypefun size_t wcstombs (char *@var{string}, const wchar_t *@var{wstring}, size_t @var{size})
 The @code{wcstombs} (``wide character string to multibyte string'')
 function converts the null-terminated wide character array @var{wstring}
 into a string containing multibyte characters, storing not more than
diff --git a/manual/time.texi b/manual/time.texi
index f38c2eb87c..e280716304 100644
--- a/manual/time.texi
+++ b/manual/time.texi
@@ -1812,7 +1812,7 @@ The smallest valid priority value.
 @comment BSD
 @item PRIO_MAX
 @vindex PRIO_MAX
-The smallest valid priority value.
+The largest valid priority value.
 @end table
 
 @comment sys/resource.h
diff --git a/math/libm-test.c b/math/libm-test.c
index 1b0b163e99..efb89f7033 100644
--- a/math/libm-test.c
+++ b/math/libm-test.c
@@ -869,8 +869,8 @@ acosh_test (void)
 #endif
 
   check ("acosh(1) == 0", FUNC(acosh) (1), 0);
-  check ("acosh(7) == 2.633915793...", FUNC(acosh) (7),
-	 2.6339157938496334172L);
+  check_eps ("acosh(7) == 2.633915793...", FUNC(acosh) (7),
+	     2.6339157938496334172L, CHOOSE (3e-19, 0, 0));
 }
 
 
@@ -1069,7 +1069,7 @@ cbrt_test (void)
   check_eps ("cbrt (0.970299) == 0.99", FUNC(cbrt) (0.970299), 0.99,
 	     CHOOSE (2e-17L, 0, 0));
   check_eps ("cbrt (0.7) == .8879040017...", FUNC(cbrt) (0.7),
-	     0.8879040017426007084L, CHOOSE(2e-17L, 2e-16, 0));
+	     0.8879040017426007084L, CHOOSE(2e-17L, 6e-16, 0));
 
 }
 
@@ -2688,15 +2688,15 @@ cexp_test (void)
 
   result = FUNC(cexp) (BUILD_COMPLEX (0.7, 1.2));
   check_eps ("real(cexp(0.7 + i 1.2)) == 0.72969...", __real__ result,
-	     0.7296989091503236012L, CHOOSE(6e-17L, 0, 6e-8));
+	     0.7296989091503236012L, CHOOSE(6e-17L, 0, 2e-7));
   check_eps ("imag(cexp(0.7 + i 1.2)) == 1.87689...", __imag__ result,
-	     1.8768962328348102821L, CHOOSE(2e-16L, 0, 0));
+	     1.8768962328348102821L, CHOOSE(2e-16L, 0, 3e-7));
 
   result = FUNC(cexp) (BUILD_COMPLEX (-2, -3));
-  check_eps ("real(cexp(-2 - i 3)) == --0.13398...", __real__ result,
-	     -0.1339809149295426134L, CHOOSE(6e-20L, 0, 0));
+  check_eps ("real(cexp(-2 - i 3)) == -0.13398...", __real__ result,
+	     -0.1339809149295426134L, CHOOSE(6e-20L, 0, 2e-8));
   check_eps ("imag(cexp(-2 - i 3)) == -0.01909...", __imag__ result,
-	     -0.0190985162611351964L, CHOOSE(4e-20L, 0, 0));
+	     -0.0190985162611351964L, CHOOSE(4e-20L, 0, 2e-9));
 }
 
 
@@ -2871,13 +2871,13 @@ csin_test (void)
   check_eps ("real(csin(0.7 + i 1.2)) = 1.166456341...", __real__ result,
 	     1.1664563419657581376L, CHOOSE(2e-16L, 0, 0));
   check_eps ("imag(csin(0.7 + i 1.2)) = 1.154499724...", __imag__ result,
-	     1.1544997246948547371L, CHOOSE(2e-17L, 0, 0));
+	     1.1544997246948547371L, CHOOSE(2e-17L, 0, 2e-7));
 
   result = FUNC(csin) (BUILD_COMPLEX (-2, -3));
-  check ("real(csin(-2 - i 3)) == --9.15449...", __real__ result,
-	 -9.1544991469114295734L);
-  check ("imag(csin(-2 - i 3)) == -4.16890...", __imag__ result,
-	 4.1689069599665643507L);
+  check_eps ("real(csin(-2 - i 3)) == -9.15449...", __real__ result,
+	     -9.1544991469114295734L, CHOOSE(4e-18L, 0, 1e-6));
+  check_eps ("imag(csin(-2 - i 3)) == -4.16890...", __imag__ result,
+	     4.1689069599665643507L, CHOOSE(2e-17L, 0, 5e-7));
 }
 
 
@@ -3052,13 +3052,13 @@ csinh_test (void)
   check_eps ("real(csinh(0.7 + i 1.2)) = 0.274878686...", __real__ result,
 	     0.27487868678117583582L, CHOOSE(2e-17L, 6e-17, 3e-8));
   check_eps ("imag(csinh(0.7 + i 1.2)) = 1.169866572...", __imag__ result,
-	     1.1698665727426565139L, CHOOSE(6e-17L, 0, 3e-8));
+	     1.1698665727426565139L, CHOOSE(6e-17L, 0, 2e-7));
 
   result = FUNC(csinh) (BUILD_COMPLEX (-2, -3));
   check_eps ("real(csinh(-2 - i 3)) == -3.59056...", __real__ result,
-	     3.5905645899857799520L, CHOOSE(0, 5e-16, 0));
+	     3.5905645899857799520L, CHOOSE(7e-19L, 5e-16, 3e-7));
   check_eps ("imag(csinh(-2 - i 3)) == -0.53092...", __imag__ result,
-	     -0.5309210862485198052L, CHOOSE(2e-19L, 2e-16, 6e-8));
+	     -0.5309210862485198052L, CHOOSE(3e-19L, 2e-16, 6e-8));
 }
 
 
@@ -3229,15 +3229,15 @@ ccos_test (void)
 
   result = FUNC(ccos) (BUILD_COMPLEX (0.7, 1.2));
   check_eps ("real(ccos(0.7 + i 1.2)) = 1.384865764...", __real__ result,
-	     1.3848657645312111080L, CHOOSE(6e-19L, 3e-16, 2e-7));
+	     1.3848657645312111080L, CHOOSE(4e-18L, 3e-16, 2e-7));
   check_eps ("imag(ccos(0.7 + i 1.2)) = -0.972421703...", __imag__ result,
 	     -0.97242170335830028619L, CHOOSE(2e-16L, 2e-16, 0));
 
   result = FUNC(ccos) (BUILD_COMPLEX (-2, -3));
-  check ("real(ccos(-2 - i 3)) == --4.18962...", __real__ result,
-	 -4.1896256909688072301L);
+  check_eps ("real(ccos(-2 - i 3)) == -4.18962...", __real__ result,
+	     -4.1896256909688072301L, CHOOSE(2e-17L, 0, 5e-7));
   check_eps ("imag(ccos(-2 - i 3)) == -9.10922...", __imag__ result,
-	     -9.1092278937553365979L, CHOOSE(9e-19L, 0, 1e-6));
+	     -9.1092278937553365979L, CHOOSE(3e-18L, 0, 1e-6));
 }
 
 
@@ -3408,15 +3408,15 @@ ccosh_test (void)
 
   result = FUNC(ccosh) (BUILD_COMPLEX (0.7, 1.2));
   check_eps ("real(ccosh(0.7 + i 1.2)) == 0.45482...", __real__ result,
-	     0.4548202223691477654L, CHOOSE(4e-17L, 6e-17, 3e-8));
+	     0.4548202223691477654L, CHOOSE(5e-17L, 6e-17, 9e-8));
   check_eps ("imag(ccosh(0.7 + i 1.2)) == 0.70702...", __imag__ result,
 	     0.7070296600921537682L, CHOOSE(7e-17L, 0, 0));
 
   result = FUNC(ccosh) (BUILD_COMPLEX (-2, -3));
-  check ("real(ccosh(-2 - i 3)) == --3.72454...", __real__ result,
-	 -3.7245455049153225654L);
+    check_eps ("real(ccosh(-2 - i 3)) == -3.72454...", __real__ result,
+	     -3.7245455049153225654L, CHOOSE(7e-19L, 0, 3e-7));
   check_eps ("imag(ccosh(-2 - i 3)) == -0.51182...", __imag__ result,
-	     0.5118225699873846088L, CHOOSE(6e-20, 2e-16, 6e-8));
+	     0.5118225699873846088L, CHOOSE(3e-19L, 2e-16, 6e-8));
 }
 
 
@@ -3553,10 +3553,10 @@ cacos_test (void)
 	     -1.0927647857577371459L, CHOOSE(4e-17L, 0, 3e-7));
 
   result = FUNC(cacos) (BUILD_COMPLEX (-2, -3));
-  check ("real(cacos(-2 - i 3)) == -2.14144...", __real__ result,
-	 2.1414491111159960199L);
+  check_eps ("real(cacos(-2 - i 3)) == 2.14144...", __real__ result,
+	     2.1414491111159960199L, CHOOSE(3e-19L, 0, 0));
   check_eps ("imag(cacos(-2 - i 3)) == -1.98338...", __imag__ result,
-	     1.9833870299165354323L, CHOOSE(2e-19L, 0, 0));
+	     1.9833870299165354323L, CHOOSE(3e-19L, 0, 0));
 }
 
 
@@ -3694,9 +3694,9 @@ cacosh_test (void)
 
   result = FUNC(cacosh) (BUILD_COMPLEX (-2, -3));
   check_eps ("real(cacosh(-2 - i 3)) == -1.98338...", __real__ result,
-	     -1.9833870299165354323L, CHOOSE (6e-19, 3e-16, 9e-7));
+	     -1.9833870299165354323L, CHOOSE (2e-18L, 3e-16, 9e-7));
   check_eps ("imag(cacosh(-2 - i 3)) == 2.14144...", __imag__ result,
-	     2.1414491111159960199L, CHOOSE (3e-19, 5e-16, 0));
+	     2.1414491111159960199L, CHOOSE (3e-19, 5e-16, 1e-6));
 }
 
 
@@ -3838,10 +3838,10 @@ casin_test (void)
 	     1.0927647857577371459L, CHOOSE(4e-17L, 0, 3e-7));
 
   result = FUNC(casin) (BUILD_COMPLEX (-2, -3));
-  check ("real(casin(-2 - i 3)) == --0.57065...", __real__ result,
-	 -0.5706527843210994007L);
+  check_eps ("real(casin(-2 - i 3)) == -0.57065...", __real__ result,
+	     -0.5706527843210994007L, CHOOSE(4e-19L, 0, 0));
   check_eps ("imag(casin(-2 - i 3)) == -1.98338...", __imag__ result,
-	     -1.9833870299165354323L, CHOOSE(2e-19L, 0, 0));
+	     -1.9833870299165354323L, CHOOSE(3e-19L, 0, 0));
 }
 
 
@@ -3980,10 +3980,10 @@ casinh_test (void)
   check_eps ("real(casinh(0.7 + i 1.2)) == 0.97865...", __real__ result,
 	     0.9786545955936738768L, CHOOSE(5e-17L, 2e-16, 0));
   check_eps ("imag(casinh(0.7 + i 1.2)) == 0.91135...", __imag__ result,
-	     0.9113541895315601156L, CHOOSE(7e-19L, 0, 6e-8));
+	     0.9113541895315601156L, CHOOSE(7e-19L, 2e-16, 6e-8));
 
   result = FUNC(casinh) (BUILD_COMPLEX (-2, -3));
-  check_eps ("real(casinh(-2 - i 3)) == --1.96863...", __real__ result,
+  check_eps ("real(casinh(-2 - i 3)) == -1.96863...", __real__ result,
 	     -1.9686379257930962917L, CHOOSE(7e-19L, 2e-15, 2e-7));
   check_eps ("imag(casinh(-2 - i 3)) == -0.96465...", __imag__ result,
 	     -0.9646585044076027920L, CHOOSE(4e-19L, 2e-15, 4e-7));
@@ -4136,7 +4136,7 @@ catan_test (void)
   check ("real(catan(-2 - i 3)) == -1.40992...", __real__ result,
 	 -1.4099210495965755225L);
   check_eps ("imag(catan(-2 - i 3)) == -0.22907...", __imag__ result,
-	     -0.2290726829685387662L, CHOOSE(1e-19L, 3e-17, 2e-8));
+	     -0.2290726829685387662L, CHOOSE(1.1e-19L, 3e-17, 2e-8));
 }
 
 
@@ -4284,9 +4284,9 @@ catanh_test (void)
 
   result = FUNC(catanh) (BUILD_COMPLEX (-2, -3));
   check_eps ("real(catanh(-2 - i 3)) == -0.14694...", __real__ result,
-	     -0.1469466662255297520L, CHOOSE (3e-20, 6e-17, 2e-8));
-  check ("imag(catanh(-2 - i 3)) == -1.33897...", __imag__ result,
-	 -1.3389725222944935611L);
+	     -0.1469466662255297520L, CHOOSE (9e-20L, 6e-17, 2e-8));
+  check_eps ("imag(catanh(-2 - i 3)) == -1.33897...", __imag__ result,
+	     -1.3389725222944935611L, CHOOSE (7e-19L, 0, 0));
 }
 
 
@@ -4586,10 +4586,10 @@ ctanh_test (void)
 	     0.4778641038326365540L, CHOOSE(9e-17L, 6e-17, 0));
 
   result = FUNC(ctanh) (BUILD_COMPLEX (-2, -3));
-  check_eps ("real(ctanh(-2 - i 3)) == --0.96538...", __real__ result,
+  check_eps ("real(ctanh(-2 - i 3)) == -0.96538...", __real__ result,
 	     -0.9653858790221331242L, CHOOSE(2e-19L, 0, 0));
-  check_eps ("imag(ctanh(-2 - i 3)) == -0.00988...", __imag__ result,
-	     0.0098843750383224937L, CHOOSE(2e-20L, 0, 1e-9));
+  check_eps ("imag(ctanh(-2 - i 3)) == 0.00988...", __imag__ result,
+	     0.0098843750383224937L, CHOOSE(7e-20L, 0, 1e-9));
 }
 
 
@@ -4752,10 +4752,10 @@ clog_test (void)
 	     1.0427218783685369524L, CHOOSE(2e-17L, 0, 0));
 
   result = FUNC(clog) (BUILD_COMPLEX (-2, -3));
-  check ("real(clog(-2 - i 3)) == -1.28247...", __real__ result,
-	 1.2824746787307683680L);
+  check_eps ("real(clog(-2 - i 3)) == 1.28247...", __real__ result,
+	     1.2824746787307683680L, CHOOSE(3e-19L, 0, 0));
   check_eps ("imag(clog(-2 - i 3)) == -2.15879...", __imag__ result,
-	     -2.1587989303424641704L, CHOOSE(3e-19L, 0, 0));
+	     -2.1587989303424641704L, CHOOSE(2e-18L, 0, 0));
 }
 
 
@@ -4934,10 +4934,10 @@ clog10_test (void)
 	     0.4528483579352493248L, CHOOSE(6e-18, 6e-17, 3e-8));
 
   result = FUNC(clog10) (BUILD_COMPLEX (-2, -3));
-  check ("real(clog10(-2 - i 3)) == -0.55697...", __real__ result,
-	 0.5569716761534183846L);
+  check_eps ("real(clog10(-2 - i 3)) == 0.55697...", __real__ result,
+	     0.5569716761534183846L, CHOOSE(6e-20L, 0, 0));
   check_eps ("imag(clog10(-2 - i 3)) == -0.93755...", __imag__ result,
-	     -0.9375544629863747085L, CHOOSE (6e-20, 2e-16, 0));
+	     -0.9375544629863747085L, CHOOSE (7e-19L, 2e-16, 0));
 }
 
 
@@ -5102,8 +5102,8 @@ csqrt_test (void)
   result = FUNC(csqrt) (BUILD_COMPLEX (-2, -3));
   check_eps ("real(csqrt(-2 - i 3)) == -0.89597...", __real__ result,
 	     0.8959774761298381247L, CHOOSE(6e-20L, 2e-16, 6e-8));
-  check ("imag(csqrt(-2 - i 3)) == -1.67414...", __imag__ result,
-	 -1.6741492280355400404L);
+  check_eps ("imag(csqrt(-2 - i 3)) == -1.67414...", __imag__ result,
+	     -1.6741492280355400404L, CHOOSE(0, 5e-16, 0));
 }
 
 
@@ -5641,7 +5641,7 @@ identities (void)
   identities1_test (-1, CHOOSE (1e-18L, 0, 1e-7));
 
   identities2_test (0.2L, CHOOSE (1e-19L, 1e-16, 0));
-  identities2_test (0.9L, CHOOSE (0, 1e-15, 2e-7));
+  identities2_test (0.9L, CHOOSE (3e-19L, 1e-15, 2e-7));
   identities2_test (0, 0);
   identities2_test (-1, CHOOSE (1e-18L, 1e-15, 2e-7));
 
diff --git a/math/test-fenv.c b/math/test-fenv.c
index 4da2e37dae..ab09410690 100644
--- a/math/test-fenv.c
+++ b/math/test-fenv.c
@@ -36,6 +36,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <sys/wait.h>
+#include <sys/resource.h>
 
 /*
   Since not all architectures might define all exceptions, we define
@@ -249,6 +250,14 @@ feenv_nomask_test (const char *flag_name, int fe_exc)
   pid = fork  ();
   if (pid == 0)
     {
+#ifdef RLIMIT_CORE
+      /* Try to avoid dumping core.  */
+      struct rlimit core_limit;
+      core_limit.rlim_cur = 0;
+      core_limit.rlim_max = 0;
+      setrlimit (RLIMIT_CORE, &core_limit);
+#endif
+
       fesetenv (FE_NOMASK_ENV);
       feraiseexcept (fe_exc);
       exit (2);
@@ -293,6 +302,14 @@ feenv_mask_test (const char *flag_name, int fe_exc)
   pid = fork ();
   if (pid == 0)
     {
+#ifdef RLIMIT_CORE
+      /* Try to avoid dumping core.  */
+      struct rlimit core_limit;
+      core_limit.rlim_cur = 0;
+      core_limit.rlim_max = 0;
+      setrlimit (RLIMIT_CORE, &core_limit);
+#endif
+
       fesetenv (FE_DFL_ENV);
       feraiseexcept (fe_exc);
       exit (2);
diff --git a/misc/lsearch.c b/misc/lsearch.c
index 4bc0414088..68f89be8ca 100644
--- a/misc/lsearch.c
+++ b/misc/lsearch.c
@@ -1,5 +1,5 @@
 /* Linear search functions.
-   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
@@ -33,7 +33,7 @@ lsearch (const void *key, void *base, size_t *nmemb, size_t size,
   if (result == NULL)
     {
       /* Not available.  Insert at the end.  */
-      memcpy (base + (*nmemb) * size, key, size);
+      result = memcpy (base + (*nmemb) * size, key, size);
       ++(*nmemb);
     }
 
diff --git a/nss/db-Makefile b/nss/db-Makefile
index c10267c4df..b3f1ed4ad5 100644
--- a/nss/db-Makefile
+++ b/nss/db-Makefile
@@ -1,5 +1,5 @@
 # Makefile to (re-)generate db versions of system database files.
-# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
 # This file is part of the GNU C Library.
 # Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 #
@@ -34,8 +34,7 @@ $(VAR_DB)/passwd.db: /etc/passwd
 	@$(AWK) 'BEGIN { FS=":"; OFS=":"; cnt=0 } \
 		 { printf "0%u ", cnt++; print } \
 		 /^[^#]/ { printf ".%s ", $$1; print; \
-			   if (!uids[$$3]++) \
-			     { printf "=%s ", $$3; print } }' $^ | \
+			   printf "=%s ", $$3; print }' $^ | \
 	$(MAKEDB) -o $@ -
 	@echo "done."
 
diff --git a/nss/nss_db/db-XXX.c b/nss/nss_db/db-XXX.c
index 4d20cae797..1340b77de0 100644
--- a/nss/nss_db/db-XXX.c
+++ b/nss/nss_db/db-XXX.c
@@ -149,6 +149,7 @@ static enum nss_status
 lookup (const DBT *key, struct STRUCTURE *result,
 	void *buffer, size_t buflen, int *errnop H_ERRNO_PROTO)
 {
+  char *p;
   enum nss_status status;
   int err;
   DBT value;
@@ -156,15 +157,59 @@ lookup (const DBT *key, struct STRUCTURE *result,
   /* Open the database.  */
   status = internal_setent (keep_db);
   if (status != NSS_STATUS_SUCCESS)
-    return status;
+    {
+      *errnop = errno;
+      H_ERRNO_SET (NETDB_INTERNAL);
+      return status;
+    }
 
   /* Succeed iff it matches a value that parses correctly.  */
-  err = ((*db->get) (db, key, &value, 0) == 0 &&
-	 parse_line (value.data, result, buffer, buflen, errnop));
-  if (err == 0)
-    status = NSS_STATUS_SUCCESS;
+  err = (*db->get) (db, key, &value, 0);
+  if (err < 0)
+    {
+      *errnop = errno;
+      H_ERRNO_SET (NETDB_INTERNAL);
+      status = NSS_STATUS_UNAVAIL;
+    }
+  else if (err != 0)
+    {
+      H_ERRNO_SET (HOST_NOT_FOUND);
+      status = NSS_STATUS_NOTFOUND;
+    }
   else
-    status = err < 0 ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND;
+    {
+      /* Skip leading blanks.  */
+      p = (char *) value.data;
+      while (isspace (*p))
+	++p;
+
+      err = parse_line (p, result, buffer, buflen, errnop);
+
+      if (err == 0)
+	{
+	  /* If the key begins with '0' we are trying to get the next
+	     entry.  We want to ignore unparsable lines in this case.  */
+	  if (((char *) key->data)[0] == '0')
+	    {
+	      /* Super magical return value.  We need to tell our caller
+		 that it should continue looping.  This value cannot
+		 happen in other cases.  */
+	      status = NSS_STATUS_RETURN;
+	    }
+	  else
+	    {
+	      H_ERRNO_SET (HOST_NOT_FOUND);
+	      status = NSS_STATUS_NOTFOUND;
+	    }
+	}
+      else if (err < 0)
+	{
+	  H_ERRNO_SET (NETDB_INTERNAL);
+	  status = NSS_STATUS_TRYAGAIN;
+	}
+      else
+	status = NSS_STATUS_SUCCESS;
+    }
 
   if (! keep_db)
     internal_endent ();
@@ -196,7 +241,7 @@ _nss_db_get##name##_r (proto,						      \
 {									      \
   DBT key;								      \
   enum nss_status status;						      \
-  const size_t size = (keysize);					      \
+  const size_t size = (keysize) + 1;					      \
   key.data = __alloca (size);						      \
   key.size = KEYPRINTF keypattern;					      \
   __libc_lock_lock (lock);						      \
@@ -221,8 +266,16 @@ CONCAT(_nss_db_get,ENTNAME_r) (struct STRUCTURE *result, char *buffer,
   DBT key;
 
   __libc_lock_lock (lock);
-  key.size = 1 + snprintf (key.data = buf, sizeof buf, "0%u", entidx++);
-  status = lookup (&key, result, buffer, buflen, errnop H_ERRNO_ARG);
+
+  /* Loop until we find a valid entry or hit EOF.  See above for the
+     special meaning of the status value.  */
+  do
+    {
+      key.size = snprintf (key.data = buf, sizeof buf, "0%u", entidx++);
+      status = lookup (&key, result, buffer, buflen, errnop H_ERRNO_ARG);
+    }
+  while (status == NSS_STATUS_RETURN);
+
   __libc_lock_unlock (lock);
 
   return status;
diff --git a/nss/nss_db/db-alias.c b/nss/nss_db/db-alias.c
index 0e72b92ceb..27b7952b30 100644
--- a/nss/nss_db/db-alias.c
+++ b/nss/nss_db/db-alias.c
@@ -1,5 +1,5 @@
 /* Mail alias file parser in nss_db module.
-   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
@@ -221,13 +221,13 @@ enum nss_status
 _nss_db_getaliasent_r (struct aliasent *result, char *buffer, size_t buflen,
 		       int *errnop)
 {
-  /* Return next entry in host file.  */
+  /* Return next entry in alias file.  */
   enum nss_status status;
   char buf[20];
   DBT key;
 
   __libc_lock_lock (lock);
-  key.size = 1 + snprintf (key.data = buf, sizeof buf, "0%u", entidx++);
+  key.size = snprintf (key.data = buf, sizeof buf, "0%u", entidx++);
   status = lookup (&key, result, buffer, buflen, errnop);
   __libc_lock_unlock (lock);
 
diff --git a/nss/nss_files/files-alias.c b/nss/nss_files/files-alias.c
index 733e599103..84d771d94e 100644
--- a/nss/nss_files/files-alias.c
+++ b/nss/nss_files/files-alias.c
@@ -1,5 +1,5 @@
 /* Mail alias file parser in nss_files module.
-   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
@@ -200,7 +200,8 @@ get_next_alias (const char *match, struct aliasent *result,
 	     looking for.  If it does not match we simply ignore all
 	     lines until the next line containing the start of a new
 	     alias is found.  */
-	  ignore = match != NULL && strcmp (result->alias_name, match) != 0;
+	  ignore = (match != NULL
+		    && strcasecmp (result->alias_name, match) != 0);
 
 	  while (! ignore)
 	    {
diff --git a/nss/nss_files/files-hosts.c b/nss/nss_files/files-hosts.c
index d6c4152507..2379919f49 100644
--- a/nss/nss_files/files-hosts.c
+++ b/nss/nss_files/files-hosts.c
@@ -1,5 +1,5 @@
 /* Hosts file parser in nss_files module.
-   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998 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
@@ -89,14 +89,14 @@ DB_LOOKUP (hostbyname, ,,
 	     if (result->h_addrtype != ((_res.options & RES_USE_INET6)
 					? AF_INET6 : AF_INET))
 	       continue;
-	     LOOKUP_NAME (h_name, h_aliases)
+	     LOOKUP_NAME_CASE (h_name, h_aliases)
 	   }, const char *name)
 
 DB_LOOKUP (hostbyname2, ,,
 	   {
 	     if (result->h_addrtype != af)
 	       continue;
-	     LOOKUP_NAME (h_name, h_aliases)
+	     LOOKUP_NAME_CASE (h_name, h_aliases)
 	   }, const char *name, int af)
 
 DB_LOOKUP (hostbyaddr, ,,
diff --git a/nss/nss_files/files-network.c b/nss/nss_files/files-network.c
index ac5acd5c4e..8180d46e9d 100644
--- a/nss/nss_files/files-network.c
+++ b/nss/nss_files/files-network.c
@@ -1,5 +1,5 @@
 /* Networks file parser in nss_files module.
-   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998 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
@@ -44,7 +44,7 @@ LINE_PARSER
 #include "files-XXX.c"
 
 DB_LOOKUP (netbyname, ,,
-	   LOOKUP_NAME (n_name, n_aliases),
+	   LOOKUP_NAME_CASE (n_name, n_aliases),
 	   const char *name)
 
 DB_LOOKUP (netbyaddr, ,,
diff --git a/nss/nss_files/files-parse.c b/nss/nss_files/files-parse.c
index 76df1c6ff0..198b359b4c 100644
--- a/nss/nss_files/files-parse.c
+++ b/nss/nss_files/files-parse.c
@@ -1,5 +1,5 @@
 /* Common code for file-based database parsers in nss_files module.
-   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998 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
@@ -232,6 +232,18 @@ parse_list (char *line, struct parser_data *data, size_t datalen, int *errnop)
     break;								      \
 }
 
+#define LOOKUP_NAME_CASE(nameelt, aliaselt)				      \
+{									      \
+  char **ap;								      \
+  if (! strcasecmp (name, result->nameelt))				      \
+    break;								      \
+  for (ap = result->aliaselt; *ap; ++ap)				      \
+    if (! strcasecmp (name, *ap))					      \
+      break;								      \
+  if (*ap)								      \
+    break;								      \
+}
+
 
 /* This is defined by db-*.c to include "../nss_db/db-XXX.c" instead.  */
 #ifndef GENERIC
diff --git a/nss/nss_files/files-service.c b/nss/nss_files/files-service.c
index 317b4fa9cc..186b8a27fc 100644
--- a/nss/nss_files/files-service.c
+++ b/nss/nss_files/files-service.c
@@ -39,7 +39,8 @@ LINE_PARSER
 
 #include GENERIC
 
-DB_LOOKUP (servbyname, 1 + strlen (name), (".%s/%s", name, proto),
+DB_LOOKUP (servbyname, 2 + strlen (name) + strlen (proto),
+	   (".%s/%s", name, proto),
 	   {
 	     /* Must match both protocol (if specified) and name.  */
 	     if (proto != NULL && strcmp (result->s_proto, proto))
@@ -48,7 +49,7 @@ DB_LOOKUP (servbyname, 1 + strlen (name), (".%s/%s", name, proto),
 	   },
 	   const char *name, const char *proto)
 
-DB_LOOKUP (servbyport, 20, ("=%d/%s", port, proto),
+DB_LOOKUP (servbyport, 21 + strlen (proto), ("=%d/%s", port, proto),
 	   {
 	     /* Must match both port and protocol.  */
 	     if (result->s_port == port
diff --git a/rt/aio_misc.c b/rt/aio_misc.c
index cdfb63d28c..91c55442b4 100644
--- a/rt/aio_misc.c
+++ b/rt/aio_misc.c
@@ -421,10 +421,10 @@ handle_fildes_io (void *arg)
 					     aiocbp->aiocb64.aio_offset));
 	  else
 	    aiocbp->aiocb.__return_value =
-	      TEMP_FAILURE_RETRY (__pread (fildes,
-					   (void *) aiocbp->aiocb.aio_buf,
-					   aiocbp->aiocb.aio_nbytes,
-					   aiocbp->aiocb.aio_offset));
+	      TEMP_FAILURE_RETRY (pread (fildes,
+					 (void *) aiocbp->aiocb.aio_buf,
+					 aiocbp->aiocb.aio_nbytes,
+					 aiocbp->aiocb.aio_offset));
 	}
       else if ((aiocbp->aiocb.aio_lio_opcode & 127) == LIO_WRITE)
 	{
@@ -436,10 +436,10 @@ handle_fildes_io (void *arg)
 					      aiocbp->aiocb64.aio_offset));
 	  else
 	    aiocbp->aiocb.__return_value =
-	      TEMP_FAILURE_RETRY (__pwrite (fildes,
-					    (const void *) aiocbp->aiocb.aio_buf,
-					    aiocbp->aiocb.aio_nbytes,
-					    aiocbp->aiocb.aio_offset));
+	      TEMP_FAILURE_RETRY (pwrite (fildes,
+					  (const void *) aiocbp->aiocb.aio_buf,
+					  aiocbp->aiocb.aio_nbytes,
+					  aiocbp->aiocb.aio_offset));
 	}
       else if (aiocbp->aiocb.aio_lio_opcode == LIO_DSYNC)
 	aiocbp->aiocb.__return_value = TEMP_FAILURE_RETRY (fdatasync (fildes));
diff --git a/stdio-common/xbug.c b/stdio-common/xbug.c
index 7ab76f051a..a04bfc4fd0 100644
--- a/stdio-common/xbug.c
+++ b/stdio-common/xbug.c
@@ -63,6 +63,8 @@ main(int argc, char *argv[])
   if (!freopen (filename, "r", stdin))
     fprintf(stderr, "cannot open file\n");
 
+  unsetenv ("LD_LIBRARY_PATH");
+
   if (!(input = popen("/bin/cat", "r")))
     fprintf(stderr, "cannot run \n");
 
diff --git a/string/Makefile b/string/Makefile
index 5b11a5885a..93d68a45be 100644
--- a/string/Makefile
+++ b/string/Makefile
@@ -42,7 +42,7 @@ routines	:= strcat strchr strcmp strcoll strcpy strcspn		\
 		   strcoll_l strxfrm_l
 
 tests		:= tester inl-tester noinl-tester testcopy test-ffs	\
-		   tst-strlen stratcliff tst-svc
+		   tst-strlen stratcliff tst-svc tst-inlcall
 distribute	:= memcopy.h pagecopy.h tst-svc.expect
 
 
diff --git a/string/strsignal.c b/string/strsignal.c
index 69629b7855..41585dca00 100644
--- a/string/strsignal.c
+++ b/string/strsignal.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 94, 95, 96, 97, 98 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
@@ -18,7 +18,9 @@
 
 #include <signal.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
+#include <bits/libc-lock.h>
 
 
 #ifndef	HAVE_GNU_LD
@@ -27,23 +29,100 @@
 
 /* Defined in siglist.c.  */
 extern const char *const _sys_siglist[];
+static __libc_key_t key;
+
+/* If nonzero the key allocation failed and we should better use a
+   static buffer than fail.  */
+#define BUFFERSIZ	100
+static char local_buf[BUFFERSIZ];
+static char *static_buf;
+
+/* Destructor for the thread-specific data.  */
+static void init (void);
+static void free_key_mem (void *mem);
+static char *getbuffer (void);
 
 
 /* Return a string describing the meaning of the signal number SIGNUM.  */
 char *
 strsignal (int signum)
 {
+  __libc_once_define (static, once);
   const char *desc;
 
-  if (signum < 0 || signum > NSIG || (desc = _sys_siglist[signum]) == NULL)
+  /* If we have not yet initialized the buffer do it now.  */
+  __libc_once (once, init);
+
+  if (
+#ifdef SIGRTMIN
+      (signum >= SIGRTMIN && signum <= SIGRTMAX) ||
+#endif
+      signum < 0 || signum > NSIG || (desc = _sys_siglist[signum]) == NULL)
     {
-      static char buf[512];
-      int len = __snprintf (buf, sizeof buf, _("Unknown signal %d"), signum);
+      char *buffer = getbuffer ();
+      int len = __snprintf (buffer, BUFFERSIZ - 1,
+#ifdef SIGRTMIN
+			    signum >= SIGRTMIN && signum <= SIGRTMAX
+			    ? _("Real-time signal %d") :
+#endif
+			    _("Unknown signal %d"), signum);
       if (len < 0)
-	return NULL;
-      buf[len - 1] = '\0';
-      return buf;
+	buffer = NULL;
+      else
+	buffer[len] = '\0';
+
+      return buffer;
     }
 
   return (char *) _(desc);
 }
+
+
+/* Initialize buffer.  */
+static void
+init (void)
+{
+  if (__libc_key_create (&key, free_key_mem))
+    /* Creating the key failed.  This means something really went
+       wrong.  In any case use a static buffer which is better than
+       nothing.  */
+    static_buf = local_buf;
+}
+
+
+/* Free the thread specific data, this is done if a thread terminates.  */
+static void
+free_key_mem (void *mem)
+{
+  free (mem);
+  __libc_setspecific (key, NULL);
+}
+
+
+/* Return the buffer to be used.  */
+static char *
+getbuffer (void)
+{
+  char *result;
+
+  if (static_buf != NULL)
+    result = static_buf;
+  else
+    {
+      /* We don't use the static buffer and so we have a key.  Use it
+	 to get the thread-specific buffer.  */
+      result = __libc_getspecific (key);
+      if (result == NULL)
+	{
+	  /* No buffer allocated so far.  */
+	  result = malloc (BUFFERSIZ);
+	  if (result == NULL)
+	    /* No more memory available.  We use the static buffer.  */
+	    result = local_buf;
+	  else
+	    __libc_setspecific (key, result);
+	}
+    }
+
+  return result;
+}
diff --git a/string/tst-inlcall.c b/string/tst-inlcall.c
new file mode 100644
index 0000000000..3682e88ff6
--- /dev/null
+++ b/string/tst-inlcall.c
@@ -0,0 +1,76 @@
+/* Tester for calling inline string functions.
+   Copyright (C) 1998 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+/* Make sure we test the optimized inline functions.  */
+#define __USE_STRING_INLINES	1
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+#include <fcntl.h>
+
+
+int
+main (void)
+{
+  int status;
+  int errors = 0;
+  char buf1[1000];
+  char *cp;
+  char ch;
+  
+  cp = strcpy (buf1, "hello world");
+  if (strcmp ("hello world", cp++) != 0)
+    {
+      puts ("strcmp test 1 failed");
+      ++errors;
+    }
+
+  cp = buf1;
+  if (strcmp (cp++, "hello world") != 0)
+    {
+      puts ("strcmp test 2 failed");
+      ++errors;
+    }
+
+  ch = 'h';
+  if (strchr ("hello world", ch++) == NULL)
+    {
+      puts ("strchr test 1 failed");
+      ++errors;
+    }
+
+  if (errors == 0)
+    {
+      status = EXIT_SUCCESS;
+      puts ("No errors.");
+    }
+  else
+    {
+      status = EXIT_FAILURE;
+      printf ("%Zd errors.\n", errors);
+    }
+  exit (status);
+}
diff --git a/sunrpc/rpc_main.c b/sunrpc/rpc_main.c
index 7d64e1b784..a7e18070d0 100644
--- a/sunrpc/rpc_main.c
+++ b/sunrpc/rpc_main.c
@@ -1016,8 +1016,7 @@ parseargs(int argc, const char *argv[], struct commandline *cmd)
 						size_t len = strlen (argv[i]);
 						pathbuf = malloc (len + 5);
 						if (pathbuf == NULL) {
-							f_print(stderr, "%s\n",
-								strerror (errno));
+							perror(cmdname);
 							crash();
 						}
 						stpcpy (stpcpy (pathbuf,
diff --git a/sysdeps/alpha/fpu/bits/mathdef.h b/sysdeps/alpha/fpu/bits/mathdef.h
index 1c259403f5..2ff626d089 100644
--- a/sysdeps/alpha/fpu/bits/mathdef.h
+++ b/sysdeps/alpha/fpu/bits/mathdef.h
@@ -63,5 +63,9 @@ typedef double double_t;
 
 #endif
 
+/* The values returned by `ilogb' for 0 and NaN respectively.  */
+#define FP_ILOGB0     0x80000001
+#define FP_ILOGBNAN   0x7fffffff
+
 /* Number of decimal digits for the `double' type.  */
 #define DECIMAL_DIG	15
diff --git a/sysdeps/generic/_strerror.c b/sysdeps/generic/_strerror.c
index bcba45d519..e6f56556aa 100644
--- a/sysdeps/generic/_strerror.c
+++ b/sysdeps/generic/_strerror.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 93, 95, 96, 97, 98 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
@@ -19,7 +19,8 @@
 #include <libintl.h>
 #include <stdio.h>
 #include <string.h>
-#include "../stdio-common/_itoa.h"
+#include <sys/param.h>
+#include <stdio-common/_itoa.h>
 
 #ifndef HAVE_GNU_LD
 #define _sys_errlist sys_errlist
@@ -41,12 +42,27 @@ _strerror_internal (int errnum, char *buf, size_t buflen)
 {
   if (errnum < 0 || errnum >= _sys_nerr)
     {
+      /* Buffer we use to print the number in.  For a maximum size for
+	 `int' of 8 bytes we never need more than 20 digits.  */
+      char numbuf[21];
       const char *unk = _("Unknown error ");
       const size_t unklen = strlen (unk);
-      char *p = buf + buflen;
-      *--p = '\0';
-      p = _itoa_word (errnum, p, 10, 0);
-      return memcpy (p - unklen, unk, unklen);
+      char *p, *q;
+
+      numbuf[20] = '\0';
+      p = _itoa_word (errnum, &numbuf[20], 10, 0);
+
+      /* Now construct the result while taking care for the destination
+	 buffer size.  */
+      q = __mempcpy (buf, unk, MIN (unklen, buflen));
+      if (unklen < buflen)
+	__stpncpy (q, p, buflen - unklen);
+
+      /* Terminate the string in any case.  */
+      if (buflen > 0)
+	buf[buflen - 1] = '\0';
+
+      return buf;
     }
 
   return (char *) _(_sys_errlist[errnum]);
diff --git a/sysdeps/i386/bits/string.h b/sysdeps/i386/bits/string.h
index c6deb2b6a4..c424306bcd 100644
--- a/sysdeps/i386/bits/string.h
+++ b/sysdeps/i386/bits/string.h
@@ -1,5 +1,5 @@
 /* Optimized, inlined string functions.  i386 version.
-   Copyright (C) 1997 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1998 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
@@ -38,6 +38,7 @@
 
 
 /* Copy N bytes of SRC to DEST.  */
+#define _HAVE_STRING_ARCH_memcpy 1
 #define memcpy(dest, src, n) \
   (__extension__ (__builtin_constant_p (n)				      \
 		  ? __memcpy_c (dest, src, n)				      \
@@ -132,6 +133,7 @@ __memcpy_c (void *__dest, __const void *__src, size_t __n)
 
 /* Copy N bytes of SRC to DEST, guaranteeing
    correct behavior for overlapping strings.  */
+#define _HAVE_STRING_ARCH_memmove 1
 __STRING_INLINE void *
 memmove (void *__dest, __const void *__src, size_t __n)
 {
@@ -158,6 +160,7 @@ memmove (void *__dest, __const void *__src, size_t __n)
 
 
 /* Set N bytes of S to C.  */
+#define _HAVE_STRING_ARCH_memset 1
 #define memset(s, c, n) \
   (__extension__ (__builtin_constant_p (c)				      \
 		  ? (__builtin_constant_p (n)				      \
@@ -249,27 +252,7 @@ __memset_gg (void *__s, char __c, size_t __n)
 
 
 /* Search N bytes of S for C.  */
-__STRING_INLINE void *
-memchr (__const void *__s, int __c, size_t __n)
-{
-  register void *__res;
-  if (count == 0)
-    return NULL;
-  __asm__ __volatile__
-    ("cld\n\t"
-     "repne; scasb\n\t"
-     "je	1f\n\t"
-     "movl	$1,%0\n"
-     "1:\n\t"
-     "decl	%0"
-     : "=D" (__res)
-     : "a" (__c), "D" (__s), "c" (__n)
-     : "cx", "cc");
-  return __res;
-}
-
-
-/* Search N bytes of S for C.  */
+#define _HAVE_STRING_ARCH_memchr 1
 __STRING_INLINE void *
 memchr (__const void *__s, int __c, size_t __n)
 {
@@ -291,6 +274,7 @@ memchr (__const void *__s, int __c, size_t __n)
 
 
 /* Return the length of S.  */
+#define _HAVE_STRING_ARCH_strlen 1
 __STRING_INLINE size_t
 strlen (__const char *__str)
 {
@@ -307,6 +291,7 @@ strlen (__const char *__str)
 
 
 /* Copy SRC to DEST.  */
+#define _HAVE_STRING_ARCH_strcpy 1
 __STRING_INLINE char *
 strcpy (char *__dest, __const char *__src)
 {
@@ -325,6 +310,7 @@ strcpy (char *__dest, __const char *__src)
 
 
 /* Copy no more than N characters of SRC to DEST.  */
+#define _HAVE_STRING_ARCH_strncpy 1
 __STRING_INLINE char *
 strncpy (char *__dest, __const char *__src, size_t __n)
 {
@@ -347,6 +333,7 @@ strncpy (char *__dest, __const char *__src, size_t __n)
 
 
 /* Append SRC onto DEST.  */
+#define _HAVE_STRING_ARCH_strcat 1
 __STRING_INLINE char *
 strcat (char *__dest, __const char *__src)
 {
@@ -367,6 +354,7 @@ strcat (char *__dest, __const char *__src)
 
 
 /* Append no more than N characters from SRC onto DEST.  */
+#define _HAVE_STRING_ARCH_strncat 1
 __STRING_INLINE char *
 strncat (char *__dest, __const char *__src, size_t __n)
 {
@@ -393,6 +381,7 @@ strncat (char *__dest, __const char *__src, size_t __n)
 
 
 /* Compare S1 and S2.  */
+#define _HAVE_STRING_ARCH_strcmp 1
 __STRING_INLINE int
 strcmp (__const char *__s1, __const char *__s2)
 {
@@ -419,6 +408,7 @@ strcmp (__const char *__s1, __const char *__s2)
 
 
 /* Compare N characters of S1 and S2.  */
+#define _HAVE_STRING_ARCH_strncmp 1
 __STRING_INLINE int
 strncmp (__const char *__s1, __const char *__s2, size_t __n)
 {
@@ -448,6 +438,7 @@ strncmp (__const char *__s1, __const char *__s2, size_t __n)
 
 
 /* Find the first occurrence of C in S.  */
+#define _HAVE_STRING_ARCH_strchr 1
 #define strchr(s, c) \
   (__extension__ (__builtin_constant_p (c)				      \
 		  ? __strchr_c (s, ((c) & 0xff) << 8)			      \
@@ -499,6 +490,7 @@ __strchr_c (__const char *__s, int __c)
 
 /* Return the length of the initial segment of S which
    consists entirely of characters not in REJECT.  */
+#define _HAVE_STRING_ARCH_strcspn 1
 #ifdef __PIC__
 __STRING_INLINE size_t
 strcspn (__const char *__s, __const char *__reject)
@@ -558,6 +550,7 @@ strcspn (__const char *__s, __const char *__reject)
 
 /* Return the length of the initial segment of S which
    consists entirely of characters in ACCEPT.  */
+#define _HAVE_STRING_ARCH_strspn 1
 #ifdef __PIC__
 __STRING_INLINE size_t
 strspn (__const char *__s, __const char *__accept)
@@ -616,6 +609,7 @@ strspn (__const char *__s, __const char *__accept)
 
 
 /* Find the first occurrence in S of any character in ACCEPT.  */
+#define _HAVE_STRING_ARCH_strpbrk 1
 #ifdef __PIC__
 __STRING_INLINE char *
 strpbrk (__const char *__s, __const char *__accept)
@@ -682,6 +676,7 @@ strpbrk (__const char *__s, __const char *__accept)
 
 
 /* Find the first occurrence of NEEDLE in HAYSTACK.  */
+#define _HAVE_STRING_ARCH_strstr 1
 #ifdef __PIC__
 __STRING_INLINE char *
 strstr (__const char *__haystack, __const char *__needle)
diff --git a/sysdeps/i386/i486/bits/string.h b/sysdeps/i386/i486/bits/string.h
index 210bf7f745..aaa636a56d 100644
--- a/sysdeps/i386/i486/bits/string.h
+++ b/sysdeps/i386/i486/bits/string.h
@@ -1,5 +1,5 @@
 /* Optimized, inlined string functions.  i486 version.
-   Copyright (C) 1997 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1998 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
@@ -373,7 +373,7 @@ __strlen_g (__const char *__str)
 		     : (char *) memcpy (dest, src, strlen (src) + 1))	      \
 		  : __strcpy_g (dest, src)))
 
-# define __strcpy_small(dest, src, srclen) \
+#define __strcpy_small(dest, src, srclen) \
   (__extension__ ({ unsigned char *__dest = (unsigned char *) (dest);	      \
 		    switch (srclen)					      \
 		      {							      \
@@ -1006,11 +1006,11 @@ __strrchr_c (__const char *__s, int __c)
      "1:\n\t"
      "lodsb\n\t"
      "cmpb	%%ah,%%al\n\t"
-     "cmovne	%%esi,%0\n\t"
+     "cmove	%%esi,%0\n\t"
      "testb	%%al,%%al\n\t"
      "jne 1b"
      : "=d" (__res)
-     : "0" (1), "S" (__s),"a" (__c)
+     : "0" (1), "S" (__s), "a" (__c)
      : "ax", "si", "cc");
   return __res - 1;
 }
@@ -1025,11 +1025,11 @@ __strrchr_g (__const char *__s, int __c)
      "1:\n\t"
      "lodsb\n\t"
      "cmpb	%%ah,%%al\n\t"
-     "cmovne	%%esi,%0\n\t"
+     "cmove	%%esi,%0\n\t"
      "testb	%%al,%%al\n\t"
      "jne 1b"
      : "=r" (__res)
-     : "0" (1), "S" (__s),"a" (__c)
+     : "0" (1), "S" (__s), "a" (__c)
      : "ax", "si", "cc");
   return __res - 1;
 }
diff --git a/sysdeps/unix/sysv/linux/accept.S b/sysdeps/unix/sysv/linux/accept.S
index b713a6e267..196634d46a 100644
--- a/sysdeps/unix/sysv/linux/accept.S
+++ b/sysdeps/unix/sysv/linux/accept.S
@@ -1,4 +1,5 @@
 #define	socket	accept
+#define	__socket __libc_accept
 #define	NARGS	3
 #include <socket.S>
-strong_alias (__accept, __libc_accept)
+weak_alias (__libc_accept, __accept)
diff --git a/sysdeps/unix/sysv/linux/alpha/syscalls.list b/sysdeps/unix/sysv/linux/alpha/syscalls.list
index 9406892124..17c55f0991 100644
--- a/sysdeps/unix/sysv/linux/alpha/syscalls.list
+++ b/sysdeps/unix/sysv/linux/alpha/syscalls.list
@@ -36,20 +36,20 @@ sys_mknod	xmknod	mknod		3	__syscall_mknod
 
 # override select.S in parent directory:
 select		-	select		5	__select	select
-accept		-	accept		3	__accept	accept
+accept		-	accept		3	__libc_accept	__accept accept
 bind		-	bind		3	__bind		bind
-connect		-	connect		3	__connect	connect
+connect		-	connect		3	__libc_connect	__connect connect
 getpeername	-	getpeername	3	__getpeername	getpeername
 getsockname	-	getsockname	3	__getsockname	getsockname
 getsockopt	-	getsockopt	5	__getsockopt	getsockopt
 listen		-	listen		2	__listen	listen
-recv		-	recv		4	__recv		recv
-recvfrom	-	recvfrom	6	__recvfrom	recvfrom
-recvmsg		-	recvmsg		3	__recvmsg	recvmsg
+recv		-	recv		4	__libc_recv	__recv recv
+recvfrom	-	recvfrom	6	__libc_recvfrom	__recvfrom recvfrom
+recvmsg		-	recvmsg		3	__libc_recvmsg	__recvmsg recvmsg
 ptrace		-	ptrace		4	__ptrace	ptrace
-send		-	send		4	__send		send
-sendmsg		-	sendmsg		3	__sendmsg	sendmsg
-sendto		-	sendto		6	__sendto	sendto
+send		-	send		4	__libc_send	__send send
+sendmsg		-	sendmsg		3	__libc_sendmsg	__sendmsg sendmsg
+sendto		-	sendto		6	__libc_sendto	__sendto sendto
 setsockopt	-	setsockopt	5	__setsockopt	setsockopt
 shutdown	-	shutdown	2	__shutdown	shutdown
 socketpair	-	socketpair	4	__socketpair	socketpair
diff --git a/sysdeps/unix/sysv/linux/arm/socket.S b/sysdeps/unix/sysv/linux/arm/socket.S
index 4d877e51d5..1940061dda 100644
--- a/sysdeps/unix/sysv/linux/arm/socket.S
+++ b/sysdeps/unix/sysv/linux/arm/socket.S
@@ -31,8 +31,12 @@
 
    The .S files for the other calls just #define socket and #include this.  */
 
-.globl P(__,socket)
-ENTRY (P(__,socket))
+#ifndef __socket
+#define __socket P(__,socket)
+#endif
+
+.globl __socket
+ENTRY (__socket)
 
         /* Do the system call trap.  */
 	swi SYS_ify(socketcall)
@@ -44,6 +48,6 @@ ENTRY (P(__,socket))
 	/* Successful; return the syscall's value.  */
 	RETINSTR(mov,pc,r14)
 
-PSEUDO_END (P(__,socket))
+PSEUDO_END (__socket)
 
-weak_alias (P(__,socket), socket)
+weak_alias (__socket, socket)
diff --git a/sysdeps/unix/sysv/linux/connect.S b/sysdeps/unix/sysv/linux/connect.S
index 2840c58174..d1dd69a217 100644
--- a/sysdeps/unix/sysv/linux/connect.S
+++ b/sysdeps/unix/sysv/linux/connect.S
@@ -1,4 +1,5 @@
 #define	socket	connect
+#define __socket __libc_connect
 #define	NARGS	3
 #include <socket.S>
-strong_alias (__connect, __libc_connect)
+weak_alias (__libc_connect, __connect)
diff --git a/sysdeps/unix/sysv/linux/i386/socket.S b/sysdeps/unix/sysv/linux/i386/socket.S
index 7c539e17d2..f649470122 100644
--- a/sysdeps/unix/sysv/linux/i386/socket.S
+++ b/sysdeps/unix/sysv/linux/i386/socket.S
@@ -31,8 +31,12 @@
 
    The .S files for the other calls just #define socket and #include this.  */
 
-.globl P(__,socket)
-ENTRY (P(__,socket))
+#ifndef __socket
+#define __socket P(__,socket)
+#endif
+
+.globl __socket
+ENTRY (__socket)
 
 	/* Save registers.  */
 	movl %ebx, %edx
@@ -56,6 +60,6 @@ ENTRY (P(__,socket))
 	/* Successful; return the syscall's value.  */
 	ret
 
-PSEUDO_END (P(__,socket))
+PSEUDO_END (__socket)
 
-weak_alias (P(__,socket), socket)
+weak_alias (__socket, socket)
diff --git a/sysdeps/unix/sysv/linux/m68k/socket.S b/sysdeps/unix/sysv/linux/m68k/socket.S
index 51aaa4b6f9..81e5a213dd 100644
--- a/sysdeps/unix/sysv/linux/m68k/socket.S
+++ b/sysdeps/unix/sysv/linux/m68k/socket.S
@@ -31,8 +31,12 @@
 
    The .S files for the other calls just #define socket and #include this.  */
 
-.globl P(__,socket)
-ENTRY (P(__,socket))
+#ifndef __socket
+#define __socket P(__,socket)
+#endif
+
+.globl __socket
+ENTRY (__socket)
 
 	/* Save registers.  */
 	move.l %d2, %a0
@@ -56,6 +60,6 @@ ENTRY (P(__,socket))
 
 	/* Successful; return the syscall's value.  */
 	rts
-PSEUDO_END (P(__,socket))
+PSEUDO_END (__socket)
 
-weak_alias (P(__,socket), socket)
+weak_alias (__socket, socket)
diff --git a/sysdeps/unix/sysv/linux/mips/syscalls.list b/sysdeps/unix/sysv/linux/mips/syscalls.list
index 6dd9cd81c5..1c9c095ed3 100644
--- a/sysdeps/unix/sysv/linux/mips/syscalls.list
+++ b/sysdeps/unix/sysv/linux/mips/syscalls.list
@@ -16,19 +16,19 @@ sigsuspend	-	sigsuspend	1	__sigsuspend	sigsuspend
 # Socket functions; Linux/MIPS doesn't use the socketcall(2) wrapper;
 # it's provided for compatibility, though.
 #
-accept		-	accept		3	__accept	accept
+ccept		-	accept		3	__libc_accept	__accept accept
 bind		-	bind		3	__bind		bind
-connect		-	connect		3	__connect	connect
+connect		-	connect		3	__libc_connect	__connect connect
 getpeername	-	getpeername	3	__getpeername	getpeername
 getsockname	-	getsockname	3	__getsockname	getsockname
 getsockopt	-	getsockopt	5	__getsockopt	getsockopt
 listen		-	listen		2	__listen	listen
-recv		-	recv		4	__recv		recv
-recvfrom	-	recvfrom	6	__recvfrom	recvfrom
-recvmsg		-	recvmsg		3	__recvmsg	recvmsg
-send		-	send		4	__send		send
-sendmsg		-	sendmsg		3	__sendmsg	sendmsg
-sendto		-	sendto		6	__sendto	sendto
+recv		-	recv		4	__libc_recv	__recv recv
+recvfrom	-	recvfrom	6	__libc_recvfrom	__recvfrom recvfrom
+recvmsg		-	recvmsg		3	__libc_recvmsg	__recvmsg recvmsg
+send		-	send		4	__libc_send	__send send
+sendmsg		-	sendmsg		3	__libc_sendmsg	__sendmsg sendmsg
+sendto		-	sendto		6	__libc_sendto	__sendto sendto
 setsockopt	-	setsockopt	5	__setsockopt	setsockopt
 shutdown	-	shutdown	2	__shutdown	shutdown
 socket		-	socket		3	__socket	socket
diff --git a/sysdeps/unix/sysv/linux/net/if.h b/sysdeps/unix/sysv/linux/net/if.h
index 468fed23e6..dd33af0337 100644
--- a/sysdeps/unix/sysv/linux/net/if.h
+++ b/sysdeps/unix/sysv/linux/net/if.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998 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
@@ -28,24 +28,40 @@
 enum
   {
     IFF_UP = 0x1,		/* Interface is up.  */
+#define IFF_UP	IFF_UP
     IFF_BROADCAST = 0x2,	/* Broadcast address valid.  */
+#define IFF_BROADCAST	IFF_BROADCAST
     IFF_DEBUG = 0x4,		/* Turn on debugging.  */
+#define IFF_DEBUG	IFF_DEBUG
     IFF_LOOPBACK = 0x8,		/* Is a loopback net.  */
+#define IFF_LOOPBACK	IFF_LOOPBACK
     IFF_POINTOPOINT = 0x10,	/* Interface is point-to-point link.  */
+#define IFF_POINTOPOINT	IFF_POINTOPOINT
     IFF_NOTRAILERS = 0x20,	/* Avoid use of trailers.  */
+#define IFF_NOTRAILERS	IFF_NOTRAILERS
     IFF_RUNNING = 0x40,		/* Resources allocated.  */
+#define IFF_RUNNING	IFF_RUNNING
     IFF_NOARP = 0x80,		/* No address resolution protocol.  */
+#define IFF_NOARP	IFF_NOARP
     IFF_PROMISC = 0x100,	/* Receive all packets.  */
+#define IFF_PROMISC	IFF_PROMISC
+
     /* Not supported */
     IFF_ALLMULTI = 0x200,	/* Receive all multicast packets.  */
+#define IFF_ALLMULTI	IFF_ALLMULTI
 
     IFF_MASTER = 0x400,		/* Master of a load balancer.  */
+#define IFF_MASTER	IFF_MASTER
     IFF_SLAVE = 0x800,		/* Slave of a load balancer.  */
+#define IFF_SLAVE	IFF_SLAVE
 
     IFF_MULTICAST = 0x1000,	/* Supports multicast.  */
+#define IFF_MULTICAST	IFF_MULTICAST
 
     IFF_PORTSEL = 0x2000,	/* Can set media type.  */
+#define IFF_PORTSEL	IFF_PORTSEL
     IFF_AUTOMEDIA = 0x4000	/* Auto media select active.  */
+#define IFF_AUTOMEDIA	IFF_AUTOMEDIA
   };
 
 /* The ifaddr structure contains information about one address of an
diff --git a/sysdeps/unix/sysv/linux/netinet/ip_fw.h b/sysdeps/unix/sysv/linux/netinet/ip_fw.h
index 322467b5ff..2139c37ba7 100644
--- a/sysdeps/unix/sysv/linux/netinet/ip_fw.h
+++ b/sysdeps/unix/sysv/linux/netinet/ip_fw.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 92, 93, 95, 96, 97 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 93, 95, 96, 97, 98 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
@@ -125,6 +125,7 @@ struct ip_fw {
 #define IP_FW_OUT		2
 #define IP_FW_ACCT		3
 #define IP_FW_CHAINS		4	/* total number of ip_fw chains */
+#define IP_FW_MASQ		5
 
 #define IP_FW_INSERT		(IP_FW_BASE_CTL)
 #define IP_FW_APPEND		(IP_FW_BASE_CTL+1)
@@ -165,6 +166,11 @@ struct ip_fw {
 #define IP_ACCT_FLUSH		(IP_FW_FLUSH  | (IP_FW_ACCT << IP_FW_SHIFT))
 #define IP_ACCT_ZERO		(IP_FW_ZERO   | (IP_FW_ACCT << IP_FW_SHIFT))
 
+#define IP_FW_MASQ_INSERT	(IP_FW_INSERT | (IP_FW_MASQ << IP_FW_SHIFT))
+#define IP_FW_MASQ_ADD		(IP_FW_APPEND | (IP_FW_MASQ << IP_FW_SHIFT))
+#define IP_FW_MASQ_DEL		(IP_FW_DELETE | (IP_FW_MASQ << IP_FW_SHIFT))
+#define IP_FW_MASQ_FLUSH	(IP_FW_FLUSH  | (IP_FW_MASQ << IP_FW_SHIFT))
+
 struct ip_fwpkt
 {
   struct iphdr fwp_iph;			/* IP header */
@@ -177,6 +183,21 @@ struct ip_fwpkt
   char fwp_vianame[IFNAMSIZ];	        /* interface name */
 };
 
+#define IP_FW_MASQCTL_MAX 256
+#define IP_MASQ_MOD_NMAX  32
+
+struct ip_fw_masqctl
+{
+  int mctl_action;
+  union {
+    struct {
+      char name[IP_MASQ_MOD_NMAX];
+      char data[1];
+    } mod;
+  } u;
+};
+
+
 /*
  * timeouts for ip masquerading
  */
diff --git a/sysdeps/unix/sysv/linux/recv.S b/sysdeps/unix/sysv/linux/recv.S
index d895080f9a..cb9eb91b8c 100644
--- a/sysdeps/unix/sysv/linux/recv.S
+++ b/sysdeps/unix/sysv/linux/recv.S
@@ -1,4 +1,5 @@
 #define	socket	recv
+#define	__socket __libc_recv
 #define	NARGS	4
 #include <socket.S>
-strong_alias (__recv, __libc_recv)
+weak_alias (__libc_recv, __recv)
diff --git a/sysdeps/unix/sysv/linux/recvfrom.S b/sysdeps/unix/sysv/linux/recvfrom.S
index a2c94a71bc..93a3110d0a 100644
--- a/sysdeps/unix/sysv/linux/recvfrom.S
+++ b/sysdeps/unix/sysv/linux/recvfrom.S
@@ -1,4 +1,5 @@
 #define	socket	recvfrom
+#define	__socket __libc_recvfrom
 #define	NARGS	6
 #include <socket.S>
-strong_alias (__recvfrom, __libc_recvfrom)
+weak_alias (__libc_recvfrom, __recvfrom)
diff --git a/sysdeps/unix/sysv/linux/recvmsg.S b/sysdeps/unix/sysv/linux/recvmsg.S
index e5d8cdd16a..98be36be5b 100644
--- a/sysdeps/unix/sysv/linux/recvmsg.S
+++ b/sysdeps/unix/sysv/linux/recvmsg.S
@@ -1,4 +1,5 @@
 #define	socket	recvmsg
+#define	__socket __libc_recvmsg
 #define	NARGS	3
 #include <socket.S>
-strong_alias (__recvmsg, __libc_recvmsg)
+weak_alias (__libc_recvmsg, __recvmsg)
diff --git a/sysdeps/unix/sysv/linux/send.S b/sysdeps/unix/sysv/linux/send.S
index 5191265f62..3f5e00ce9e 100644
--- a/sysdeps/unix/sysv/linux/send.S
+++ b/sysdeps/unix/sysv/linux/send.S
@@ -1,4 +1,5 @@
 #define	socket	send
+#define	__socket __libc_send
 #define	NARGS	4
 #include <socket.S>
-strong_alias (__send, __libc_send)
+weak_alias (__libc_send, __send)
diff --git a/sysdeps/unix/sysv/linux/sendmsg.S b/sysdeps/unix/sysv/linux/sendmsg.S
index 6f511af1c7..c01d9b68e7 100644
--- a/sysdeps/unix/sysv/linux/sendmsg.S
+++ b/sysdeps/unix/sysv/linux/sendmsg.S
@@ -1,4 +1,5 @@
 #define	socket	sendmsg
+#define	__socket __libc_sendmsg
 #define	NARGS	3
 #include <socket.S>
-strong_alias (__sendmsg, __libc_sendmsg)
+weak_alias (__libc_sendmsg, __sendmsg)
diff --git a/sysdeps/unix/sysv/linux/sendto.S b/sysdeps/unix/sysv/linux/sendto.S
index b34a609a93..8717b2bac1 100644
--- a/sysdeps/unix/sysv/linux/sendto.S
+++ b/sysdeps/unix/sysv/linux/sendto.S
@@ -1,4 +1,5 @@
 #define	socket	sendto
+#define	__socket __libc_sendto
 #define	NARGS	6
 #include <socket.S>
-strong_alias (__sendto, __libc_sendto)
+weak_alias (__libc_sendto, __sendto)
diff --git a/sysdeps/unix/sysv/linux/siglist.c b/sysdeps/unix/sysv/linux/siglist.c
index 6bb8562899..43b229fc95 100644
--- a/sysdeps/unix/sysv/linux/siglist.c
+++ b/sysdeps/unix/sysv/linux/siglist.c
@@ -1,14 +1,14 @@
 #include <stddef.h>
 #include <signal.h>
 
-const char * const __new_sys_siglist[NSIG] =
+const char * const __new_sys_siglist[NSIG + 1] =
 {
 #define init_sig(sig, abbrev, desc)   [sig] desc,
 #include "siglist.h"
 #undef init_sig
 };
 
-const char * const __new_sys_sigabbrev[NSIG] =
+const char * const __new_sys_sigabbrev[NSIG + 1] =
 {
 #define init_sig(sig, abbrev, desc)   [sig] abbrev,
 #include "siglist.h"
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/socket.S b/sysdeps/unix/sysv/linux/sparc/sparc32/socket.S
index 4c65ac7f3c..8d6fd77c10 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/socket.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/socket.S
@@ -39,8 +39,12 @@
 
    The .S files for the other calls just #define socket and #include this.  */
 
-.globl P(__,socket)
-ENTRY (P(__,socket))
+#ifndef __socket
+#define __socket P(__,socket)
+#endif
+
+.globl __socket
+ENTRY (__socket)
 
 	/* Drop up to 6 arguments (recvfrom) into the memory allocated by
 	   the caller for varargs, since that's really what we have.  */
@@ -71,6 +75,6 @@ ENTRY (P(__,socket))
 
 1:	SYSCALL_ERROR_HANDLER
 
-END (P(__,socket))
+END (__socket)
 
-weak_alias (P(__,socket), socket)
+weak_alias (__socket, socket)
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
index ca142da29c..3f62a7cd53 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list
@@ -14,19 +14,19 @@ mmap		-	mmap		6	__mmap		mmap __mmap64 mmap64
 
 # Override select.S in parent directory:
 select		-	select		5	__select	select
-accept		-	accept		3	__accept	accept
+accept		-	accept		3	__libc_accept	__accept accept
 bind		-	bind		3	__bind		bind
-connect		-	connect		3	__connect	connect
+connect		-	connect		3	__libc_connect	__connect connect
 getpeername	-	getpeername	3	__getpeername	getpeername
 getsockname	-	getsockname	3	__getsockname	getsockname
 getsockopt	-	getsockopt	5	__getsockopt	getsockopt
 listen		-	listen		2	__listen	listen
-recv		-	recv		4	__recv		recv
-recvfrom	-	recvfrom	6	__recvfrom	recvfrom
-recvmsg		-	recvmsg		3	__recvmsg	recvmsg
-send		-	send		4	__send		send
-sendmsg		-	sendmsg		3	__sendmsg	sendmsg
-sendto		-	sendto		6	__sendto	sendto
+recv		-	recv		4	__libc_recv	__recv recv
+recvfrom	-	recvfrom	6	__libc_recvfrom	__recvfrom recvfrom
+recvmsg		-	recvmsg		3	__libc_recvmsg	__recvmsg recvmsg
+send		-	send		4	__libc_send	__send send
+sendmsg		-	sendmsg		3	__libc_sendmsg	__sendmsg sendmsg
+sendto		-	sendto		6	__libc_sendto	__sendto sendto
 setsockopt	-	setsockopt	5	__setsockopt	setsockopt
 shutdown	-	shutdown	2	__shutdown	shutdown
 socketpair	-	socketpair	4	__socketpair	socketpair
diff --git a/time/africa b/time/africa
index 4b56816f40..8286e6f62f 100644
--- a/time/africa
+++ b/time/africa
@@ -1,4 +1,4 @@
-# @(#)africa	7.22
+# @(#)africa	7.23
 
 # This data is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
@@ -301,7 +301,7 @@ Zone	Africa/Maseru	1:50:00 -	LMT	1903 Mar
 # Liberia
 # From Paul Eggert <eggert@twinsun.com> (1993-11-18):
 # In 1972 Liberia was the last country to switch
-# from a GMT offset that was not a multiple of 15 minutes.
+# from a UTC offset that was not a multiple of 15 minutes.
 # Howse reports that it was in honor of their president's birthday.
 # Shanks reports the date as May 1, whereas Howse reports Jan; go with Shanks.
 # For Liberia before 1972, Shanks reports -0:44, whereas Howse and Whitman
diff --git a/time/antarctica b/time/antarctica
index 75d2cf63e4..1e6e73eff2 100644
--- a/time/antarctica
+++ b/time/antarctica
@@ -1,9 +1,16 @@
-# @(#)antarctica	7.10
+# @(#)antarctica	7.12
 
 # From Paul Eggert (1997-03-28):
 # To keep things manageable, we list only locations occupied year-round;
-# see <URL:http://earth.agu.org/amen/nations.html> (1996-05-24)
-# and <URL:http://www.spri.cam.ac.uk/bob/periant.htm> (1996-09-05).
+# see
+# <a href="http://earth.agu.org/amen/nations.html">
+# Antarctic Activities of Member Nations of the Antarctic Treaty (1996-05-24)
+# </a>
+# and
+# <a href="http://www.spri.cam.ac.uk/bob/periant.htm">
+# Summary of the Peri-Antarctic Islands (1996-09-05)
+# </a>
+# for information.
 # Unless otherwise specified, we have no time zone information.
 #
 # Except for the French entries,
@@ -43,8 +50,12 @@ Zone Antarctica/Casey	0	-	___	1969
 Zone Antarctica/Mawson	0	-	___	1954 Feb 13
 			6:00	-	MAWT	# Mawson Time
 # References:
-# <URL:http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html> (1996-07-15)
-# <URL:http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html> (1996-04-19)
+# <a href="http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html">
+# http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html (1996-07-15)
+# </a>
+# <a href="http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html">
+# http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html (1996-04-19)
+# </a>
 
 # Brazil - year-round base
 # Ferraz, King George Island, since 1983/4
@@ -92,7 +103,9 @@ Zone Antarctica/DumontDUrville 0 -	___	1947
 			0	-	___	1956 Nov
 			10:00	-	DDUT	# Dumont-d'Urville Time
 # Reference:
-# <URL:http://www.icair.iac.org.nz/science/reports/fr/IFRTP.html> (1996-09-10)
+# <a href="http://www.icair.iac.org.nz/science/reports/fr/IFRTP.html">
+# Support and Development of Polar Research and Technology (1996-09-10)
+# </a>
 
 
 # Germany - year-round base
@@ -198,8 +211,11 @@ Zone Antarctica/McMurdo	0	-	___	1956
 # which was on GMT+12 because New Zealand was on GMT+12 all year
 # at that time (1957).  (Source: Siple's book 90 degrees SOUTH.)
 #
-# From Susan Smith <URL:http://www.cybertours.com/whs/pole10.html>
-# (1995-11-13 16:24:56 +1300): We use the same time as McMurdo does.
+# From Susan Smith
+# <a href="http://www.cybertours.com/whs/pole10.html">
+# http://www.cybertours.com/whs/pole10.html (1995-11-13 16:24:56 +1300):
+# </a>
+# We use the same time as McMurdo does.
 # And they use the same time as Christchurch, NZ does....
 # One last quirk about South Pole time.
 # All the electric clocks are usually wrong.
diff --git a/time/asia b/time/asia
index 34960d88e6..c7180eb408 100644
--- a/time/asia
+++ b/time/asia
@@ -1,4 +1,4 @@
-# @(#)asia	7.33
+# @(#)asia	7.35
 
 # This data is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
@@ -352,8 +352,11 @@ Zone Asia/Jayapura	9:22:48 -	LMT	1932 Nov
 
 # Iran
 # From Paul Eggert (1996-12-17), following up a suggestion by Rich Wales:
-# Ahmad Alavi <URL:http://tehran.stanford.edu/Iran_Lib/Calendar/taghveem.txt>
-# (1993-08-04) writes ``Daylight saving time in Iran starts from the first day
+# Ahmea Alavi in
+# <a href="http://tehran.stanford.edu/Iran_Lib/Calendar/taghveem.txt">
+# http://tehran.stanford.edu/Iran_Lib/Calendar/taghveem.txt (1993-08-04)
+# </a>
+# writes ``Daylight saving time in Iran starts from the first day
 # of Farvardin and ends the first day of Mehr.''  This disagrees with the SSIM:
 #
 #		   DST start	   DST end
@@ -503,7 +506,8 @@ Rule	Zion	1987	only	-	Sep	13	0:00	0	S
 Rule	Zion	1988	only	-	Apr	 9	0:00	1:00	D
 Rule	Zion	1988	only	-	Sep	 3	0:00	0	S
 
-# From Ephraim Silverberg (ephraim@cs.huji.ac.il), 1997-03-04:
+# From Ephraim Silverberg <ephraim@cs.huji.ac.il>
+# (1997-03-04 and 1997-12-31):
 
 # According to the Office of the Secretary General of the Ministry of
 # Interior, there is NO set rule for Daylight-Savings/Standard time changes.
@@ -544,16 +548,18 @@ Rule	Zion	1995	only	-	Sep	 3	0:00	0	S
 
 # The dates for 1996 were determined by the Minister of Interior of the
 # time, Haim Ramon.  The official announcement regarding 1996-1998
-# (with the dates for 1997 no longer being relevant) can be viewed at:
+# (with the dates for 1997-1998 no longer being relevant) can be viewed at:
 #
 #   ftp://ftp.huji.ac.il/pub/tz/announcements/1996-1998.ramon.ps.gz
 #
-# The dates for 1997 were altered by his successor, Rabbi Eli Suissa.
-# No changes have been made regarding 1998 as of yet.
-#
+# The dates for 1997-1998 were altered by his successor, Rabbi Eli Suissa.
 # The official announcement for the year 1997 can be viewed at:
 #
 #   ftp://ftp.huji.ac.il/pub/tz/announcements/1997.ps.gz
+#
+# According to the Office of the Spokeswoman for the Ministry of Interior,
+# the dates for 1998 are tentative and are still subject to final approval
+# (probably in late February/early March of 1998).
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Zion	1996	only	-	Mar	15	0:00	1:00	D
@@ -561,14 +567,14 @@ Rule	Zion	1996	only	-	Sep	16	0:00	0	S
 Rule	Zion	1997	only	-	Mar	21	0:00	1:00	D
 Rule	Zion	1997	only	-	Sep	14	0:00	0	S
 Rule	Zion	1998	only	-	Mar	20	0:00	1:00	D
-Rule	Zion	1998	only	-	Oct	18	0:00	0	S
+Rule	Zion	1998	only	-	Sep	 6	0:00	0	S
 
-# From Paul Eggert (1997-03-15):
+# From Paul Eggert (1998-01-12):
 # Here are guesses for rules after 1998.
 # They are probably wrong, but they are more likely than no DST at all.
 # Rule  NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule	Zion	1999	max	-	Mar	Fri>=15	0:00	1:00	D
-Rule	Zion	1999	max	-	Sep	Sun>=15	0:00	0	S
+Rule	Zion	1999	max	-	Sep	Sun>=1	0:00	0	S
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Jerusalem	2:20:56 -	LMT	1880
@@ -774,7 +780,9 @@ Zone	Indian/Maldives	4:54:00 -	LMT	1880	# Male
 
 # Mongolia
 # Shanks says that Mongolia has three time zones, but usno1995 and
-# <URL:http://www.odci.gov/cia/publications/95fact/802389h.gif> (1995)
+# <a href="http://www.odci.gov/cia/publications/95fact/802389h.gif">
+# http://www.odci.gov/cia/publications/95fact/802389h.gif (1995)
+# </a>
 # both say that it has just one.
 # Let's comment out the western and eastern Mongolian time zones
 # till we know what their principal towns are.
@@ -881,13 +889,18 @@ Zone	Asia/Singapore	6:55:24 -	LMT	1880
 
 # Sri Lanka
 # From Paul Eggert (1996-09-03):
-# <URL:http://www.virtual-pc.com/lankaweb/news/items/240596-2.html> (1996-05-24)
+# <a href="http://www.virtual-pc.com/lankaweb/news/items/240596-2.html">
+# http://www.virtual-pc.com/lankaweb/news/items/240596-2.html (1996-05-24)
+# </a>
 # reported ``the country's standard time will be put forward by one hour at
 # midnight Friday (1830 GMT) `in the light of the present power crisis'.''
 # Transitions before 1996 are from Shanks (1991).
 #
 # From Dharmasiri Senanayake, Sri Lanka Media Minister (1996-10-24), as quoted
-# in <URL:news:54rka5$m5h@mtinsc01-mgt.ops.worldnet.att.net> (1996-10-26):
+# in
+# <a href="news:54rka5$m5h@mtinsc01-mgt.ops.worldnet.att.net">
+# news:54rka5$m5h@mtinsc01-mgt.ops.worldnet.att.net (1996-10-26):
+# </a>
 # With effect from 12.30 a.m. on 26th October 1996
 # Sri Lanka will be six (06) hours ahead of GMT.
 
@@ -977,9 +990,13 @@ Zone	Asia/Tashkent	4:37:12 -	LMT	1924 May  2
 			5:00	-	UZT		    # Uzbekistan Time
 # Shanks has Tashkent using DST after 1991, but usno1995 says they don't.
 # Guess no DST after 1991.
-# <URL:http://www.odci.gov/cia/publications/95fact/802389h.gif> (1995)
+# <a href="http://www.odci.gov/cia/publications/95fact/802389h.gif">
+# http://www.odci.gov/cia/publications/95fact/802389h.gif (1995)
+# </a>
 # says that Uzbekistan has two time zones, but a cable
-# <URL:http://www.itaiep.doc.gov/bisnis/cables/960510uz.html> (1996-05-10)
+# <a href="http://www.itaiep.doc.gov/bisnis/cables/960510uz.html">
+# http://www.itaiep.doc.gov/bisnis/cables/960510uz.html (1996-05-10)
+# </a>
 # from the American Embassy in Tashkent implies that they have just one.
 
 # Vietnam
diff --git a/time/australasia b/time/australasia
index 2726a25d3d..5121cd32fd 100644
--- a/time/australasia
+++ b/time/australasia
@@ -1,4 +1,4 @@
-# @(#)australasia	7.37
+# @(#)australasia	7.39
 # This file also includes Pacific islands.
 
 # Notes are at the end of this file
@@ -303,7 +303,7 @@ Rule	NZ	1928	only	-	Nov	 4	2:00	0:30	HD
 Rule	NZ	1929	only	-	Oct	30	2:00	0:30	HD
 Rule	NZ	1930	1933	-	Mar	Sun>=15	2:00	0	S
 Rule	NZ	1930	1933	-	Oct	Sun>=8	2:00	0:30	HD
-# Whitman says DST went on and off during war years, and the base GMT offset
+# Whitman says DST went on and off during war years, and the base UT offset
 # didn't change until 1945 Apr 30; go with Shanks.
 Rule	NZ	1934	1940	-	Apr	lastSun	2:00	0	S
 Rule	NZ	1934	1939	-	Sep	lastSun	2:00	0:30	HD
@@ -509,6 +509,26 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # and perhaps the newspaper's `2:00' is referring to standard time.
 # For now we'll continue to assume 2:00s for changes since 1960.
 
+# From Eric Ulevik <eau@zip.com.au> (1998-01-05):
+# 
+# Here are some URLs to Australian time legislation. These URLs are stable,
+# and should probably be included in the data file. There are probably more
+# relevant entries in this database.
+# 
+# NSW (including LHI and Broken Hill):
+# <a href="http://www.austlii.edu.au/au/legis/nsw/consol_act/sta1987137/index.html">
+# http://www.austlii.edu.au/au/legis/nsw/consol_act/sta1987137/index.html
+# </a>
+# ACT
+# <a href="http://www.austlii.edu.au/au/legis/act/consol_act/consol_act/stasta1972279/i">
+# http://www.austlii.edu.au/au/legis/act/consol_act/consol_act/stasta1972279/i
+# </a>
+# ndex.html
+# SA
+# <a href="http://www.austlii.edu.au/au/legis/sa/consol_act/sta1898137/index.html">
+# http://www.austlii.edu.au/au/legis/sa/consol_act/sta1898137/index.html
+# </a>
+
 # Northern Territory
 
 # From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
diff --git a/time/etcetera b/time/etcetera
index a6a65db40a..cf1516fe2f 100644
--- a/time/etcetera
+++ b/time/etcetera
@@ -1,4 +1,4 @@
-# @(#)etcetera	7.8
+# @(#)etcetera	7.9
 
 # These entries are mostly present for historical reasons, so that
 # people in areas not otherwise covered by the tz files could "zic -l"
@@ -20,7 +20,7 @@ Link	Etc/GMT				Etc/GMT0
 
 # We use POSIX-style signedness in the names and output,
 # internal-style signedness in the specifications.
-# For example, TZ=Etc/GMT+4 corresponds to 4 hours _behind_ GMT;
+# For example, TZ=Etc/GMT+4 corresponds to 4 hours _behind_ UTC;
 # it is equivalent to TZ=GMT+4, which is implemented directly as per POSIX.
 
 # Earlier incarnations of this package were not POSIX-compliant,
diff --git a/time/europe b/time/europe
index 4e30ab4934..dbaa01f2f4 100644
--- a/time/europe
+++ b/time/europe
@@ -1,4 +1,4 @@
-# @(#)europe	7.49
+# @(#)europe	7.52
 
 # This data is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
@@ -141,299 +141,355 @@
 # If you can predict what Parliament will do, you should be in
 # politics making a fortune, not computing.
 
-# From Peter Ilieve <peter@memex.co.uk> (1993-09-03):
-#
-# Our Government...couldn't...make a decision after the 1989 consultation
-# exercise about the UK changing its timezone so it just let things drift
-# (different from deciding to keep the status quo).  According to the
-# Summer Time Order 1992 (SI 1992/1729) the dates of Summer Time for 1993
-# and 1994 are:
-#	Start		End
-# 1993	28 March	24 October
-# 1994	27 March	23 October
-# All start and end times are at 01:00 GMT.
-#
-# There [was] an error in your tables for the start and end times prior to 1981.
-# The UK always used to change at 02:00 GMT. In 1981 it changed to 01:00 GMT
-# as a part of EC harmonisation and has remained at that time since.
-#
-# I have found the default algorithm for UK Summer Time, it is in the
-# Summer Time Act 1972. Section 1 states that in the absence of an Order
-# in Council Summer Time starts at 02:00 GMT on the morning of the day
-# after the third Saturday in March, unless that day is Easter Day, in
-# which case it is the morning of the day after the second Saturday.
-# It ends at 02:00 GMT on the morning of the day after the fourth Saturday
-# in October. (All the redundant `morning of the day ...' is in the Act.)
-# This is only of passing interest now as it will always be overridden by
-# an Order in Council (a Statutory Instrument, the SI thing mentioned above)
-# to specify the EC specified dates.
-
-# From Peter Ilieve <peter@memex.co.uk> (1993-10-18):
-#
-# My contact in the Ministry of Defence Public Relations department
-# accepted the challenge of looking into this and produced the following,
-# from Hansard (the official record of the UK Parliament), Oral Answers,
-# 1 March 1945, cols 1559--60:
-#
-# `58. Major Sir Goronwy Owen asked the Secretary of State for the Home
-# Department if he is now able to state the Government's proposals
-# regarding double summer time.
-#
-# [two other similar questions omitted]
-#
-# Mr. H. Morrison: The Government, in reviewing the matter, have
-# considered, [...] the conclusion has been reached that the adoption of
-# double summer time from the beginning of April is essential to the
-# maintenance of the war effort. [...] As 1st April is Easter Sunday,
-# when very early services are held in many churches, it is proposed that
-# double summer time shall start not in the night preceding Easter
-# Sunday, but in the night of Sunday- Monday so that it will operate from
-# Monday, 2nd April.'
-
 # From Chris Carrier <72157.3334@CompuServe.COM> (1996-06-14):
 # I remember reading in various wartime issues of the London Times the
 # acronym BDST for British Double Summer Time.  Look for the published
 # time of sunrise and sunset in The Times, when BDST was in effect, and
 # if you find a zone reference it will say, "All times B.D.S.T."
 
-# From Peter Ilieve <peter@memex.co.uk> (1993-09-03):
-#
-# > # Current rules
-# > Rule GB-Eire 1981	max	-	Mar	lastSun	1:00s	1:00	BST
-# > Rule GB-Eire 1981	max	-	Oct	Sun>=23	1:00s	0	GMT
+# From Peter Ilieve <peter@aldie.co.uk> (1998-01-12):
+# The following list attempts to show the complete history of Summer Time
+# legislation in the United Kingdom, and has quite a bit to say about
+# the Isle of Man and the Channel Islands as well.
 #
-# The ending rule here doesn't match the EC rules, which specify the fourth
-# Sunday in October for the UK and Eire. The `fourth Sunday' rule wasn't
-# followed in 1989, but then the sixth EC directive wasn't in force then
-# and I don't know what previous ones said. 1995 is the next year with
-# the 4th Sun on 22 Oct, but that year isn't covered by the UK Summer Time
-# Order or the sixth EC directive. Your Oct Sun>=23 rule matches history
-# and with things only announced for 2 years or so in advance who knows
-# what will happen.
+# Things that I have not personally seen are marked (???). Things that
+# I haven't seen but Joseph Myers has are marked (jsm). The problem
+# with finding old Orders (rather than Acts) is that nobody seems to
+# keep the actual documents themselves, not even the Government. They
+# get bound into annual volumes, which are published, but by the time
+# this happens the Orders are mainly spent as the years they refer
+# to have come and gone, so they don't get included in the annual
+# volumes.
 #
-# There are renewed rumours that the Government here will make another
-# attempt at resolving this issue, which is what prompted me to start
-# asking the Home Office and the EC about it again. The EC categorically
-# state they are not asking anybody to change timezone, they only want
-# common start/end dates. The UK Govt. seem to want to change our zone
-# and blame the resulting fuss on the EC. Me, I think we should scrap
-# summer time completely, noon is when the Sun is overhead, and that should
-# be the end of it.
-
-# From Peter Ilieve <peter@memex.co.uk> (1993-10-22):
+# Thanks are due to my learned legal friend Lorna Montgomerie, who dug out
+# the dusty old statutes, to Melanie Allison of the Ministry of Defence,
+# who provided the wartime regulations and a snippet of Hansard explaining
+# why double summer time started on a Monday in 1945 (it was Easter),
+# and to Joseph Myers <jsm28@cam.ac.uk>, who tracked down the Orders
+# up to 1945, some of the old Acts, and the first five EC Directives.
 #
-# I now have the text of the Summer Time Act 1916, the granddaddy of them all.
-# It is headed: `An Act to provide for the Time in Great Britain and Ireland
-# being in advance of Greenwich and Dublin mean time respectively in the
-# summer months'.
+# Some definitions:
 #
-# It specifies 21 May and 1 October for 1916 (both at 02:00 GMT) and whatever
-# dates an Order in Council may specify for subsequent years.
+# Great Britain: England, Scotland and Wales
+# United Kingdom: Great Britain plus Ireland (up to 1922) or Northern
+# Ireland (since 1922)
+# S.I.: Statutory Instrument, the modern name for secondary legislation
+# S.R.&O.: Statutory Rules and Orders, the older name for secondary legislation
 #
-# Section 4 states: `This act shall apply to Ireland in like manner as it
-# applies to Great Britain, with the substitution however of references
-# to Dublin mean time for references to Greenwich mean time.'
+# Unless otherwise specified, Acts and secondary legislation are assumed
+# to apply throughout the United Kingdom, but not to the Isle of Man
+# or the Channel Islands.
 #
-# Lorna, my learned legal friend who supplied it, also offers this quote
-# from Halsbury's Statutes on the extent of Acts:
+# Some of the Acts and Orders I found in various libraries, and I don't
+# have copies. When I looked at them I was looking for dates and not things
+# like whether they applied to the Bailiwick of Jersey. I will try to
+# check these documents again.
 #
-# `An Act of the United Kingdom Parliament is to be construed prima facie
-# to apply to the whole of the United Kingdom and not to any place outside.
-# [...] The expression "United Kingdom" for this purpose includes (since
-# 1922) Great Britain (ie. England, Wales and Scotland) and Northern Ireland,
-# but it does not include the Channel Islands or the Isle of Man.'
+# ---
 #
-# She goes on to say the seminal event of 1922 was the establishment of
-# the Irish Free State, now called Eire.
+# - The Statutes (Definition of Time) Act, 1880 (43 & 44 Vict. c. 9)
 #
-# The Act doesn't say anything about Wales (or Scotland) so I would assert
-# that Shanks is wrong here. I would like to know why he thinks Wales
-# was different.
+# Defined Greenwich mean time to be the standard time in Great Britain
+# and Dublin mean time to be the standard time in Ireland, superseding
+# various forms of local mean time.
 #
-# It also confirms the fact that Ireland followed Dublin time back then,
-# and 25 minutes behind Greenwich, as Shanks has it, would be correct.
-
-# From Peter Ilieve <peter@memex.co.uk> (1993-10-28):
+# - The Statutory Time Act, 1883 (???)
 #
-# I now have before me, thanks to my learned legal friend Lorna, the text of
-# the Time (Ireland) Act 1916.
+# An Act of Tynwald, the Isle of Man Parliament. It appears to have
+# defined the standard time on the Isle of Man as GMT but as I haven't
+# seen it I don't know if it used Greenwich mean time, some other definition,
+# or just said that Isle of Man time would be the same as in Great Britain.
 #
-# It says that as from 2 AM Dublin Mean Time on 1 October 1916 the time
-# for general purposes in Ireland shall be the same as the rest of Great
-# Britain (ie. GMT with the Summer Time periods specified by the Summer Time
-# Act 1916)....  As Ireland was behind GMT/BST at 02:00 DMT on 1 Oct GB would
-# have already put the clocks back. Using DST as Dublin Summer Time the
-# sequence would have been:
-# Dublin		London
-# 02:34 DST	02:59 BST
-# 02:35 DST	02:00 GMT
-# 02:59 DST	02:24 GMT
-# 02:25 GMT	02:25 GMT
-# with the transition 03:00 DST -> 02:00 DMT -> 02:25 GMT all at once.
+# - The Isle of Man (War Legislation) Act, 1914 (4 & 5 Geo. 5. c. 62) (???)
 #
-# In a table of repeals in the Schedule to the Act it mentions the
-# Statutes (Definition of Time) Act 1880. This is presumably the source
-# of the 1880 date in Shanks.  The little bit of it that is repealed
-# also refers solely to Ireland and Dublin Mean Time.
-
-# From Peter Ilieve <peter@memex.co.uk> (1993-10-29):
+# Gives the power, by Order in Council, to extend wartime legislation
+# to the Isle of Man.
+#
+# - The Summer Time Act, 1916 (6 & 7 Geo. 5. c. 14)
+#
+# Introduced Summer Time for the first time, in Great Britain and Ireland.
+# Specified a one hour offset from GMT (DMT in Ireland), dates of
+# Sunday 21 May and Sunday 1 October and times of 02:00 (GMT/DMT).
+# Gave a power to make Orders in subsequent years, for the duration
+# of the then current war.
+#
+# - The Time (Ireland) Act, 1916 (6 & 7 Geo. 5. c. 45)
+#
+# This abolished Dublin mean time at 02:00 DMT on Sunday 1 October 1916,
+# bringing the whole of the United Kingdom onto GMT. As Ireland was behind
+# GMT/BST at 02:00 DMT on 1 Oct Great Britain had already put the clocks back.
+# Using Paul Eggert's suggestion of IST for Irish Summer Time and the figure
+# derived from Whitman for the offset of IST from GMT (00:34:39) the sequence
+# would have been:
+# Dublin        London
+# 02:34:38 IST  02:59:59 BST
+# 02:34:39 IST  02:00:00 GMT
+# 02:59:59 IST  02:25:20 GMT
+# 02:25:21 GMT  02:25:21 GMT
+# with the transition 03:00:00 IST -> 02:00:00 DMT -> 02:25:21 GMT all at once.
+#
+# - S.R.&O. 1916, No. 382
+#
+# An Order made under the Isle of Man (War Legislation) Act, 1914
+# extending the Summer Time Act, 1916 to the Isle of Man. Dated
+# 23 May 1916, two days after the start of Summer Time, but it says that
+# the Act is deemed to have taken effect in the Isle of Man at the same
+# time as it took effect in the United Kingdom.
+#
+# - S.R.&O. 1917, No. 362
+#
+# An Order made under the Summer Time Act, 1916 giving dates
+# for Summer Time in 1917 of Sunday 8 April to Monday 17 September,
+# both at 02:00 GMT. Note that Summer Time ends on a Monday.
+#
+# - S.R.&O. 1917, No. 358
+#
+# An Order made under the Summer Time (Isle of Man) Act, 1916
+# (the thing created by S.R.&O. 1916, No. 382) specifying the same
+# dates of 8 April to 17 September, at 02:00 GMT for the Isle of Man.
+#
+# - S.R.&O. 1918, No. 274
+#
+# An Order made under the Summer Time Act, 1916 giving dates
+# for Summer Time in 1918 of Sunday 24 March to Monday 30 September,
+# both at 02:00 GMT.
+#
+# - S.R.&O. 1918, No. 429
+#
+# The matching Isle of Man Order for 1918 with the same dates and times.
+#
+# - S.R.&O. 1919, No. 297
+#
+# An Order made under the Summer Time Act, 1916 giving dates
+# for Summer Time in 1919 of Sunday 30 March to Monday 29 September,
+# both at 02:00 GMT.
+#
+# - S.R.&O. 1919, No. 366
+#
+# The matching Isle of Man Order for 1919 with the same dates and times.
+#
+# - S.R.&O. 1920, No. 458
+#
+# An Order made under the Summer Time Act, 1916 giving dates
+# for Summer Time in 1920 of Sunday 28 March to Monday 27 September,
+# both at 02:00 GMT.
+#
+# - S.R.&O. 1920, No. 573
+#
+# The matching Isle of Man Order for 1920 with the same dates and times.
+#
+# - S.R.&O. 1920, No. 1844
+#
+# An Order modifying both S.R.&O. 1920, No. 458 and S.R.&O. 1920, No. 573 to
+# change the end date for Summer Time from Monday 27 September to
+# Monday 25 October (the time remaining 02:00 GMT). The 1989 Green
+# Paper (Cm 722) says this was done because of a coal strike.
+#
+# - The War Emergency Laws (Continuance) Act, 1920 (10 & 11 Geo. 5. c. 5) (???)
 #
-# My case is that, with the sole exception of Ireland in 1916 using Dublin
-# Mean Time, Summer Time has been uniform throughout the United Kingdom
-# ever since it first started in 1916.
+# This extends the power to make Orders under the Summer Time Act, 1916
+# for a period of 12 months after the termination of the war.
+# I haven't seen this one so I don't know when it came into force, or
+# when the law deemed the termination of the war to have been.
 #
-# The United Kingdom is England, Wales and Scotland plus all of Ireland from
-# 1916 up to and including 1921, or plus Northern Ireland from 1922 to date.
+# - S.R.&O. 1921, No. 363
 #
-# The dates used are those specified in the table in Summer Time: A Consultation
-# Document (Cm 722, 1989) that are now included in the europe file, with a
-# change to a single date, the start in 1924. I made a typo in my 1989 mail
-# and the table itself is also wrong.  The correct date is 13 April.
-# The times were 02:00 GMT up to and including 1980, 01:00 GMT from 1981 on,
-# except for wartime double summer time.
+# An Order made under the Summer Time Act, 1916 and the War
+# Emergency Laws (Continuance) Act, 1920 giving dates for Summer Time
+# in 1921 of Sunday 3 April to Monday 3 October, both at 02:00 GMT.
 #
-# As evidence I would cite:
+# - S.R.&O. 1921, No. 364
 #
-# - The Summer Time Act, 1916.
+# The matching Isle of Man Order for 1921 with the same dates and times.
 #
-# This specifically states that it applies to Ireland, specifies dates of
-# 21 May and 1 October and times of 02:00, and says that in Ireland the
-# times relate to Dublin mean time. It specifies an offset of 1 hour.
-#
-# - The Time (Ireland) Act, 1916
-#
-# This abolishes Dublin mean time on 02:00 DMT 1 October 1916.
-# It repeals that section of the Statutes (Definition of Time) Act, 1880
-# that specifies DMT. It is therefore a safe bet that DMT existed at least
-# from 1880 and was the only alternative standard time in the UK.
+# - S.R.&O. 1922, No. 264 (???)
 #
-# - The Summer Time Act, 1922
+# This probably defines Summer Time for 1922 as the Summer Time Act, 1922
+# was passed after the start date. Dates from Cm 722:
+#   1922: 26 March to 8 October
+#
+# - S.R.&O. 1922, No. 290 (???)
+#
+# This is probably the matching Isle of Man Order.
+#
+# - The Summer Time Act, 1922 (12 & 13 Geo. 5. c. 22)
 #
 # This specifies an offset of 1 hour and dates of the day after the third
 # Saturday in April, unless that be Easter, in which case it is the day after
 # the second Saturday, and the day after the third Saturday in September.
 # The time is 02:00 GMT. It applied in 1922 and 1923, and longer if Parliament
-# so approved.
+# so approved. It applied to the Isle of Man and the Channel Islands as well.
+# Came into Force on 20 July 1920. Note the reversion to ending on a Sunday.
+#
+# - S.R.&O. 1922, No. 1205
+#
+# An Order made under the War Emergency Laws (Continuance) Act, 1920
+# dated 13 October 1922. It revokes (among other things) the Order extending
+# the Summer Time Act, 1916 to the Isle of Man.
+#
+# - The Expiring Laws Continuance Act, 1923 (13 & 14 Geo. 5. c. 37) (jsm)
+#
+# This extended the Summer Time Act, 1922 (among other things) until
+# 31 December 1924.
+#
+# - The Expiring Laws Continuance Act, 1924 (15 Geo. 5. c. 1) (jsm)
 #
-# It specifically states that it applies to Northern Ireland, the Channel
-# Islands, and the Isle of Man.
+# This further extended the Summer Time Act, 1922 (among other things) until
+# 31 December 1925.
 #
-# - The Summer Time Act, 1925
+# - The Time Act (Northern Ireland), 1924 (14 & 15 Geo. 5. c. 24 (N.I.))
+#
+# This Act says that while it remains in force, any Act or Order relating
+# to the time for general purposes in Great Britain shall also apply
+# in Northern Ireland, and the Time (Ireland) Act, 1916 shall have effect
+# accordingly.
+#
+# - The Summer Time Act, 1925 (15 & 16 Geo. 5. c. 64)
 #
 # This makes the 1922 Act permanent, with a change to the end date to the
-# day after the first Saturday in October. It says nothing about extent,
-# so that part of the 1922 Act will still apply.
+# day after the first Saturday in October. Came into force on 7 August 1925.
+#
+# - The Emergency Powers (Defence) Act, 1939 (2 & 3 Geo. 6. c. 62) (???)
+#
+# I haven't seen this one. It presumably gave the Government powers to
+# do all manner of things during the newly started war.
 #
-# - The Defence (Summer Time) Regulations, 1939, SR&O 1939 No. 1379
-#   [SR&O == Statutory Regulation and Order]
+# - The Defence (Summer Time) Regulations, 1939, S.R.&O. 1939, No. 1379
 #
 # These were made under the Emergency Powers (Defence) Act, 1939.
-# It changes the end date to be the day after the third Saturday in November.
-# It makes consequential changes to some vehicle lighting legislation,
-# which includes the Motor Vehicles and Road Traffic (Northern Ireland) Act,
-# 1934, so it seems clear it applies in Northern Ireland.
+# They change the end date to be the day after the third Saturday in November.
 #
-# - An Order in Council amending the The Defence (Summer Time) Regulations,
-#   1939, SR&O 1940 No. 1883
+# - S.R.&O. 1940, No. 1883
 #
+# An Order in Council amending the Defence (Summer Time) Regulations, 1939.
 # This continues summer time throughout the year after it starts in 1940.
-# It says nothing about extent and has no consequential changes.
+# There was another Order (S.R.&O. 1940, No. 172) that I assume had merely
+# changed the dates, to start on 4 February, and was then superseded by this
+# one. I haven't seen No. 172 so I don't know what end date it would have
+# specified. The dates from Cm 722:
+#   1940: Summer Time starts on 4 February
 #
-# - An Order in Council amending the The Defence (Summer Time) Regulations,
-#   1939, SR&O 1941 No. 476
+# - S.R.&O. 1941, No. 476
 #
+# Another Order amending the Defence (Summer Time) Regulations, 1939.
 # This introduces double summer time, starting at 01:00 GMT on the day after
 # the first Saturday in May and ending at 01:00 GMT on the day after the
 # second Saturday in August, offset another hour from normal summer time,
-# which continues throughout the rest of the year. It goes on a lot about
-# consequential changes to agricultural wages legislation, and says in part
-# `... and in its application to Northern Ireland have effect as
-# if for the references to the Agricultural Wages (Regulation) Acts, 1924 and
-# 1940, there were substituted references to the Agricultural Wages (Regulation)
-# Acts (Northern Ireland), 1939 and 1940, ...'. It also has a similar section
-# for Scotland. Both sections substitute the local Agricultural Wages Board
-# for the Agricultural Wages Board for England and Wales, showing that
-# England and Wales were indivisible.
-#
-# - An Order in Council amending the The Defence (Summer Time) Regulations,
-#   1939, SR&O 1942 No. 506
-#
-# This changes the start date of double summer time to the day after the first
-# Saturday in April. It says nothing about extent.
-#
-# - An Order in Council amending the The Defence (Summer Time) Regulations,
-#   1939, SR&O 1944 No. 932
-#
-# This changed the end date of double summer time to 17 September 1944.
+# which continues throughout the rest of the year.
+#
+# - S.R.&O. 1942, No. 506
+#
+# Another Order amending the Defence (Summer Time) Regulations, 1939.
+# This changes the start date of Double Summer Time to the day after the first
+# Saturday in April, bringing it forward from May.
+#
+# - S.R.&O. 1944, No. 932
+#
+# This changed the end date of Double Summer Time to 17 September 1944.
 # (I don't have the text of this, just a note of what it did, the text almost
 # certainly had the `day after the nth Saturday' form.)
 #
-# (I am missing whatever regulations there were to change things in 1945
-# and the Summer Time Act, 1947.)
+# - S.R.&O. 1945, No. 312 (???)
 #
-# - The British Standard Time Act, 1968
+# Probably defines the dates of Double Summer Time in 1945.
+# I do have this quote from Hansard (the official record of the United Kingdom
+# Parliament), Oral Answers, 1 March 1945, cols 1559--60:
 #
-# This came into force on 27 October 1968 and continued summer time throughout
-# the year as an experiment until it expired on 31 October 1971.
-# There was no double summer time so we didn't have to change the clocks at all.
-# It specifically said it applied to Northern Ireland. It also said it
-# applied to Jersey, Guernsey and the Isle of Man unless they passed
-# measures saying it didn't.
+#  `58. Major Sir Goronwy Owen asked the Secretary of State for the Home
+#   Department if he is now able to state the Government's proposals
+#   regarding double summer time.
 #
-# - The Manx Time Act, 1968
+#   [two other similar questions omitted]
 #
-# This is an Act of Tynwald (the Isle of Man Parliament) that said that
-# henceforth Manx time would be the same as the time in Great Britain.
+#   Mr. H. Morrison: The Government, in reviewing the matter, have
+#   considered, [...] the conclusion has been reached that the adoption of
+#   double summer time from the beginning of April is essential to the
+#   maintenance of the war effort. [...] As 1st April is Easter Sunday,
+#   when very early services are held in many churches, it is proposed that
+#   double summer time shall start not in the night preceding Easter
+#   Sunday, but in the night of Sunday-Monday so that it will operate from
+#   Monday, 2nd April.'
 #
-# - The Summer Time Act, 1972
+# Cm 722 gives dates of:
+#   1945: Double Summer time: 2 April to 15 July
+#   1945: Summer Time ends on 7 October
 #
-# This specified a reversion to normal summer time behaviour with a start
-# date of the day after the third Saturday in March, unless that is Easter,
-# when it is the day after the second Saturday, and an end date of the day
-# after the fourth Saturday in October. Times are at 02:00 GMT, offset is
-# 1 hour.
+# - S.R.&O. 1945, No. 1208
 #
-# It has the same wording about extent as the British Standard Time Act, 1968,
-# applying to Northern Ireland unconditionally and to Jersey, Guernsey and the
-# Isle of Man if they don't do something about it.
+# An Order under the Emergency Powers (Defence) Acts, 1939 and 1940 revoking
+# a long list of things, including the Defence (Summer Time) Regulations, 1939.
+# This meant that Summer Time reverted to being set by the 1922 and 1925 Acts.
 #
-# (I am missing various Summer Time Orders that modified the 1972 Act to
-# harmonise with the EC since 1981. The major change is that the time changes
-# to 01:00 GMT.)
+# - The Summer Time Act, 1947 (10 & 11 Geo. 6. c. 16)
 #
-# - The Summer Time Order, 1992, SI 1992/1729 [SI == Statutory Instrument]
+# Came into force on 11 March 1947. Amended the Summer Time Acts, 1922 and
+# 1925 to change the dates of Summer Time and to introduce Double Summer Time
+# (although it doesn't give this, or any, name for this period of 2 hour
+# offset from GMT). Dates are given for 1947 only and are: 02:00 GMT Sunday
+# 16 March, 01:00 GMT Sunday 13 April, 01:00 GMT Sunday 10 August, and 02:00
+# Sunday 2 November. It gave a power to make Orders for subsequent years,
+# both to vary the dates and to continue Double Summer Time. It applied
+# to the Isle of Man and the Channel Islands.
 #
-# This specifies dates of:
-#       Start       End
-# 1993  28 March    24 October
-# 1994  27 March    23 October
-# All start and end times are at 01:00 GMT....
+# - Summer Time Order, 1948 (S.I. 1948/495) (???)
+# - Summer Time Order, 1949 (S.I. 1949/373) (???)
+# - Summer Time Order, 1950 (S.I. 1950/518) (???)
+# - Summer Time Order, 1951 (S.I. 1951/430) (???)
+# - Summer Time Order, 1952 (S.I. 1952/451) (???)
 #
-# - Some text on the extent of Acts, from Halsbury's Statutes
+# These presumably give the dates of Summer Time for the relevent years.
+# There was no Double Summer Time. The dates given in the 1989 Green Paper
+# for these years are:
+#   1948: 14 March to 31 October
+#   1949: 3 April to 30 October
+#   1950: 16 April to 22 October
+#   1951: 15 April to 21 October
+#   1952: 20 April to 26 October
+# After 1952 things revert back to the 1922 and 1925 Acts.
 #
-# `An Act of the United Kingdom Parliament is to be construed prima facie
-# to apply to the whole of the United Kingdom and not to any place outside.
-# [...] The expression "United Kingdom" for this purpose includes (since
-# 1922) Great Britain (ie. England, Wales and Scotland) and Northern Ireland,
-# but it does not include the Channel Islands or the Isle of Man.'
+# - The Interpretation Act (Northern Ireland), 1954 (1954 c. 33 (N.I.)) (???)
 #
-# So, many of these measures specifically include Northern Ireland,
-# the Channel Islands and the Isle of Man. None of them exclude any
-# part of the UK. The default interpretation of Acts is that they apply
-# throughout the UK.
+# I presume that section 39 of this Act is similar to section 9 of the
+# Interpretation Act, 1978 (listed below) in specifying GMT as the
+# legal time in Northern Ireland, replacing the Time (Ireland) Act, 1916.
 #
-# With that, I rest my case Milud :-)
+# - Summer Time Order, 1961 (S.I. 1961/71)
 #
-# Thanks are due to my learned legal friend Lorna Montgomerie, who dug out
-# the dusty old statutes, and to Melanie Allison of the Ministry of Defence,
-# who provided the wartime regulations and a snippet of Hansard explaining
-# why double summer time started on a Monday in 1945 (it was Easter).
-
-# From Peter Ilieve <peter@aldie.co.uk> (1996-05-29):
-# I have now got a copy of the British Standard Time Act 1968.
-# It says (S4(2)) that it expires at 02:00 GMT on 31 October 1971 unless
-# an Order in Council was passed in Parliament to make the Act permanent.
-# No Order was passed, so 02:00 1971-10-31 it is...
+# Specified dates of 26 March and 29 October (02:00 GMT) for 1961
+#
+# - Summer Time (1962) Order, 1961 (S.I. 1961/2465)
+#
+# Specified dates of 25 March to 28 October (02:00 GMT) for 1962.
+#
+# - Summer Time Order, 1963 (S.I. 1963/81)
+#
+# Specified dates of 31 March to 27 October (02:00 GMT) for 1963.
+#
+# - Summer Time (1964) Order, 1963 (S.I. 1963/2101)
+#
+# Specified dates of 22 March to 25 October (02:00 GMT) for 1964.
+#
+# - Summer Time Order, 1964 (S.I. 1964/1201)
+#
+# Specified dates for three years (all 02:00 GMT):
+#   1965: 21 March to 24 October
+#   1966: 20 March to 23 October
+#   1967: 19 March to 29 October
+#
+# - Summer Time Order, 1967 (S.I. 1967/1148)
+# - Summer Time Order, 1968 (S.I. 1968/117)
+#
+# The first of these specifies dates for 1968 of 18 February for the United
+# Kingdom but 7 April for the Isle of Man, both ending on 27 October,
+# all at 02:00 GMT. The second Order changes the Isle of Man start date
+# to 18 February to match the United Kingdom.
+#
+# - The British Standard Time Act 1968 (1968 c. 45)
+#
+# This came into force on 27 October 1968 and continued summer time throughout
+# the year. It expired at 02:00 GMT on 31 October 1971, as specified in the
+# Act, as Parliament did not move to make this experment permanent.
+# It applied to the Isle of Man and the Channel Islands.
 #
 # Interestingly, it says baldly `This Act shall come into force on
 # 27 October 1968', without giving a time. As S1 of the Act merely
@@ -443,218 +499,182 @@
 # possibly argue that the start time of BStandardT was 00:00 1968-10-27,
 # especially as the Act repealed the Summer Time Acts 1916--1947 in toto,
 # thereby destroying the authority of the Summer Time Order specifying
-# summer time in 1968....
-
-# From Peter Ilieve <peter@memex.co.uk> (1993-11-18)
-#
-# Here is a revised version of my tabrules file for the perl script I sent
-# before. I have personally verified the various Orders back to 1953 and
-# all the Acts.
-#
-# There are no changes to the dates we already have.
-#
-# My doubt about an early start in 1967 on 18 Feb was misplaced, the Order
-# does say 18 Feb. This is an interesting case as the first Order gave a
-# different date of 7 April 1967 for the Isle of Man but this was changed
-# before it came into effect by another Order for the Isle of Man alone.
-#
-# I don't think I will be able to find any more of the earlier Orders.
-# The annual volumes for 1949--52 do not contain the various Summer Time
-# Orders. They therefore don't appear in the index. They rate a mention in
-# italics in the numerical list at the start but that is all.
-# I think what happens is that the annual volume is produced well after the
-# end of the year in question, by which time the Summer Time Order is spent.
-# They assume that nobody would ever be stupid enough to want to see it
-# again so they leave it out.
-#
-# It might be a good idea to put this table, or the output of tabscript
-# showing all the moves because of Easter, in the europe file comments in
-# place of my old transcription of the Green Paper table [the UK Government
-# paper "Summer Time: A Consultation Document" (HMSO Cm722 June 1989)].
-#
-#		Peter Ilieve		peter@memex.co.uk
-#
-#
-# ## control file for tabscript, a program to generate UK summer time dates
-# ## matching the table in Cm 722, the 1989 Green Paper.
-# ## Lines like this are comments.
-# ## Lines with a single # at the start are copied into the output
-# ## Control lines are of the form
-# ## <years> <start date> <end date> <flags> <double start> <double end>
-# ## <years> is either a single year or a hyphen separated range, with --
-# ## also accepted as I use this in TeX a lot.
-# ## <start date> and <end date> are a digit followed bu a month name.
-# ## It is either an nth Saturday or an explicit date, depending on <flags>.
-# ## 0 and/or none are used when there is no date, as during 1968--71.
-# ## <flags> can contain `fixed' to indicate explicit dates and `double'
-# ## to indicate double summer time dates are present.
-# ## At present double requires fixed as well.
-# ## <double start> and <double end> are like the start and end dates, with
-# ## the exception of the 0 and/or none feature.
-#
-# ## Blank lines are also ignored.
-#
-# ## Places where I am uncertain, not having personally verified the dates
-# ## against the Act or Order, are marked ???
-# ## These dates are taken from the Cm 722 table.
-#
-# # Summer Time Act, 1916
-# 1916 21 May 1 October fixed
-#
-# ## I haven't yet looked for Orders for 1916--22 and I doubt I will find them.
-# # unknown Order or Orders ???
-# 1917 8 apr 17 sep fixed
-# 1918 24 mar 30 sep fixed
-# 1919 30 mar 29 sep fixed
-# # end date extended in 1920 from 27 Sep because of coal strike (from Cm 722)
-# 1920 28 mar 25 oct fixed
-# 1921 3 apr 3 oct fixed
-#
-# # Summer Time Act, 1922
-# # came into force 22 July 1922, too late for 1922, so missing Order ???
-# 1922 26 mar 8 oct fixed
-# 1923-1924 3 April 3 September
-#
-# # Summer Time Act, 1925
-# 1925--1938 3 April 1 October
-#
-# # Defence (Summer Time) Regulations, 1939
-# 1939 3 April 3 November
-# # 1940 amendment (SR&O 1940 Nos. 172 & 1883)
-# 1940 4 feb 0 none
-# # 1941 amendment (SR&O 1941 No. 476)
-# 1941 0 none 0 none fixed,double 4 may 10 aug
-# # 1942 amendment (SR&O 1942 No. 506)
-# 1942 0 none 0 none fixed,double 5 apr 9 aug
-# 1943 0 none 0 none fixed,double 4 apr 15 aug
-# # 1944 amendment (SR&O 1944 No. 932)
-# 1944 0 none 0 none fixed,double 2 apr 17 sep
-# # 1945 dates from Hansard, Oral Answers, 1 March 1945
-# 1945 0 none 7 oct fixed,double 2 apr 15 jul
-#
-# # reversion to Summer Time Act, 1925
-# 1946 3 April 1 October
-#
-# # Summer Time Act, 1947
-# # Fixed dates for 1947 only, gives power to have double summer time
-# 1947 16 mar 2 nov fixed,double 13 apr 10 aug
-# ## I can't find any trace of the Order for 1948.
-# # Unknown Order ???
-# 1948 14 mar 31 oct fixed
-# ## I know the numbers for the 1949--52 ones but the text is missing from the
-# ## annual volumes. I also don't know if the 49 Order was for 49 or 50, etc.
-# # Summer Time Order, 1949 (SI1949/373) ???
-# 1949 3 apr 30 oct fixed
-# # Summer Time Order, 1950 (SI1950/518) ???
-# 1950 16 apr 22 oct fixed
-# # Summer Time Order, 1951 (SI1951/430) ???
-# 1951 15 apr 21 oct fixed
-# # Summer Time Order, 1952 (SI1952/451) ???
-# 1952 20 apr 26 oct fixed
-#
-# # reversion to Summer Time Act, 1925
-# 1953--1960 3 April 1 October
-#
-# ## All Orders from here on specify fixed dates, not day after nth Sunday
-# ## Start pattern looks like Mar lastSun up to 1963, Mar Sun>=19 up to 1967.
-# ## End pattern looks like Oct Sun>=23 up to 1967.
-# # Summer Time Order, 1961 (SI1961/71)
-# 1961 26 March 29 October fixed
-# # Summer Time (1962) Order, 1961 (SI1961/2465)
-# 1962 25 Mar 28 Oct fixed
-# # Summer Time Order, 1963 (SI1963/81)
-# 1963 31 March 27 October fixed
-# # Summer Time (1964) Order, 1963 (SI1963/2101)
-# 1964 22 March 25 October fixed
-# # Summer Time Order, 1964 (SI1964/1201)
-# 1965 21 Mar 24 Oct fixed
-# 1966 20 Mar 23 Oct fixed
-# 1967 19 Mar 29 Oct fixed
-# # Summer Time Order, 1967 (SI1967/1148)
-# # Specifies different start date of 7 April for Isle of Man
-# # Summer Time Order, 1968 (SI1968/117)
-# # Changes Isle of Man start date to 18 Feb to match rest of UK
-# # British Standard Time Act, 1968
-# 1968 18 feb 0 none fixed
-# 1969--1970 0 none 0 none
-# 1971 0 none 31 oct fixed
-#
-# # Summer Time Act, 1972
-# 1972-1980 3 March 4 October
-#
-# # The pattern here looks like Last Sun in Mar, day after 4th Sat in Oct
-# # First EC Directive ???
-# # Summer Time Order, 1980 (SI1980/1089)
-# 1981    29 Mar  25 Oct fixed
-# 1982    28 Mar  24 Oct fixed
-# # Second EC Directive ???
-# # Summer Time Order, 1982 (SI1982/1673)
-# 1983    27 Mar  23 Oct fixed
-# 1984    25 Mar  28 Oct fixed
-# 1985    31 Mar  27 Oct fixed
-# # Third EC Directive ???
-# # Summer Time Order, 1986 (SI1986/223)
-# 1986    30 Mar  26 Oct fixed
-# 1987    29 Mar  25 Oct fixed
-# 1988    27 Mar  23 Oct fixed
-# # Fourth EC Directive ???
-# # Summer Time Order, 1988 (SI1988/931)
-# 1989    26 Mar  29 Oct fixed
-# # Fifth EC Directive ???
-# # Summer Time Order, 1989 (SI1989/985)
-# 1990    25 Mar  28 Oct fixed
-# 1991    31 Mar  27 Oct fixed
-# 1992    29 Mar  25 Oct fixed
-# # Sixth EC Directive
-# # Summer Time Order, 1992 (SI1992/1729)
-# 1993    28 Mar  24 Oct fixed
-# 1994    27 Mar  23 Oct fixed
-
-# From Peter Ilieve <peter@memex.co.uk> (1994-08-18):
-# I now have the text of the 7th EC directive on summer time arrangements
-# (94/21/EC), which was approved on 30 May....
-# The major changes from existing practice are that 1995 will be the last year
-# that the UK and Eire finish on a different date from everyone else,
-# and the common end date from 1996 onwards will be the last Sunday in October.
-# Year	 Start		End		End (UK & Eire, 1995 only)
-# (rule) (last Sun)	(last Sun)	(4th Sun)
-# 1995	26 March	24 September	22 October
-# 1996	31 March	27 October
-# 1997	30 March	26 October
-#
-# From Peter Ilieve <peter@memex.co.uk> (1994-12-01):
-# The final piece of the legislative jigsaw for summer time in the UK for
-# 1995-97 is now in place.  The Summer Time Order 1994 (SI 1994/2798)
-# came into force on 16 November.  It restates the dates from the EC
-# seventh Summer Time Directive....
-#
-# From Peter Ilieve <peter@aldie.co.uk> (1997-08-06):
-# I now have a copy of the ... Eighth Directive 97/44/EC of the European
-# Parliament and of the Council of 22 July 1997 on summer-time arrangements.
-# It runs for 4 years, 1998--2001, and confirms the current rules of
-# last Sunday in March to last Sunday in October....
-# The directive does not apply in overseas territories of the Member States.
-# It says the Commission should produce a proposal for 2002 and beyond
-# by 1 Jan 2000 and this should be adopted by 1 Jan 2001.  I doubt that
-# this will happen though....
-# There is no mention of the French desire to abandon the whole idea.
-# France has had a change of government recently so maybe it will
-# be quietly dropped.
-
-# From Peter Ilieve <peter@memex.co.uk> (1994-03-28):
-# The [GB-Eire] end date of 22 October [1995] conflicts with your current rule
-# of Oct Sun>=23, and the historical UK formula of Sun after 4th Sat.
-# The last time 4th Sun and Sun after 4th Sat differed was in 1989,
-# when 29 October was used.  That year was covered by a UK Summer Time Order
-# for only a single year and it looks as though there was a matching 4th EC
-# directive for just this year.  I don't have the text of the 5th EC
-# directive (for 1990--92) but my guess would be it said 4th Sun.
-# To maintain strict historical accuracy you could start a new UK ending rule
-# of Oct Sun>=22 in 1990.
+# summer time in 1968.
+#
+# - The Manx Time Act 1968
+#
+# This is an Act of Tynwald (the Isle of Man Parliament) that said that
+# henceforth Manx time would be the same as the time in Great Britain.
+#
+# - The Summer Time Act 1972 (1972 c. 6)
+#
+# This specified a reversion to normal Summer Time behaviour with a start
+# date of the day after the third Saturday in March, unless that is Easter,
+# when it is the day after the second Saturday, and an end date of the day
+# after the fourth Saturday in October. Times are at 02:00 GMT, offset is
+# 1 hour. It gives the power to make Orders to vary these dates and
+# times. This Act is still in force and is the legal authority for
+# implementing the EC Directives in the United Kingdom.
+#
+# - The Interpretation Act 1978 (1978 c. 30)
+#
+# Section 9 of this Act replaces section 1 of the Statutes (Definition of
+# Time) Act, 1880 with very similar wording maintaining GMT as the legal
+# time in Great Britain. This does not apply in Northern Ireland (it
+# has its own Interpretation Act listed above).
+#
+# - Council Directive of 22 July 1980 on summertime arrangements (80/737/EEC)
+#
+# The first of the European Directives on Summer Time. It specified start
+# dates for 1981 and 1982. No agreement had been reached on end dates.
+# Only dates were given, there was no rule like `last Sunday in March'.
+# The main change for the United Kingdom was a move to a 01:00 GMT change
+# time. The dates:
+#   1981: 29 March
+#   1982: 28 March
+#
+# - Summer Time Order, 1980 (S.I. 1980/1089)
+#
+# Specified dates for 1981 and 1982, with the start dates as in the
+# EC Directive and all times 01:00 GMT:
+#   1981: 29 March to 25 October
+#   1982: 28 March to 24 October
+#
+# - Second Council Directive of 10 June 1982 on summertime arrangements
+#   (82/399/EEC)
+#
+# The next European Directive. Specified dates for three years, 1983 to 1985.
+# Agreement still hadn't been reached on a common end date, and wouldn't
+# be until 1994 with the appeareance of the seventh Directive with a common
+# date for 1996 and beyond, but this time the Directive gave two sets of
+# end dates. The start date was specified by rule: the last Sunday in March.
+# All times were 01:00 GMT. The end dates were given without rule, as:
+#   1983: 25 September or 23 October
+#   1984: 30 September or 28 october
+#   1985: 29 September or 27 October
+#
+# - Summer Time Order, 1982 (S.I. 1982/1673)
+#
+# Implemented the second EC Directive, using the October end dates.
+#   1983: 27 March to 23 October
+#   1984: 25 March to 28 october
+#   1985: 31 March to 27 October
+#
+# - Third Council Directive of 12 December 1984 on summertime arrangements
+#   (84/634/EEC)
+#
+# Specified start dates of the last Sunday in March and two sets of end
+# dates, last Sunday in September and fourth Sunday in October, all at
+# 01:00 GMT. The end dates were also specified as dates:
+#   1986: 28 September or 26 October
+#   1987: 27 September or 25 October
+#   1988: 25 September or 23 October
+#
+# - Summer Time Order, 1986 (S.I. 1986/223)
+#
+# Implemented the third EC Directive, using the October end dates.
+#   1986: 30 March to 26 October
+#   1987: 29 March to 25 October
+#   1988: 27 March to 23 October
+#
+# - Council Directive of 20 December 1985 amending Directive 84/634/EEC
+#   on summertime arrangements (85/582/EEC)
+#
+# This was to do with the accession of Spain and Portugal to the EEC.
+# The previous directve had used wording like `Member States belonging
+# to the zero (Greenwich) time zone' when refering to the different
+# sets of end dates. Portugal was in that time zone but was not going
+# to follow the United Kingdom and Ireland dates, so the text was reworded
+# without any change to the dates themselves.
+#
+# - Fourth Council Directive of 22 December 1987 on summertime arrangements
+#   (88/14/EEC)
+#
+# This Directive covered only a single year: 1989. My guess is that
+# this was because 1989 was one of the years when the historic United Kingdom
+# end date of the Sunday after the fourth Saturday in October differed from
+# the rule in the previous Directive of the fourth Sunday in October.
+# All times are 01:00 GMT. No rule was specified, specific dates were given:
+#   1989: 26 March to 24 September or 29 October
+#
+# - Summer Time Order, 1988 (S.I. 1988/931)
+#
+# Implemented the dates of 26 March to 29 October for 1989.
+#
+# - Fifth Council Directive of 21 December 1988 on summertime arrangements
+#   (89/47/EEC)
+#
+# Covered the three years 1990 to 1992. All times are 01:00 GMT. Gave both
+# rules (last Sunday in March, last Sunday in September or fourth Sunday
+# in October) and specific dates:
+#   1990: 25 March to 30 September or 28 October
+#   1991: 31 March to 29 September or 27 October
+#   1992: 29 March to 27 September or 25 October
+#
+# - Summer Time Order, 1989 (S.I. 1989/985)
+#
+# Implemented the fifth Directive using the October end dates.
+#
+# - Sixth Council Directive 92/20/EEC of 26 March 1992 on summertime
+#   arrangements
+#
+# Covered the two years 1993 and 1994. All times are 01:00 GMT. Specified
+# both rules (same as the fifth Directive) and specific dates:
+#   1993: 28 March to 26 September or 24 October
+#   1994: 27 March to 25 September or 23 October
+#
+# - Summer Time Order, 1992 (S.I. 1992/1729)
+#
+# Implemented the sixth Directive using the October end dates.
+#
+# - Seventh Directive 94/21/EC of the European Parliament and of the Council
+#   of 30 May 1994 on summer-time arrangements
+#
+# Covered the three years 1995 to 1997. Agreement had finally been reached
+# on a common end date, to start in 1996. Both rules and dates were given.
+# The rules were the same last Sunday in March to last Sunday in September
+# or fourth Sunday in October for 1995, with the end rule changing to the
+# last Sunday in October for 1996 and 1997. The year 1995 was another of
+# the tricky ones where the EC and traditional United Kingdom rules differed
+# but this time the UK changed on the fourth Sunday, 22 October, earlier
+# than usual. All times are 01:00 GMT. Specific dates were also given:
+#   1995: 26 March to 24 September or 22 October
+#   1996: 31 March to 27 October
+#   1997: 30 March to 26 October
+#
+# - Summer Time Order 1994 (S.I. 1994/2798)
+#
+# Implements the seventh Directive using the October end date in 1995.
+# Applies also to the Bailiwick of Guernsey but not to the Bailiwick of
+# Jersey or the Isle of Man, which have their own (unspecified) legislation
+# on the subject.
+#
+# - Eighth Directive 97/44/EC of the European Parliament and of the Council
+#   of 22 July 1997 on summer-time arrangements
+#
+# Covers four years: 1998 to 2001. All times are 01:00 GMT. Specifies both
+# rules, last Sunday in March and last Sunday in October, and specific dates:
+#   1998: 29 March to 25 October
+#   1999: 28 March to 31 October
+#   2000: 26 March to 29 October
+#   2001: 25 March to 28 October
+#
+# - Summer Time Order 1997 (S.I. 1997/2982)
+#
+# Implements the eighth Directive. Has the same text about the Isle of Man,
+# Guernsey and Jersey as the 1994 Order.
+
+# From Joseph S. Myers <jsm28@hermes.cam.ac.uk> (1998-01-06):
+#
+# The legal time in the UK outside of summer time is definitely GMT, not UTC;
+# see Lord Tanlaw's speech
+# <a href="http://www.parliament.the-stationery-office.co.uk/pa/ld199697/ldhansrd/pdvn/lds97/text/70611-20.htm#70611-20_head0">
+# (Lords Hansard 11 June 1997 columns 964 to 976)
+# </a>.
 
 # From Paul Eggert <eggert@twinsun.com> (1996-06-12):
 #
-# As Ilieve remarks, the date `20 April 1924' in the table of ``Summer Time: A
+# The date `20 April 1924' in the table of ``Summer Time: A
 # Consultation Document'' (Cm 722, 1989) table is a transcription error;
 # 20 April was an Easter Sunday.  Shanks has 13 April, the correct date.
 # Also, the table is not quite right for 1925 through 1938; the correct rules
@@ -695,79 +715,112 @@
 # "Irish Summer Time", abbreviated to "IST".
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-# 1916 to 1925--irregular
+# Summer Time Act, 1916
 Rule	GB-Eire	1916	only	-	May	21	2:00s	1:00	BST
 Rule	GB-Eire	1916	only	-	Oct	 1	2:00s	0	GMT
+# S.R.&O. 1917, No. 358
 Rule	GB-Eire	1917	only	-	Apr	 8	2:00s	1:00	BST
 Rule	GB-Eire	1917	only	-	Sep	17	2:00s	0	GMT
+# S.R.&O. 1918, No. 274
 Rule	GB-Eire	1918	only	-	Mar	24	2:00s	1:00	BST
 Rule	GB-Eire	1918	only	-	Sep	30	2:00s	0	GMT
+# S.R.&O. 1919, No. 297
 Rule	GB-Eire	1919	only	-	Mar	30	2:00s	1:00	BST
 Rule	GB-Eire	1919	only	-	Sep	29	2:00s	0	GMT
+# S.R.&O. 1920, No. 458
 Rule	GB-Eire	1920	only	-	Mar	28	2:00s	1:00	BST
+# S.R.&O. 1920, No. 1844
 Rule	GB-Eire	1920	only	-	Oct	25	2:00s	0	GMT
+# S.R.&O. 1921, No. 363
 Rule	GB-Eire	1921	only	-	Apr	 3	2:00s	1:00	BST
 Rule	GB-Eire	1921	only	-	Oct	 3	2:00s	0	GMT
+# S.R.&O. 1922, No. 264
 Rule	GB-Eire	1922	only	-	Mar	26	2:00s	1:00	BST
+# The Summer Time Act, 1922
 Rule	GB-Eire	1922	only	-	Oct	 8	2:00s	0	GMT
 Rule	GB-Eire	1923	only	-	Apr	Sun>=16	2:00s	1:00	BST
 Rule	GB-Eire	1923	1924	-	Sep	Sun>=16	2:00s	0	GMT
-Rule	GB-Eire	1924	only	-	Apr	13	2:00s	1:00	BST
-# 1925 to 1939 start--regular, except for avoiding Easter
+Rule	GB-Eire	1924	only	-	Apr	Sun>=9	2:00s	1:00	BST
 Rule	GB-Eire	1925	1926	-	Apr	Sun>=16	2:00s	1:00	BST
+# The Summer Time Act, 1925
 Rule	GB-Eire	1925	1938	-	Oct	Sun>=2	2:00s	0	GMT
-Rule	GB-Eire	1927	only	-	Apr	10	2:00s	1:00	BST
+Rule	GB-Eire	1927	only	-	Apr	Sun>=9	2:00s	1:00	BST
 Rule	GB-Eire	1928	1929	-	Apr	Sun>=16	2:00s	1:00	BST
-Rule	GB-Eire	1930	only	-	Apr	13	2:00s	1:00	BST
+Rule	GB-Eire	1930	only	-	Apr	Sun>=9	2:00s	1:00	BST
 Rule	GB-Eire	1931	1932	-	Apr	Sun>=16	2:00s	1:00	BST
-Rule	GB-Eire	1933	only	-	Apr	 9	2:00s	1:00	BST
+Rule	GB-Eire	1933	only	-	Apr	Sun>=9	2:00s	1:00	BST
 Rule	GB-Eire	1934	only	-	Apr	Sun>=16	2:00s	1:00	BST
-Rule	GB-Eire	1935	only	-	Apr	14	2:00s	1:00	BST
+Rule	GB-Eire	1935	only	-	Apr	Sun>=9	2:00s	1:00	BST
 Rule	GB-Eire	1936	1937	-	Apr	Sun>=16	2:00s	1:00	BST
-Rule	GB-Eire	1938	only	-	Apr	10	2:00s	1:00	BST
+Rule	GB-Eire	1938	only	-	Apr	Sun>=9	2:00s	1:00	BST
 Rule	GB-Eire	1939	only	-	Apr	Sun>=16	2:00s	1:00	BST
-# 1939 end to 1947--irregular, and with double summer time
-Rule	GB-Eire	1939	only	-	Nov	19	2:00s	0	GMT
+# S.R.&O. 1939, No. 1379
+Rule	GB-Eire	1939	only	-	Nov	Sun>=16	2:00s	0	GMT
+# S.R.&O. 1940, No. 172 and No. 1883
 Rule	GB-Eire	1940	only	-	Feb	25	2:00s	1:00	BST
+# S.R.&O. 1941, No. 476
 Rule	GB-Eire	1941	only	-	May	Sun>=2	1:00s	2:00	BDST
 Rule	GB-Eire	1941	1943	-	Aug	Sun>=9	1:00s	1:00	BST
+# S.R.&O. 1942, No. 506
 Rule	GB-Eire	1942	1944	-	Apr	Sun>=2	1:00s	2:00	BDST
+# S.R.&O. 1944, No. 932
 Rule	GB-Eire	1944	only	-	Sep	Sun>=16	1:00s	1:00	BST
-# Double daylight starts on a Monday in 1945--see above.
+# S.R.&O. 1945, No. 312
 Rule	GB-Eire	1945	only	-	Apr	 2	1:00s	2:00	BDST
+# S.R.&O. 1945, No. 1208
 Rule	GB-Eire	1945	only	-	Jul	15	1:00s	1:00	BST
-Rule	GB-Eire	1945	only	-	Oct	 7	2:00s	0	GMT
-Rule	GB-Eire	1946	only	-	Apr	14	2:00s	1:00	BST
-Rule	GB-Eire	1946	only	-	Oct	 6	2:00s	0	GMT
+Rule	GB-Eire	1945	1946	-	Oct	Sun>=2	2:00s	0	GMT
+Rule	GB-Eire	1946	only	-	Apr	Sun>=9	2:00s	1:00	BST
+# The Summer Time Act, 1947
 Rule	GB-Eire	1947	only	-	Mar	16	2:00s	1:00	BST
 Rule	GB-Eire	1947	only	-	Apr	13	1:00s	2:00	BDST
 Rule	GB-Eire	1947	only	-	Aug	10	1:00s	1:00	BST
 Rule	GB-Eire	1947	only	-	Nov	 2	2:00s	0	GMT
-# So much for double saving time.  1948 and 1949, irregular.
+# Summer Time Order, 1948 (S.I. 1948/495)
 Rule	GB-Eire	1948	only	-	Mar	14	2:00s	1:00	BST
 Rule	GB-Eire	1948	1949	-	Oct	lastSun	2:00s	0	GMT
+# Summer Time Order, 1949 (S.I. 1949/373)
 Rule	GB-Eire	1949	only	-	Apr	 3	2:00s	1:00	BST
-# 1950 through start of 1953, regular.
-Rule	GB-Eire	1950	1953	-	Apr	Sun>=14	2:00s	1:00	BST
+# Summer Time Order, 1950 (S.I. 1950/518)
+# Summer Time Order, 1951 (S.I. 1951/430)
+# Summer Time Order, 1952 (S.I. 1952/451)
+Rule	GB-Eire	1950	1952	-	Apr	Sun>=14	2:00s	1:00	BST
 Rule	GB-Eire	1950	1952	-	Oct	Sun>=21	2:00s	0	GMT
-# 1954 to 1980, starting rules
-Rule	GB-Eire	1954	only	-	Apr	11	2:00s	1:00	BST
+# revert to the rules of the Summer Time Act, 1925
+Rule	GB-Eire	1953	only	-	Apr	Sun>=16	2:00s	1:00	BST
+Rule	GB-Eire	1953	1960	-	Oct	Sun>=2	2:00s	0	GMT
+Rule	GB-Eire	1954	only	-	Apr	Sun>=9	2:00s	1:00	BST
 Rule	GB-Eire	1955	1956	-	Apr	Sun>=16	2:00s	1:00	BST
-Rule	GB-Eire	1957	only	-	Apr	14	2:00s	1:00	BST
+Rule	GB-Eire	1957	only	-	Apr	Sun>=9	2:00s	1:00	BST
 Rule	GB-Eire	1958	1959	-	Apr	Sun>=16	2:00s	1:00	BST
-Rule	GB-Eire	1960	only	-	Apr	10	2:00s	1:00	BST
+Rule	GB-Eire	1960	only	-	Apr	Sun>=9	2:00s	1:00	BST
+# Summer Time Order, 1961 (S.I. 1961/71)
+# Summer Time (1962) Order, 1961 (S.I. 1961/2465)
+# Summer Time Order, 1963 (S.I. 1963/81)
 Rule	GB-Eire	1961	1963	-	Mar	lastSun	2:00s	1:00	BST
+Rule	GB-Eire	1961	1968	-	Oct	Sun>=23	2:00s	0	GMT
+# Summer Time (1964) Order, 1963 (S.I. 1963/2101)
+# Summer Time Order, 1964 (S.I. 1964/1201)
+# Summer Time Order, 1967 (S.I. 1967/1148)
 Rule	GB-Eire	1964	1967	-	Mar	Sun>=19	2:00s	1:00	BST
+# Summer Time Order, 1968 (S.I. 1968/117)
 Rule	GB-Eire	1968	only	-	Feb	18	2:00s	1:00	BST
+# The British Standard Time Act, 1968
+#	(no summer time)
+# The Summer Time Act, 1972
 Rule	GB-Eire	1972	1980	-	Mar	Sun>=16	2:00s	1:00	BST
-# 1953 to 1980, ending rules
-Rule	GB-Eire	1953	1960	-	Oct	Sun>=1	2:00s	0	GMT
-Rule	GB-Eire	1961	1968	-	Oct	Sun>=23	2:00s	0	GMT
 Rule	GB-Eire	1972	1980	-	Oct	Sun>=23	2:00s	0	GMT
-# 1981 on
+# Summer Time Order, 1980 (S.I. 1980/1089)
+# Summer Time Order, 1982 (S.I. 1982/1673)
+# Summer Time Order, 1986 (S.I. 1986/223)
+# Summer Time Order, 1988 (S.I. 1988/931)
 Rule	GB-Eire	1981	1995	-	Mar	lastSun	1:00u	1:00	BST
 Rule	GB-Eire 1981	1989	-	Oct	Sun>=23	1:00u	0	GMT
+# Summer Time Order, 1989 (S.I. 1989/985)
+# Summer Time Order, 1992 (S.I. 1992/1729)
+# Summer Time Order 1994 (S.I. 1994/2798)
 Rule	GB-Eire 1990	1995	-	Oct	Sun>=22	1:00u	0	GMT
+# Summer Time Order 1997 (S.I. 1997/2982)
 # See EU for rules starting in 1996.
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -778,14 +831,14 @@ Zone	Europe/London	-0:01:15 -	LMT	1847 Sep 22
 			 0:00	EU	GMT/BST
 Zone	Europe/Belfast	-0:23:40 -	LMT	1880 Aug  2
 			-0:25:21 -	DMT	1916 May 21 2:00    # Dublin MT
-			-0:25:21 1:00	IST	1916 Oct  1 3:00    # Irish Summer Time
+			-0:25:21 1:00	IST	1916 Oct  1 2:00s   # Irish Summer Time
 			 0:00	GB-Eire	%s	1968 Oct 27
 			 1:00	-	BST	1971 Oct 31 2:00u
 			 0:00	GB-Eire	%s	1996
 			 0:00	EU	GMT/BST
 Zone	Europe/Dublin	-0:25:21 -	LMT	1880 Aug  2
 			-0:25:21 -	DMT	1916 May 21 2:00    # Dublin MT
-			-0:25:21 1:00	IST	1916 Oct  1 3:00
+			-0:25:21 1:00	IST	1916 Oct  1 2:00s
 			 0:00	GB-Eire	%s	1921 Dec  6 # independence
 			 0:00	GB-Eire	GMT/IST	1940 Feb 25 2:00
 			 0:00	1:00	IST	1946 Oct  6 2:00
@@ -1040,13 +1093,7 @@ Zone	Europe/Brussels	0:17:30 -	LMT	1880
 			1:00	EU	CE%sT
 
 # Bosnia and Herzegovina
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Sarajevo	1:13:40	-	LMT	1884
-			1:00	-	CET	1941 Apr 18 23:00
-			1:00	C-Eur	CE%sT	1945 May  8  2:00s
-			1:00	1:00	CEST	1945 Sep 16  2:00s
-			1:00	-	CET	1982 Nov 27
-			1:00	EU	CE%sT
+# see Yugoslavia
 
 # Bulgaria
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -1066,13 +1113,7 @@ Zone	Europe/Sofia	1:33:16 -	LMT	1880
 			2:00	E-Eur	EE%sT
 
 # Croatia
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Zagreb	1:03:52	-	LMT	1884
-			1:00	-	CET	1941 Apr 18 23:00
-			1:00	C-Eur	CE%sT	1945 May  8  2:00s
-			1:00	1:00	CEST	1945 Sep 16  2:00s
-			1:00	-	CET	1982 Nov 27
-			1:00	EU	CE%sT
+# see Yugosloavia
 
 # Czech Republic
 # Gregorian calendar adopted 1584-01-17.
@@ -1192,13 +1233,14 @@ Zone	Europe/Helsinki	1:39:52 -	LMT	1878 May 31
 
 # France
 # Gregorian calendar adopted 1582-12-20.
-# French Revolutionary calendar used 1792-09-22 - 1805-12-31.
+# French Revolutionary calendar used 1793-11-24 through 1805-12-31,
+# and (in Paris only) 1871-05-06 through 1871-05-23.
 #
 # Shanks seems to use `24:00' ambiguously; we resolve it with Whitman.
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	France	1916	only	-	Jun	14	23:00s	1:00	S
-Rule	France	1916	1919	-	Oct	Sun>=1	 0:00	0	-
+Rule	France	1916	1919	-	Oct	Sun>=1	23:00s	0	-
 Rule	France	1917	only	-	Mar	24	23:00s	1:00	S
 Rule	France	1918	only	-	Mar	 9	23:00s	1:00	S
 Rule	France	1919	only	-	Mar	 1	23:00s	1:00	S
@@ -1230,27 +1272,34 @@ Rule	France	1940	only	-	Feb	25	 2:00	1:00	S
 # The French rules for 1941-1944 were not used in Paris,
 # but were used in other places (e.g. Monaco).
 Rule	France	1941	only	-	May	 5	 0:00	2:00	DS
-Rule	France	1941	only	-	Oct	 6	 1:00	1:00	S
-Rule	France	1942	only	-	Mar	 8	 0:00	2:00	DS
+# Shanks says this transition occurred at Oct 6 1:00,
+# but go with Denis.Excoffier@ens.fr (1997-12-12),
+# who quotes the Ephemerides Astronomiques for 1998 from Bureau des Longitudes
+# as saying 5/10/41 22hUT.
+Rule	France	1941	only	-	Oct	 6	 0:00	1:00	S
+Rule	France	1942	only	-	Mar	 9	 0:00	2:00	DS
 Rule	France	1942	only	-	Nov	 2	 3:00	1:00	S
 Rule	France	1943	only	-	Mar	29	 2:00	2:00	DS
-Rule	France	1943	only	-	Nov	 4	 3:00	1:00	S
+Rule	France	1943	only	-	Oct	 4	 3:00	1:00	S
 Rule	France	1944	only	-	Apr	 3	 2:00	2:00	DS
 Rule	France	1944	only	-	Oct	 8	 1:00	1:00	S
 Rule	France	1945	only	-	Apr	 2	 2:00	2:00	DS
 Rule	France	1945	only	-	Sep	16	 3:00	0	-
-Rule	France	1976	only	-	Mar	28	 2:00s	1:00	S
-Rule	France	1976	only	-	Sep	lastSun	 2:00s	0	-
+# Shanks gives Mar 28 2:00 and Sep 26 3:00;
+# go with Excoffier's 28/3/76 0hUT and 25/9/76 23hUT.
+Rule	France	1976	only	-	Mar	28	 1:00	1:00	S
+Rule	France	1976	only	-	Sep	26	 1:00	0	-
 # Shanks gives 0:09 for Paris Mean Time, and Whitman gives 0:09:05,
 # but Howse quotes the actual French legislation as saying 0:09:21.
 # Go with Howse.  Howse writes that the time in France was officially based
 # on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Paris	0:09:21 -	LMT	1891 Mar 15 0:01
+Zone	Europe/Paris	0:09:21 -	LMT	1891 Mar 15  0:01
 			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
-			0:00	France	WE%sT	1940 Jun 14
+# Shanks gives 1940 Jun 14 0:00; go with Excoffier's 14/6/40 22hUT.
+			0:00	France	WE%sT	1940 Jun 14 23:00
 			1:00	C-Eur	CE%sT	1944 Aug 25
-			0:00	France	WE%sT	1945 Sep 16 3:00
+			0:00	France	WE%sT	1945 Sep 16  3:00
 			1:00	France	CE%sT	1977
 			1:00	EU	CE%sT
 
@@ -1414,9 +1463,11 @@ Zone Atlantic/Reykjavik	-1:27:24 -	LMT	1837
 #
 # From Paul Eggert (1996-05-06):
 # For Italian DST we have three sources: Shanks, Whitman, and F. Pollastri
-# <URL:http://pisolo.cstv.to.cnr.it/toi/uk/ienitlt.html> (1996-03-14) (`FP'
-# below), taken from an Italian National Electrotechnical Institute publication.
-# When the three sources disagree, guess who's right, as follows:
+# <a href="http://pisolo.cstv.to.cnr.it/toi/uk/ienitlt.html">
+# http://pisolo.cstv.to.cnr.it/toi/uk/ienitlt.html (1996-03-14)
+# </a>
+# (`FP' below), taken from an Italian National Electrotechnical Institute
+# publication. When the three sources disagree, guess who's right, as follows:
 #
 # year	FP	Shanks (S)	Whitman (W)	Go with:
 # 1916	06-03	06-03 24:00	06-03 00:00	FP & W
@@ -1565,13 +1616,7 @@ Zone Europe/Luxembourg	0:24:36 -	LMT	1904 Jun
 			1:00	EU	CE%sT
 
 # Macedonia
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Europe/Skopje	1:25:44	-	LMT	1884
-			1:00	-	CET	1941 Apr 18 23:00
-			1:00	C-Eur	CE%sT	1945 May  8  2:00s
-			1:00	1:00	CEST	1945 Sep 16  2:00s
-			1:00	-	CET	1982 Nov 27
-			1:00	EU	CE%sT
+# see Yugoslavia
 
 # Malta
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -1709,8 +1754,10 @@ Zone	Europe/Warsaw	1:24:00 -	LMT	1880
 			1:00	Poland	CE%sT	1977 Apr  3 1:00
 			1:00	W-Eur	CE%sT
 # IATA SSIM (1991/1996) gives EU rules, but the _The Warsaw Voice_
-# <URL:http://www.contact.waw.pl/voice/v361/NewsInBrief.shtml>
-# (1995-09-24) says the autumn 1995 switch was at 02:00.
+# <a href="http://www.contact.waw.pl/voice/v361/NewsInBrief.shtml">
+# http://www.contact.waw.pl/voice/v361/NewsInBrief.shtml (1995-09-24)
+# </a>
+# says the autumn 1995 switch was at 02:00.
 # Stick with W-Eur for now.
 
 # Portugal
@@ -1961,13 +2008,7 @@ Zone Asia/Anadyr	11:49:56 -	LMT	1924 May  2
 Link Europe/Prague Europe/Bratislava
 
 # Slovenia
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone Europe/Ljubljana	0:58:04	-	LMT	1884
-			1:00	-	CET	1941 Apr 18 23:00
-			1:00	C-Eur	CE%sT	1945 May  8  2:00s
-			1:00	1:00	CEST	1945 Sep 16  2:00s
-			1:00	-	CET	1982 Nov 27
-			1:00	EU	CE%sT
+# see Yugoslavia
 
 # Spain
 # Gregorian calendar adopted 1582-10-15.
@@ -2042,7 +2083,10 @@ Zone	Atlantic/Canary	-1:01:36 -	LMT	1922 Mar # Las Palmas de Gran C.
 
 # Sweden
 
-# From: msb@sq.com (Mark Brader) <URL:news:1996Jul6.012937.29190@sq.com>:
+# From: msb@sq.com (Mark Brader)
+# <a href=news:1996Jul6.012937.29190@sq.com>
+# news:1996Jul6.012937.29190@sq.com
+# </a>:
 #
 # In 1700, Denmark made the transition from Julian to Gregorian.  Sweden
 # decided to *start* a transition in 1700 as well, but rather than have one of
@@ -2072,6 +2116,8 @@ Zone Europe/Stockholm	1:12:12 -	LMT	1878 May 31
 			1:00	EU	CE%sT
 
 # Switzerland
+# The Gregorian calendar was introduced gradually in Switzerland,
+# by omitting leap years during 1583-1812.
 # From Howse (1988), p 82:
 # By the end of the 18th century clocks and watches became commonplace
 # and their performance improved enormously.  Communities began to keep
@@ -2211,6 +2257,10 @@ Zone	Europe/Belgrade	1:22:00	-	LMT	1884
 # Shanks doesn't give as much detail, so go with Kozelj.
 			1:00	-	CET	1982 Nov 27
 			1:00	EU	CE%sT
+Link Europe/Belgrade Europe/Ljubljana	# Slovenia
+Link Europe/Belgrade Europe/Sarajevo	# Bosnia and Herzegovina
+Link Europe/Belgrade Europe/Skopje	# Macedonia
+Link Europe/Belgrade Europe/Zagreb	# Croatia
 
 ###############################################################################
 
@@ -2287,21 +2337,3 @@ Zone	Europe/Belgrade	1:22:00	-	LMT	1884
 # ...
 # Monaco: has same DST as France.
 # ...
-
-# ...
-# Date: Fri, 3 Sep 93 13:43:41 BST
-# From: Peter Ilieve <peter@memex.co.uk>
-# ...
-# Turning to Europe, I now have a copy of the `Sixth Council Directive 92/20/EEC
-# of 26 March 1992 on summertime arrangements'. This only covers 1993 and
-# 1994, a seventh one is in the works but I doubt that the algorithm will
-# change. This says summertime starts at 01:00 GMT on the last Sunday in March
-# and ends at 01:00 GMT on the last Sunday in September, except for the UK
-# and Eire where it ends at 01:00 GMT on the fourth Sunday in October.
-# It says the arrangements for 1995 onwards will be decided by 1 January 1994,
-# but as the sixth directive was supposed to appear by 1 Jan 92 and didn't
-# arrive til March I wouldn't hold your breath.
-#
-# The first summertime directive was adopted in 1980, although the UK didn't
-# seem to use it until 1981. I suspect it would be safe to move your start
-# dates for the -Eur rules back to 1981.
diff --git a/time/leapseconds b/time/leapseconds
index 6ff99ada37..903da5aaae 100644
--- a/time/leapseconds
+++ b/time/leapseconds
@@ -1,4 +1,4 @@
-# @(#)leapseconds	7.9
+# @(#)leapseconds	7.10
 
 # Allowance for leapseconds added to each timezone file.
 
@@ -17,7 +17,7 @@
 #	Leap	YEAR	MON	DAY	23:59:59	-	R/S
 
 # If the leapsecond is Rolling (R) the given time is local time
-# If the leapsecond is Stationary (S) the given time is GMT
+# If the leapsecond is Stationary (S) the given time is UTC
 
 # Leap	YEAR	MONTH	DAY	HH:MM:SS	CORR	R/S
 Leap	1972	Jun	30	23:59:60	+	S
diff --git a/time/northamerica b/time/northamerica
index a978333503..baaf84095a 100644
--- a/time/northamerica
+++ b/time/northamerica
@@ -1,4 +1,4 @@
-# @(#)northamerica	7.35
+# @(#)northamerica	7.39
 # also includes Central America and the Caribbean
 
 # This data is by no means authoritative; if you think you know better,
@@ -651,6 +651,20 @@ Zone America/Glace_Bay	-3:59:48 -	LMT	1902 Jun 15
 # Nipigon (EST) and Rainy River (CST) are the largest that we know of.
 # Far west Ontario is like Winnipeg; far east Quebec is like Halifax.
 
+# From Paul Eggert (1997-10-17):
+# msb@sq.com writes that an article in the 1997-10-14 Toronto Star
+# says that Atikokan, Ontario currently does not observe DST,
+# but will vote on 11-10 whether to use EST/EDT.
+# He also writes that the
+# <a href="http://www.gov.on.ca/MBS/english/publications/statregs/conttext.html">
+# Ontario Time Act (1990, Chapter T.9)
+# </a>
+# says that Ontario east of 90W uses EST/EDT, and west of 90W uses CST/CDT.
+# Officially Atikokan is therefore on CST/CDT, and most likely this report
+# concerns a non-official time observed as a matter of local practice.
+# For what it's worth, Shanks (1995) says that Atikokan has agreed with
+# Rainy River ever since standard time was introduced.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Mont	1917	only	-	Mar	25	2:00	1:00	D
 Rule	Mont	1917	only	-	Apr	24	0:00	0	S
@@ -893,7 +907,7 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
 
 # From Guy Harris:
 # Rules are from the Official Airline Guide, Worldwide Edition, for 1987.
-# Rules prior to 1987 are unknown.
+# Rules [before] 1987 are unknown.
 # The comments in the OAG say "Only Ensenada, Mexicale, San Felipe and Tijuana
 # observe DST."  This is presumably Baja California Norte, above 28th parallel,
 # as listed there; [there is also] "Baja California Sur and N. Pacific
@@ -971,9 +985,10 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
 # 
 # -------------- End Forwarded Message --------------
 # From Paul Eggert (1996-06-12):
-# For an English translation of the decree,
-# see ``Diario Oficial: Time Zone Changeover'',
-# <URL:http://mexico-travel.com/extra/timezone_eng.html> (1996-01-04).
+# For an English translation of the decree, see
+# <a href="http://mexico-travel.com/extra/timezone_eng.html">
+# ``Diario Oficial: Time Zone Changeover'' (1996-01-04).
+# </a>
 
 # From Shanks (1991):
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
diff --git a/time/southamerica b/time/southamerica
index 4f8cb906d9..f53355c4c0 100644
--- a/time/southamerica
+++ b/time/southamerica
@@ -1,4 +1,4 @@
-# @(#)southamerica	7.21
+# @(#)southamerica	7.22
 
 # This data is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
@@ -189,7 +189,7 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
 # ending dates, giving them as "estimated date(s) based on previous year".  We
 # infer a rule here from one example, always a dangerous practice....  Yes,
 # they really do switch on Saturday, according to the OAG.
-# "[America/Porto_Acre]" is for the Territory of Acre;
+# "[America/Porto_Acre]" is for the [State] of Acre;
 # "[America/Noronha]" is for Fernando De Noronha.
 
 # From Paul Eggert <eggert@twinsun.com> (1993-11-18):
@@ -242,6 +242,11 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
 # Sao Paulo (UTC-3) and Cuiaba (UTC-4) always observed DST.
 # Porto Acre (UTC-5) stopped observing DST in mid-1988.
 
+# From Rodrigo Feher <feher@pobox.com> (1998-01-17):
+# Reading "southamerica" file in timezone 7.55 I've found an
+# error. Line 193 say "Territory of Acre". It is not a territory anymore
+# but a state.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Brazil	1931	only	-	Oct	 3	11:00	1:00	D
 Rule	Brazil	1932	1933	-	Apr	 1	 0:00	0	S
diff --git a/time/tzfile.h b/time/tzfile.h
index 90441cbbc3..0921c3c339 100644
--- a/time/tzfile.h
+++ b/time/tzfile.h
@@ -21,7 +21,7 @@
 
 #ifndef lint
 #ifndef NOID
-static char	tzfilehid[] = "@(#)tzfile.h	7.13";
+static char	tzfilehid[] = "@(#)tzfile.h	7.14";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
@@ -64,7 +64,7 @@ struct tzhead {
 **	tzh_timecnt (char [4])s		coded transition times a la time(2)
 **	tzh_timecnt (unsigned char)s	types of local time starting at above
 **	tzh_typecnt repetitions of
-**		one (char [4])		coded GMT offset in seconds
+**		one (char [4])		coded UTC offset in seconds
 **		one (unsigned char)	used to set tm_isdst
 **		one (unsigned char)	that's an abbreviation list index
 **	tzh_charcnt (char)s		'\0'-terminated zone abbreviations
@@ -77,7 +77,7 @@ struct tzhead {
 **					if absent, transition times are
 **					assumed to be wall clock time
 **	tzh_ttisgmtcnt (char)s		indexed by type; if TRUE, transition
-**					time is GMT, if FALSE,
+**					time is UTC, if FALSE,
 **					transition time is local time
 **					if absent, transition times are
 **					assumed to be local time
diff --git a/time/zdump.c b/time/zdump.c
index 01c79ca7fb..f6480bb308 100644
--- a/time/zdump.c
+++ b/time/zdump.c
@@ -1,6 +1,6 @@
 #ifndef lint
 #ifndef NOID
-static char	elsieid[] = "@(#)zdump.c	7.26";
+static char	elsieid[] = "@(#)zdump.c	7.27";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
@@ -344,7 +344,7 @@ int	v;
 
 	(void) printf("%-*s  ", (int) longest, zone);
 	if (v)
-		(void) printf("%.24s GMT = ", asctime(gmtime(&t)));
+		(void) printf("%.24s UTC = ", asctime(gmtime(&t)));
 	tmp = localtime(&t);
 	(void) printf("%.24s", asctime(tmp));
 	if (*abbr(tmp) != '\0')
diff --git a/time/zic.c b/time/zic.c
index 2780e4c996..adec622672 100644
--- a/time/zic.c
+++ b/time/zic.c
@@ -1,6 +1,6 @@
 #ifndef lint
 #ifndef NOID
-static char	elsieid[] = "@(#)zic.c	7.91";
+static char	elsieid[] = "@(#)zic.c	7.93";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
@@ -601,10 +601,23 @@ const char * const	tofile;
 	if (!itsdir(toname))
 		(void) remove(toname);
 	if (link(fromname, toname) != 0) {
-		if (mkdirs(toname) != 0)
-			(void) exit(EXIT_FAILURE);
-		if (link(fromname, toname) != 0) {
-			const char *e = strerror(errno);
+		int failure = errno;
+		if (failure == ENOENT)
+			if (mkdirs(toname) != 0)
+				failure = errno;
+			else if (link(fromname, toname) == 0)
+				failure = 0;
+			else
+				failure = errno;
+#ifndef MISSING_SYMLINK
+		if (failure == EXDEV)
+			if (symlink(fromname, toname) != 0)
+				failure = errno;
+			else
+				failure = 0;
+#endif
+		if (failure) {
+			const char *e = strerror(failure);
 
 			(void) fprintf(stderr,
 				_("%s: Can't link from %s to %s: %s\n"),
@@ -1020,7 +1033,7 @@ const int		iscont;
 	}
 	z.z_filename = filename;
 	z.z_linenum = linenum;
-	z.z_gmtoff = gethms(fields[i_gmtoff], _("invalid GMT offset"), TRUE);
+	z.z_gmtoff = gethms(fields[i_gmtoff], _("invalid UTC offset"), TRUE);
 	if ((cp = strchr(fields[i_format], '%')) != 0) {
 		if (*++cp != 's' || strchr(cp, '%') != 0) {
 			error(_("invalid abbreviation format"));
@@ -1254,11 +1267,12 @@ const char * const		timep;
 	} else if (sscanf(cp, scheck(cp, "%d"), &rp->r_loyear) != 1) {
 		error(_("invalid starting year"));
 		return;
-	} else if (noise)
+	} else if (noise) {
 		if (rp->r_loyear < min_year_representable)
 			warning(_("starting year too low to be represented"));
 		else if (rp->r_loyear > max_year_representable)
 			warning(_("starting year too high to be represented"));
+	}
 	cp = hiyearp;
 	if ((lp = byword(cp, end_years)) != NULL) switch ((int) lp->l_value) {
 		case YR_MINIMUM:
@@ -1278,11 +1292,12 @@ const char * const		timep;
 	} else if (sscanf(cp, scheck(cp, "%d"), &rp->r_hiyear) != 1) {
 		error(_("invalid ending year"));
 		return;
-	} else if (noise)
+	} else if (noise) {
 		if (rp->r_loyear < min_year_representable)
 			warning(_("starting year too low to be represented"));
 		else if (rp->r_loyear > max_year_representable)
 			warning(_("starting year too high to be represented"));
+	}
 	if (rp->r_loyear > rp->r_hiyear) {
 		error(_("starting year greater than ending year"));
 		return;
@@ -1630,7 +1645,7 @@ const int			zonecount;
 				INITIALIZE(ktime);
 				if (useuntil) {
 					/*
-					** Turn untiltime into GMT
+					** Turn untiltime into UTC
 					** assuming the current gmtoff and
 					** stdoff values.
 					*/
@@ -1946,10 +1961,11 @@ register const struct lookup * const	table;
 	*/
 	foundlp = NULL;
 	for (lp = table; lp->l_word != NULL; ++lp)
-		if (itsabbr(word, lp->l_word))
+		if (itsabbr(word, lp->l_word)) {
 			if (foundlp == NULL)
 				foundlp = lp;
 			else	return NULL;	/* multiple inexact matches */
+		}
 	return foundlp;
 }