summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1996-11-27 06:13:15 +0000
committerUlrich Drepper <drepper@redhat.com>1996-11-27 06:13:15 +0000
commit8a52392237c44cbbd1ffc62b164230e1159dfb76 (patch)
treecacdf37e344b96d785d0862d05f63aaa5caac621
parent8f8619cbd2e9e624d00c8835ae027642c869dd3f (diff)
update from main archive 961126cvs/libc-961127
Wed Nov 27 06:10:10 1996 Ulrich Drepper <drepper@cygnus.com> * Makefile: Fix typo. * configure: Require autoconf-2.11. * elf/dl-deps.c: Terminate duplicate list. * libio/libio.h: Add prototypes for _IO_seekoff and _IO_seekpos. * libio/strfile.h: Update from current libg++. * libio/strops.c: Likewise. * login/Makefile (routines): Update after correction of reentrant interface. * login/endutent.c: Removed. * login/endutent_r.c: Likewise. * login/pututline.c: Likewise. * login/pututline_r.c: Likewise. * login/setutent.c: Likewise. * login/setutent_r.c: Likewise. * login/getutent.c: Update for new interface. * login/getutent_r.c: Likewise. * login/getutid.c: Likewise. * login/getutid_r.c: Likewise. * login/getutline.c: Likewise. * login/getutline_r.c: Likewise. * login/login.c: Likewise. * login/logout.c: Likewise. * login/logwtmp.c: Likewise. * login/utmp.h: Likewise. * sysdeps/unix/getlogin.c: Likewise. * sysdeps/unix/getlogin_r.c: Likewise. * login/utmp-private.h: New private header. * login/utmp_db.c: Stub DB backend for utmp handler. * login/utmp_file.c: File backend for utmp handler. * sysdeps/gnu/utmpbits.h (struct utmp): Add some more fields. (enum utlogin): List of record types. (struct exit_status): Record to align with other implementations. * sysdeps/generic/paths.h: Add _PATH_UTMP_DB. * sysdeps/unix/sysv/linux/paths.h: Likewise. * sysdeps/generic/pty.c: Use getgrnam_r instead of getgrnam. * sysdeps/stub/getlogin.c: Update copyright. * sysdeps/stub/getlogin_r.c: Likewise. * nss/getXXbyYY_r.c: Use -1l for error-pointer value instead of -1. * nss/getXXent_r.c: Likewise. * nss/nsswitch.c: Likewise. * posix/Makefile (headers): Add wait.h. * posix/wait.h: New file. * posix/sys/types.h: Always define intN_t types. * stdio-common/Makefile: Update copyright. Use -Wno-format flag for scanf4.c and scanf7.c. * stdlib/stdlib.h: Reformat. * time/africa: Update from ADO tzdata1996m. * time/antarctica: Likewise. * time/asia: Likewise. * time/australia: Likewise. * time/etcetera: Likewise. * time/europe: Likewise. * time/northamerica: Likewise. * time/southamerica: Likewise. * time/zone.tab: Likewise. Fri Nov 22 19:34:12 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/posix/getcwd.c (__getcwd): After resizing the buffer move the current contents to the end and relocate file name pointer to upper half of the buffer. Sun Nov 24 04:56:19 1996 Ulrich Drepper <drepper@cygnus.com> * time/africa: Update from ADO tzdata1996m. * time/antarctica: Likewise. * time/asia: Likewise. * time/australia: Likewise. * time/etcetera: Likewise. * time/europe: Likewise. * time/nothamerica: Likewise. * time/southameria: Likewise. * time/zone.tab: Likewise. * sysdeps/unix/sysv/linux/sys/serial.h: New file. * sysdeps/unix/sysv/linux/Makefile [$(subdir)=misc] (sysdep_headers): Add sys/serial.h. * sysdeps/unix/sysv/linux/Dist: Add sys/serial.h. * posix/wait.h: New file. * posix/Makefile (headers): Add wait.h. Sat Nov 23 17:27:52 1996 Roland McGrath <roland@gnu.ai.mit.edu> * Makeconfig ($(common-objpfx)soversions.mk): Use regular expression instead of shell pattern matching. * shlib-versions: Change to regular expressions. Sat Nov 23 13:24:55 1996 Ulrich Drepper <drepper@cygnus.com> * io/stat.c: Add section from libgcc to copyright comment to allow this file to be statically linked in applications. * io/fstat.c: Likewise. * io/lstat.c: Likewise. * io/mknod.c: Likewise. Fri Nov 22 15:14:23 1996 Ulrich Drepper <drepper@cygnus.com> * csu/initfini.c: Add section from libgcc to copyright comment to allow this file to be statically linked in applications. * malloc/obstack.h [!_LIBC && !HAVE_STRING_H]: Define memcpy if not already defined. (obstack_grow, obstack_grow0): Correct placement of braces. * gnu-versions.h (_GNU_OBSTACK_INTERFACE_VERSION): Define to 2. * malloc/obstack.c (OBSTACK_INTERFACE_VERSION): Define to 2. Thu Nov 21 19:54:51 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Makerules (make-link): Simplify by changing directory only if not using rellns-sh; check whether we really have symbolic links. * rellns-sh: Fix the case of $(dirname $2) being a prefix of $(dirname $1); use status of ln for exit code; make more robust against multiple slashes in a row. Thu Nov 21 13:05:21 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu> * configure.in (after AC_CANONICAL_HOST): mutate *-*-gnu* names into *-*-gnu-gnu*. * shlib-versions (gnu versions): Recognize *-*-gnu-gnu* instead of the three-part name, to distinguish correctly from *-*-linux-gnu*. * sysdeps/mach/hurd/Makefile ($(libdir)/libc.so): Depend on $(rpcuserlibs). * sysdeps/mach/hurd/Makefile (install-others): Add $(libdir)/libc_p.a. ($(libdir)/libc_p.a): New rule. * sysdeps/mach/hurd/libc_p-ldscript: New file. * sysdeps/mach/hurd/Dist: Add libc_p-ldscript. Wed Nov 20 20:28:21 1996 Richard Henderson <rth@tamu.edu> * Makerules (make-link): Use $(shell) to find rellns-sh before we cd. * time/Makefile: Likewise. * sysdeps/alpha/elf/Makefile: New file. Build crtbegin.o & crtend.o. * sysdeps/alpha/elf/Dist: New file. * sysdeps/alpha/elf/crtbegin.S, sysdeps/alpha/elf/crtend.S: New files. The bits currently distributed with GCC fail in two ways -- they don't understand multiple .got subsections and the extents of the lists are dynamicly bound meaning that the application's lists get executed multiple times and the library's lists never get executed. Wed Nov 20 00:42:45 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * stdlib/strtod.c: Fix previous change. Wed Nov 20 22:07:58 1996 Andreas Jaeger <aj@arthur.pfalz.de> * time/Makefile ($(installed-localtime-file)): Use $(..) to find rellns-sh script. Wed Nov 20 12:50:54 1996 Ulrich Drepper <drepper@cygnus.com> * stdio-common/Makefile: Add CFLAGS-scanf7.c to prevent warning. Likesie for scanf4.c
-rw-r--r--ChangeLog175
-rw-r--r--Makeconfig12
-rw-r--r--Makefile2
-rw-r--r--Makerules18
-rwxr-xr-xconfigure110
-rw-r--r--configure.in18
-rw-r--r--csu/initfini.c43
-rw-r--r--elf/dl-deps.c3
-rw-r--r--gnu-versions.h2
-rw-r--r--io/fstat.c41
-rw-r--r--io/lstat.c41
-rw-r--r--io/mknod.c42
-rw-r--r--io/stat.c41
-rw-r--r--libio/libio.h3
-rw-r--r--libio/strfile.h4
-rw-r--r--libio/strops.c119
-rw-r--r--login/Makefile13
-rw-r--r--login/getutent.c34
-rw-r--r--login/getutent_r.c211
-rw-r--r--login/getutid.c36
-rw-r--r--login/getutid_r.c118
-rw-r--r--login/getutline.c36
-rw-r--r--login/getutline_r.c91
-rw-r--r--login/login.c81
-rw-r--r--login/logout.c11
-rw-r--r--login/logwtmp.c28
-rw-r--r--login/utmp-private.h41
-rw-r--r--login/utmp.h43
-rw-r--r--login/utmp_db.c102
-rw-r--r--login/utmp_file.c385
-rw-r--r--nss/getXXbyYY_r.c4
-rw-r--r--nss/getXXent_r.c4
-rw-r--r--nss/nsswitch.c4
-rw-r--r--posix/Makefile2
-rw-r--r--posix/sys/types.h2
-rw-r--r--posix/wait.h1
-rwxr-xr-xrellns-sh16
-rw-r--r--shlib-versions38
-rw-r--r--stdio-common/Makefile8
-rw-r--r--stdlib/stdlib.h8
-rw-r--r--stdlib/strtod.c3
-rw-r--r--sysdeps/alpha/elf/Dist2
-rw-r--r--sysdeps/alpha/elf/crtbegin.S91
-rw-r--r--sysdeps/alpha/elf/crtend.S92
-rw-r--r--sysdeps/generic/paths.h1
-rw-r--r--sysdeps/generic/pty.c5
-rw-r--r--sysdeps/gnu/utmpbits.h34
-rw-r--r--sysdeps/mach/hurd/Dist2
-rw-r--r--sysdeps/mach/hurd/Makefile9
-rw-r--r--sysdeps/mach/hurd/libc_p-ldscript5
-rw-r--r--sysdeps/posix/getcwd.c5
-rw-r--r--sysdeps/stub/getlogin.c29
-rw-r--r--sysdeps/stub/getlogin_r.c28
-rw-r--r--sysdeps/unix/getlogin.c35
-rw-r--r--sysdeps/unix/getlogin_r.c37
-rw-r--r--sysdeps/unix/sysv/linux/Dist1
-rw-r--r--sysdeps/unix/sysv/linux/Makefile3
-rw-r--r--sysdeps/unix/sysv/linux/paths.h1
-rw-r--r--sysdeps/unix/sysv/linux/sys/serial.h110
-rw-r--r--time/Makefile2
-rw-r--r--time/africa41
-rw-r--r--time/antarctica32
-rw-r--r--time/asia156
-rw-r--r--time/australasia61
-rw-r--r--time/etcetera20
-rw-r--r--time/europe225
-rw-r--r--time/northamerica82
-rw-r--r--time/southamerica217
-rw-r--r--time/zone.tab35
69 files changed, 2478 insertions, 877 deletions
diff --git a/ChangeLog b/ChangeLog
index 130d064408..d7fed11e61 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,178 @@
+Wed Nov 27 06:10:10 1996 Ulrich Drepper <drepper@cygnus.com>
+
+ * Makefile: Fix typo.
+
+ * configure: Require autoconf-2.11.
+
+ * elf/dl-deps.c: Terminate duplicate list.
+
+ * libio/libio.h: Add prototypes for _IO_seekoff and _IO_seekpos.
+ * libio/strfile.h: Update from current libg++.
+ * libio/strops.c: Likewise.
+
+ * login/Makefile (routines): Update after correction of reentrant
+ interface.
+ * login/endutent.c: Removed.
+ * login/endutent_r.c: Likewise.
+ * login/pututline.c: Likewise.
+ * login/pututline_r.c: Likewise.
+ * login/setutent.c: Likewise.
+ * login/setutent_r.c: Likewise.
+ * login/getutent.c: Update for new interface.
+ * login/getutent_r.c: Likewise.
+ * login/getutid.c: Likewise.
+ * login/getutid_r.c: Likewise.
+ * login/getutline.c: Likewise.
+ * login/getutline_r.c: Likewise.
+ * login/login.c: Likewise.
+ * login/logout.c: Likewise.
+ * login/logwtmp.c: Likewise.
+ * login/utmp.h: Likewise.
+ * sysdeps/unix/getlogin.c: Likewise.
+ * sysdeps/unix/getlogin_r.c: Likewise.
+ * login/utmp-private.h: New private header.
+ * login/utmp_db.c: Stub DB backend for utmp handler.
+ * login/utmp_file.c: File backend for utmp handler.
+ * sysdeps/gnu/utmpbits.h (struct utmp): Add some more fields.
+ (enum utlogin): List of record types.
+ (struct exit_status): Record to align with other implementations.
+
+ * sysdeps/generic/paths.h: Add _PATH_UTMP_DB.
+ * sysdeps/unix/sysv/linux/paths.h: Likewise.
+
+ * sysdeps/generic/pty.c: Use getgrnam_r instead of getgrnam.
+
+ * sysdeps/stub/getlogin.c: Update copyright.
+ * sysdeps/stub/getlogin_r.c: Likewise.
+
+ * nss/getXXbyYY_r.c: Use -1l for error-pointer value instead of -1.
+ * nss/getXXent_r.c: Likewise.
+ * nss/nsswitch.c: Likewise.
+
+ * posix/Makefile (headers): Add wait.h.
+ * posix/wait.h: New file.
+
+ * posix/sys/types.h: Always define intN_t types.
+
+ * stdio-common/Makefile: Update copyright.
+ Use -Wno-format flag for scanf4.c and scanf7.c.
+
+ * stdlib/stdlib.h: Reformat.
+
+ * time/africa: Update from ADO tzdata1996m.
+ * time/antarctica: Likewise.
+ * time/asia: Likewise.
+ * time/australia: Likewise.
+ * time/etcetera: Likewise.
+ * time/europe: Likewise.
+ * time/northamerica: Likewise.
+ * time/southamerica: Likewise.
+ * time/zone.tab: Likewise.
+
+Fri Nov 22 19:34:12 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * sysdeps/posix/getcwd.c (__getcwd): After resizing the buffer
+ move the current contents to the end and relocate file name
+ pointer to upper half of the buffer.
+
+Sun Nov 24 04:56:19 1996 Ulrich Drepper <drepper@cygnus.com>
+
+ * time/africa: Update from ADO tzdata1996m.
+ * time/antarctica: Likewise.
+ * time/asia: Likewise.
+ * time/australia: Likewise.
+ * time/etcetera: Likewise.
+ * time/europe: Likewise.
+ * time/nothamerica: Likewise.
+ * time/southameria: Likewise.
+ * time/zone.tab: Likewise.
+
+ * sysdeps/unix/sysv/linux/sys/serial.h: New file.
+ * sysdeps/unix/sysv/linux/Makefile [$(subdir)=misc] (sysdep_headers):
+ Add sys/serial.h.
+ * sysdeps/unix/sysv/linux/Dist: Add sys/serial.h.
+
+ * posix/wait.h: New file.
+ * posix/Makefile (headers): Add wait.h.
+
+Sat Nov 23 17:27:52 1996 Roland McGrath <roland@gnu.ai.mit.edu>
+
+ * Makeconfig ($(common-objpfx)soversions.mk): Use regular
+ expression instead of shell pattern matching.
+ * shlib-versions: Change to regular expressions.
+
+Sat Nov 23 13:24:55 1996 Ulrich Drepper <drepper@cygnus.com>
+
+ * io/stat.c: Add section from libgcc to copyright comment
+ to allow this file to be statically linked in applications.
+ * io/fstat.c: Likewise.
+ * io/lstat.c: Likewise.
+ * io/mknod.c: Likewise.
+
+Fri Nov 22 15:14:23 1996 Ulrich Drepper <drepper@cygnus.com>
+
+ * csu/initfini.c: Add section from libgcc to copyright comment
+ to allow this file to be statically linked in applications.
+
+ * malloc/obstack.h [!_LIBC && !HAVE_STRING_H]: Define memcpy if
+ not already defined.
+ (obstack_grow, obstack_grow0): Correct placement of braces.
+
+ * gnu-versions.h (_GNU_OBSTACK_INTERFACE_VERSION): Define to 2.
+ * malloc/obstack.c (OBSTACK_INTERFACE_VERSION): Define to 2.
+
+Thu Nov 21 19:54:51 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * Makerules (make-link): Simplify by changing directory only if
+ not using rellns-sh; check whether we really have symbolic links.
+
+ * rellns-sh: Fix the case of $(dirname $2) being a prefix of
+ $(dirname $1); use status of ln for exit code; make more robust
+ against multiple slashes in a row.
+
+Thu Nov 21 13:05:21 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
+
+ * configure.in (after AC_CANONICAL_HOST): mutate *-*-gnu* names
+ into *-*-gnu-gnu*.
+ * shlib-versions (gnu versions): Recognize *-*-gnu-gnu* instead of
+ the three-part name, to distinguish correctly from *-*-linux-gnu*.
+
+ * sysdeps/mach/hurd/Makefile ($(libdir)/libc.so): Depend on
+ $(rpcuserlibs).
+
+ * sysdeps/mach/hurd/Makefile (install-others): Add
+ $(libdir)/libc_p.a.
+ ($(libdir)/libc_p.a): New rule.
+ * sysdeps/mach/hurd/libc_p-ldscript: New file.
+ * sysdeps/mach/hurd/Dist: Add libc_p-ldscript.
+
+Wed Nov 20 20:28:21 1996 Richard Henderson <rth@tamu.edu>
+
+ * Makerules (make-link): Use $(shell) to find rellns-sh before we cd.
+ * time/Makefile: Likewise.
+
+ * sysdeps/alpha/elf/Makefile: New file. Build crtbegin.o & crtend.o.
+ * sysdeps/alpha/elf/Dist: New file.
+ * sysdeps/alpha/elf/crtbegin.S, sysdeps/alpha/elf/crtend.S: New files.
+ The bits currently distributed with GCC fail in two ways -- they don't
+ understand multiple .got subsections and the extents of the lists are
+ dynamicly bound meaning that the application's lists get executed
+ multiple times and the library's lists never get executed.
+
+Wed Nov 20 00:42:45 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * stdlib/strtod.c: Fix previous change.
+
+Wed Nov 20 22:07:58 1996 Andreas Jaeger <aj@arthur.pfalz.de>
+
+ * time/Makefile ($(installed-localtime-file)): Use $(..) to find
+ rellns-sh script.
+
+Wed Nov 20 12:50:54 1996 Ulrich Drepper <drepper@cygnus.com>
+
+ * stdio-common/Makefile: Add CFLAGS-scanf7.c to prevent warning.
+ Likesie for scanf4.c
+
Wed Nov 20 02:04:11 1996 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/sigsuspend.c: Make sigsuspend a weak
diff --git a/Makeconfig b/Makeconfig
index 0a338e12e2..1c25ace156 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -523,9 +523,10 @@ $(common-objpfx)soversions.mk: $(..)shlib-versions $(..)Makeconfig \
(file="$(wildcard $(patsubst %,$(..)%/shlib-versions,$(add-ons))) \
$(..)shlib-versions"; \
for f in $$file; do \
- sed 's/#.*$$//' $$f | while read conf versions; do \
- test -n "$$versions" || continue; \
- case '$(config-machine)-$(config-vendor)-$(config-os)' in $$conf)\
+ sed 's/#.*$$//' $$f | while read conf versions; do \
+ test -n "$$versions" && \
+ test `expr '$(config-machine)-$(config-vendor)-$(config-os)' \
+ : "$$conf"` != 0 || continue; \
for v in $$versions; do \
lib=`echo $$v | sed 's/=.*$$//'`; \
if eval "test -z \"\$$vers_lib$$lib\""; then \
@@ -536,9 +537,10 @@ $(common-objpfx)soversions.mk: $(..)shlib-versions $(..)Makeconfig \
echo "all-sonames+=$$lib.so\$$($$lib.so-version)";;\
*) echo "$$lib.so-version=$$number"; \
echo "all-sonames+=\$$($$lib.so-version)";; \
- esac; \
+ esac; \
fi; \
- done ;; esac; done; \
+ done; \
+ done; \
done;) > $@T; exit 0
mv -f $@T $@
diff --git a/Makefile b/Makefile
index 41fe4c3536..1ab8945736 100644
--- a/Makefile
+++ b/Makefile
@@ -176,7 +176,7 @@ $(includedir)/stubs.h: subdir_install
else $(INSTALL_DATA) $(objpfx)stubs.h $@; fi
rm -f $(objpfx)stubs.h
-ifeq (yes, $(build-shared))
+ifeq (yes,$(build-shared))
# Like stubs.h the gnu/lib-names.h header is not used while building the
# libc itself. So we generate it while installing.
diff --git a/Makerules b/Makerules
index 6a8638f6e9..19ec2410d8 100644
--- a/Makerules
+++ b/Makerules
@@ -600,16 +600,24 @@ versioned := $(strip $(foreach so,$(install-lib.so),\
$(addprefix $(slibdir)/,$(filter-out $(versioned),$(install-lib.so))): \
$(slibdir)/%.so: $(objpfx)%.so; $(do-install-program)
+ifneq ($(findstring -s,$(LN_S)),)
define make-link
-here=`pwd`; cd $(@D); \
-rm -f $(@F).new; \
+rm -f $@.new; \
if test '$(@D)' = '$(<D)'; then \
- $(LN_S) $(<F) $(@F).new; \
+ (cd $(@D); $(LN_S) $(<F) $(@F).new); \
else \
- $(SHELL) $$here/$(..)rellns-sh $< $(@F).new; \
+ $(SHELL) $(..)rellns-sh $< $@.new; \
fi; \
-mv -f $(@F).new $(@F)
+mv -f $@.new $@
+endef
+else
+# If we have no symbolic links don't bother with rellns-sh.
+define make-link
+rm -f $@.new; \
+$(LN_S) $< $@.new; \
+mv -f $@.new $@
endef
+endif
ifdef libc.so-version
# For a library specified to be version N, install three files:
diff --git a/configure b/configure
index 8237d99090..b2586e2f57 100755
--- a/configure
+++ b/configure
@@ -2,7 +2,7 @@
# From configure.in CVSid
# Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.10.3
+# Generated automatically using autoconf version 2.11
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
#
# This configure script is free software; the Free Software Foundation
@@ -74,6 +74,8 @@ mandir='${prefix}/man'
# Initialize some other variables.
subdirs=
MFLAGS= MAKEFLAGS=
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
ac_prev=
for ac_option
@@ -355,7 +357,7 @@ EOF
verbose=yes ;;
-version | --version | --versio | --versi | --vers)
- echo "configure generated by autoconf version 2.10.3"
+ echo "configure generated by autoconf version 2.11"
exit 0 ;;
-with-* | --with-*)
@@ -702,7 +704,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:706: checking host system type" >&5
+echo "configure:708: checking host system type" >&5
host_alias=$host
case "$host_alias" in
@@ -722,6 +724,20 @@ host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$host" 1>&6
+
+# The way shlib-versions is used to generate soversions.mk uses a
+# fairly simplistic model for name recognition that can't distinguish
+# i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a $host_os
+# of `gnu*' here to be `gnu-gnu*' just so that shlib-versions can
+# tell. This doesn't get used much beyond that, so it's fairly safe.
+case "$host_os" in
+linux*)
+ ;;
+gnu*)
+ host_os=`echo $host_os | sed -e 's/gnu/gnu-gnu/'`
+ ;;
+esac
+
# We keep the original values in `$config_*' and never modify them, so we
# can write them unchanged into config.make. Everything else uses
# $machine, $vendor, and $os, and changes them whenever convenient.
@@ -768,7 +784,7 @@ esac
# This can take a while to compute.
sysdep_dir=$srcdir/sysdeps
echo $ac_n "checking sysdep dirs""... $ac_c" 1>&6
-echo "configure:772: checking sysdep dirs" >&5
+echo "configure:788: checking sysdep dirs" >&5
# Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1.
os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`"
@@ -969,7 +985,7 @@ echo "$ac_t""sysdeps/generic sysdeps/stub" 1>&6
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:973: checking for a BSD compatible install" >&5
+echo "configure:989: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -1020,10 +1036,10 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
if test "$INSTALL" = "${srcdir}/install-sh -c"; then
# The makefiles need to use a different form to find it in $srcdir.
- INSTALL="$(..)./install-sh -c"
+ INSTALL='$(..)./install-sh -c'
fi
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1027: checking whether ln -s works" >&5
+echo "configure:1043: checking whether ln -s works" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1048,7 +1064,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1052: checking for $ac_word" >&5
+echo "configure:1068: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_MSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1079,7 +1095,7 @@ test -n "$MSGFMT" || MSGFMT=":"
echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:1083: checking build system type" >&5
+echo "configure:1099: checking build system type" >&5
build_alias=$build
case "$build_alias" in
@@ -1105,7 +1121,7 @@ fi
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1109: checking for $ac_word" >&5
+echo "configure:1125: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1137,7 +1153,7 @@ if test $host != $build; then
# Extract the first word of "gcc cc", so it can be a program name with args.
set dummy gcc cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1141: checking for $ac_word" >&5
+echo "configure:1157: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_BUILD_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1164,7 +1180,7 @@ fi
fi
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1168: checking how to run the C preprocessor" >&5
+echo "configure:1184: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -1179,13 +1195,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 1183 "configure"
+#line 1199 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1189: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1205: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
:
@@ -1196,13 +1212,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 1200 "configure"
+#line 1216 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1206: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1222: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
:
@@ -1227,7 +1243,7 @@ echo "$ac_t""$CPP" 1>&6
# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
set dummy ${ac_tool_prefix}ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1231: checking for $ac_word" >&5
+echo "configure:1247: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1258,7 +1274,7 @@ fi
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1262: checking for $ac_word" >&5
+echo "configure:1278: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1289,7 +1305,7 @@ if test -n "$ac_tool_prefix"; then
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1293: checking for $ac_word" >&5
+echo "configure:1309: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1324,7 +1340,7 @@ fi
# Extract the first word of "bash", so it can be a program name with args.
set dummy bash; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1328: checking for $ac_word" >&5
+echo "configure:1344: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_BASH'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1361,7 +1377,7 @@ fi
echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6
-echo "configure:1365: checking for signed size_t type" >&5
+echo "configure:1381: checking for signed size_t type" >&5
if eval "test \"`echo '$''{'libc_cv_signed_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1385,12 +1401,12 @@ EOF
fi
echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6
-echo "configure:1389: checking for libc-friendly stddef.h" >&5
+echo "configure:1405: checking for libc-friendly stddef.h" >&5
if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1394 "configure"
+#line 1410 "configure"
#include "confdefs.h"
#define __need_size_t
#define __need_wchar_t
@@ -1405,7 +1421,7 @@ size_t size; wchar_t wchar;
if (&size == NULL || &wchar == NULL) abort ();
; return 0; }
EOF
-if { (eval echo configure:1409: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1425: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libc_cv_friendly_stddef=yes
else
@@ -1425,7 +1441,7 @@ override stddef.h = # The installed <stddef.h> seems to be libc-friendly."
fi
echo $ac_n "checking whether we need to use -P to assemble .S files""... $ac_c" 1>&6
-echo "configure:1429: checking whether we need to use -P to assemble .S files" >&5
+echo "configure:1445: checking whether we need to use -P to assemble .S files" >&5
if eval "test \"`echo '$''{'libc_cv_need_minus_P'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1448,7 +1464,7 @@ asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives."
fi
echo $ac_n "checking for assembler global-symbol directive""... $ac_c" 1>&6
-echo "configure:1452: checking for assembler global-symbol directive" >&5
+echo "configure:1468: checking for assembler global-symbol directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_global_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1478,7 +1494,7 @@ EOF
fi
echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6
-echo "configure:1482: checking for .set assembler directive" >&5
+echo "configure:1498: checking for .set assembler directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_set_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1513,12 +1529,12 @@ fi
if test $elf != yes; then
echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
-echo "configure:1517: checking for .init and .fini sections" >&5
+echo "configure:1533: checking for .init and .fini sections" >&5
if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1522 "configure"
+#line 1538 "configure"
#include "confdefs.h"
int main() {
@@ -1527,7 +1543,7 @@ asm (".section .init");
asm (".text");
; return 0; }
EOF
-if { (eval echo configure:1531: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1547: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libc_cv_have_initfini=yes
else
@@ -1553,19 +1569,19 @@ if test $elf = yes; then
libc_cv_asm_underscores=no
else
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
-echo "configure:1557: checking for _ prefix on C symbol names" >&5
+echo "configure:1573: checking for _ prefix on C symbol names" >&5
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1562 "configure"
+#line 1578 "configure"
#include "confdefs.h"
asm ("_glibc_foobar:");
int main() {
glibc_foobar ();
; return 0; }
EOF
-if { (eval echo configure:1569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1585: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
libc_cv_asm_underscores=yes
else
@@ -1593,7 +1609,7 @@ if test $elf = yes; then
libc_cv_asm_weakext_directive=no
else
echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6
-echo "configure:1597: checking for assembler .weak directive" >&5
+echo "configure:1613: checking for assembler .weak directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1616,7 +1632,7 @@ echo "$ac_t""$libc_cv_asm_weak_directive" 1>&6
if test $libc_cv_asm_weak_directive = no; then
echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6
-echo "configure:1620: checking for assembler .weakext directive" >&5
+echo "configure:1636: checking for assembler .weakext directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1653,7 +1669,7 @@ EOF
fi
echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
-echo "configure:1657: checking for ld --no-whole-archive" >&5
+echo "configure:1673: checking for ld --no-whole-archive" >&5
if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1664,7 +1680,7 @@ __throw () {}
EOF
if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -Wl,--no-whole-archive
- -o conftest conftest.c'; { (eval echo configure:1668: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+ -o conftest conftest.c'; { (eval echo configure:1684: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_ld_no_whole_archive=yes
else
libc_cv_ld_no_whole_archive=no
@@ -1675,7 +1691,7 @@ fi
echo "$ac_t""$libc_cv_ld_no_whole_archive" 1>&6
echo $ac_n "checking for gcc -fno-exceptions""... $ac_c" 1>&6
-echo "configure:1679: checking for gcc -fno-exceptions" >&5
+echo "configure:1695: checking for gcc -fno-exceptions" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_no_exceptions'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1686,7 +1702,7 @@ __throw () {}
EOF
if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -fno-exceptions
- -o conftest conftest.c'; { (eval echo configure:1690: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+ -o conftest conftest.c'; { (eval echo configure:1706: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_no_exceptions=yes
else
libc_cv_gcc_no_exceptions=no
@@ -1738,7 +1754,7 @@ if test "$uname" = generic; then
fi
echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
-echo "configure:1742: checking OS release for uname" >&5
+echo "configure:1758: checking OS release for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1760,7 +1776,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>&6
uname_release="$libc_cv_uname_release"
echo $ac_n "checking OS version for uname""... $ac_c" 1>&6
-echo "configure:1764: checking OS version for uname" >&5
+echo "configure:1780: checking OS version for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1782,7 +1798,7 @@ else
fi
echo $ac_n "checking stdio selection""... $ac_c" 1>&6
-echo "configure:1786: checking stdio selection" >&5
+echo "configure:1802: checking stdio selection" >&5
case $stdio in
libio) cat >> confdefs.h <<\EOF
@@ -1910,7 +1926,7 @@ do
echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-version | --version | --versio | --versi | --vers | --ver | --ve | --v)
- echo "$CONFIG_STATUS generated by autoconf version 2.10.3"
+ echo "$CONFIG_STATUS generated by autoconf version 2.11"
exit 0 ;;
-help | --help | --hel | --he | --h)
echo "\$ac_cs_usage"; exit 0 ;;
@@ -1999,10 +2015,10 @@ cat >> $CONFIG_STATUS <<\EOF
# Split the substitutions into bite-sized pieces for seds with
# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
ac_file=1 # Number of current file.
-ac_inc=90 # Lines per file.
ac_beg=1 # First line for current file.
-ac_end=$ac_inc # Line after last line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
ac_more_lines=:
ac_sed_cmds=""
while $ac_more_lines; do
@@ -2022,7 +2038,7 @@ while $ac_more_lines; do
fi
ac_file=`expr $ac_file + 1`
ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_inc`
+ ac_end=`expr $ac_end + $ac_max_sed_cmds`
fi
done
if test -z "$ac_sed_cmds"; then
@@ -2154,8 +2170,6 @@ EOF
# Break up conftest.vals because some shells have a limit on
# the size of here documents, and old seds have small limits too.
-# Maximum number of lines to put in a single here document.
-ac_max_here_lines=12
rm -f conftest.tail
while :
diff --git a/configure.in b/configure.in
index ec2b5a1e3a..4a3f663cb5 100644
--- a/configure.in
+++ b/configure.in
@@ -1,6 +1,6 @@
Dnl Process this file with autoconf to produce a configure script.
AC_REVISION([$CVSid$])
-AC_PREREQ(2.10.2)dnl dnl Minimum Autoconf version required.
+AC_PREREQ(2.11)dnl dnl Minimum Autoconf version required.
AC_INIT(features.h)
AC_CONFIG_HEADER(config.h)
@@ -85,6 +85,20 @@ if test x"$add_ons" != x; then
fi
AC_CANONICAL_HOST
+
+# The way shlib-versions is used to generate soversions.mk uses a
+# fairly simplistic model for name recognition that can't distinguish
+# i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a $host_os
+# of `gnu*' here to be `gnu-gnu*' just so that shlib-versions can
+# tell. This doesn't get used much beyond that, so it's fairly safe.
+case "$host_os" in
+linux*)
+ ;;
+gnu*)
+ host_os=`echo $host_os | sed -e 's/gnu/gnu-gnu/'`
+ ;;
+esac
+
# We keep the original values in `$config_*' and never modify them, so we
# can write them unchanged into config.make. Everything else uses
# $machine, $vendor, and $os, and changes them whenever convenient.
@@ -332,7 +346,7 @@ AC_MSG_RESULT(sysdeps/generic sysdeps/stub)
AC_PROG_INSTALL
if test "$INSTALL" = "${srcdir}/install-sh -c"; then
# The makefiles need to use a different form to find it in $srcdir.
- INSTALL="$(..)./install-sh -c"
+ INSTALL='$(..)./install-sh -c'
fi
AC_PROG_LN_S
AC_CHECK_PROGS(MSGFMT, msgfmt gmsgfmt, :)
diff --git a/csu/initfini.c b/csu/initfini.c
index f816e08169..dc78e84c2d 100644
--- a/csu/initfini.c
+++ b/csu/initfini.c
@@ -1,21 +1,30 @@
/* Special .init and .fini section support.
-Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
+ Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ In addition to the permissions in the GNU Library General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file with other
+ programs, and to distribute those programs without any restriction
+ coming from the use of this file. (The Libraty General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into another program.)
+
+ 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, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
/* This file is compiled into assembly code which is then surrounded by the
lines `cat > crtcommon.tmp <<\EOF_common' and `EOF_common' and thus
diff --git a/elf/dl-deps.c b/elf/dl-deps.c
index 115982f375..01e4f1974e 100644
--- a/elf/dl-deps.c
+++ b/elf/dl-deps.c
@@ -53,8 +53,9 @@ _dl_map_object_deps (struct link_map *map,
preloads[nlist]->l_reserved = 1;
}
- /* Terminate the list. */
+ /* Terminate the lists. */
head[nlist].next = NULL;
+ duphead.next = NULL;
/* Start here for adding dependencies to the list. */
tailp = &head[nlist++];
diff --git a/gnu-versions.h b/gnu-versions.h
index 15b07999dd..6cb5c70dec 100644
--- a/gnu-versions.h
+++ b/gnu-versions.h
@@ -44,7 +44,7 @@
remember, if any of these versions change, the libc.so major version
number must change too (so avoid it)! */
-#define _GNU_OBSTACK_INTERFACE_VERSION 1 /* vs malloc/obstack.c */
+#define _GNU_OBSTACK_INTERFACE_VERSION 2 /* vs malloc/obstack.c */
#define _GNU_REGEX_INTERFACE_VERSION 1 /* vs posix/regex.c */
#define _GNU_GLOB_INTERFACE_VERSION 1 /* vs posix/glob.c */
diff --git a/io/fstat.c b/io/fstat.c
index 60dd2f002d..63341555ad 100644
--- a/io/fstat.c
+++ b/io/fstat.c
@@ -1,20 +1,29 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
+ 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.
+
+ In addition to the permissions in the GNU Library General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file with other
+ programs, and to distribute those programs without any restriction
+ coming from the use of this file. (The Libraty General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into another program.)
+
+ 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, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include <sys/stat.h>
diff --git a/io/lstat.c b/io/lstat.c
index f2ab6bc7a1..84be8f7bfd 100644
--- a/io/lstat.c
+++ b/io/lstat.c
@@ -1,20 +1,29 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
+ 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.
+
+ In addition to the permissions in the GNU Library General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file with other
+ programs, and to distribute those programs without any restriction
+ coming from the use of this file. (The Libraty General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into another program.)
+
+ 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, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include <sys/stat.h>
diff --git a/io/mknod.c b/io/mknod.c
index 95ebe5a6d2..b5d51a203c 100644
--- a/io/mknod.c
+++ b/io/mknod.c
@@ -1,20 +1,30 @@
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
+ 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.
+
+ In addition to the permissions in the GNU Library General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file with other
+ programs, and to distribute those programs without any restriction
+ coming from the use of this file. (The Libraty General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into another program.)
+
+ 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, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
#include <sys/types.h>
#include <sys/stat.h>
diff --git a/io/stat.c b/io/stat.c
index 007fdf0dd6..faadce862c 100644
--- a/io/stat.c
+++ b/io/stat.c
@@ -1,20 +1,29 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
+ 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.
+
+ In addition to the permissions in the GNU Library General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file with other
+ programs, and to distribute those programs without any restriction
+ coming from the use of this file. (The Libraty General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into another program.)
+
+ 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, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include <sys/stat.h>
diff --git a/libio/libio.h b/libio/libio.h
index 0cd6b39c24..7dd47db9fa 100644
--- a/libio/libio.h
+++ b/libio/libio.h
@@ -303,6 +303,9 @@ extern int _IO_vfprintf __P((_IO_FILE*, const char*, _IO_va_list));
extern _IO_ssize_t _IO_padn __P((_IO_FILE *, int, _IO_ssize_t));
extern _IO_size_t _IO_sgetn __P((_IO_FILE *, void*, _IO_size_t));
+extern _IO_fpos_t _IO_seekoff __P((_IO_FILE*, _IO_off_t, int, int));
+extern _IO_fpos_t _IO_seekpos __P((_IO_FILE*, _IO_fpos_t, int));
+
extern void _IO_free_backup_area __P((_IO_FILE*));
#ifdef __cplusplus
diff --git a/libio/strfile.h b/libio/strfile.h
index 55783bb5c1..4934a06e3c 100644
--- a/libio/strfile.h
+++ b/libio/strfile.h
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 1993 Free Software Foundation
This file is part of the GNU IO Library. This library is free
@@ -32,8 +32,6 @@ typedef void (*_IO_free_type) __P((void*));
struct _IO_str_fields
{
- /* The current length is max(_len, _IO_write_ptr-_IO_write_base). */
- _IO_size_t _len;
_IO_alloc_type _allocate_buffer;
_IO_free_type _free_buffer;
};
diff --git a/libio/strops.c b/libio/strops.c
index 464063322d..8a6c56d055 100644
--- a/libio/strops.c
+++ b/libio/strops.c
@@ -26,7 +26,31 @@ the executable file might be covered by the GNU General Public License. */
#include "libioP.h"
#include <string.h>
-#define LEN(fp) (((_IO_strfile*)(fp))->_s._len)
+#if 0
+/* The following definitions are for exposition only.
+ They map the terminlogy used in the ANSI/ISO C++ draft standard
+ to the implementation. */
+
+/* allocated: set when a dynamic array object has been allocated, and
+ hence should be freed by the destructor for the strstreambuf object. */
+#define ALLOCATED(FP) ((FP)->_f._IO_buf_base && DYNAMIC(FP))
+
+/* constant: set when the array object has const elements,
+ so the output sequence cannot be written. */
+#define CONSTANT(FP) ((FP)->_f._IO_file_flags & _IO_NO_WRITES)
+
+/* alsize: the suggested minimum size for a dynamic array object. */
+#define ALSIZE(FP) ??? /* not stored */
+
+/* palloc: points to the function to call to allocate a dynamic array object.*/
+#define PALLOC(FP) \
+ ((FP)->_s._allocate_buffer == default_alloc ? 0 : (FP)->_s._allocate_buffer)
+
+/* pfree: points to the function to call to free a dynamic array object. */
+#define PFREE(FP) \
+ ((FP)->_s._free_buffer == default_free ? 0 : (FP)->_s._free_buffer)
+
+#endif
#ifdef TODO
/* An "unbounded buffer" is when a buffer is supplied, but with no
@@ -44,27 +68,17 @@ DEFUN(_IO_str_init_static, (fp, ptr, size, pstart),
{
/* If size is negative 'the characters are assumed to
continue indefinitely.' This is kind of messy ... */
-#if 1
int s;
size = 512;
- /* Try increasing powers of 2, as long as we don't wrap around.
- This can lose in pathological cases (ptr near the end
- of the address space). A better solution might be to
- adjust the size on underflow/overflow. FIXME. */
- for ( ; s = 2*size, s > 0 && ptr + s > ptr && s < 0x4000000L; )
+ /* Try increasing powers of 2, as long as we don't wrap around. */
+ for (; s = 2*size, s > 0 && ptr + s > ptr && s < 0x4000000L; )
size = s;
- size = s;
-#else
- /* The following semi-portable kludge assumes that
- sizeof(unsigned long) == sizeof(char*). Hence,
- (unsigned long)(-1) should be the largest possible address. */
- unsigned long highest = (unsigned long)(-1);
- /* Pointers are signed on some brain-damaged systems, in
- which case we divide by two to get the maximum signed address. */
- if ((char*)highest < ptr)
- highest >>= 1;
- size = (char*)highest - ptr;
-#endif
+ /* Try increasing size as much as we can without wrapping around. */
+ for (s = size >> 1; s > 0; s >>= 1)
+ {
+ if (ptr + size + s > ptr)
+ size += s;
+ }
}
_IO_setb(fp, ptr, ptr+size, 0);
@@ -83,7 +97,6 @@ DEFUN(_IO_str_init_static, (fp, ptr, size, pstart),
fp->_IO_write_end = ptr;
fp->_IO_read_end = ptr+size;
}
- LEN(fp) = size;
/* A null _allocate_buffer function flags the strfile as being static. */
(((_IO_strfile*)(fp))->_s._allocate_buffer) = (_IO_alloc_type)0;
}
@@ -101,34 +114,25 @@ DEFUN(_IO_str_overflow, (fp, c),
register _IO_FILE* fp AND int c)
{
int flush_only = c == EOF;
- _IO_size_t pos = fp->_IO_write_ptr - fp->_IO_write_base;
- _IO_size_t get_pos = fp->_IO_read_ptr - fp->_IO_read_base;
+ _IO_size_t pos;
if (fp->_flags & _IO_NO_WRITES)
return flush_only ? 0 : EOF;
- if (pos > LEN(fp)) LEN(fp) = pos;
if ((fp->_flags & _IO_TIED_PUT_GET) && !(fp->_flags & _IO_CURRENTLY_PUTTING))
{
- pos = get_pos;
fp->_flags |= _IO_CURRENTLY_PUTTING;
- get_pos = LEN(fp);
+ fp->_IO_write_ptr = fp->_IO_read_ptr;
+ fp->_IO_read_ptr = fp->_IO_read_end;
}
- if (pos >= (_IO_size_t) (_IO_blen(fp) + flush_only))
+ pos = fp->_IO_write_ptr - fp->_IO_write_base;
+ if (pos >= _IO_blen(fp) + flush_only)
{
if (fp->_flags & _IO_USER_BUF) /* not allowed to enlarge */
- {
-#ifdef TODO
- if (indefinite size)
- {
- fp->_IO_buf_end += 512;
- }
- else
-#endif
- return EOF;
- }
+ return EOF;
else
{
char *new_buf;
- _IO_size_t new_size = 2 * _IO_blen(fp);
+ char *old_buf = fp->_IO_buf_base;
+ _IO_size_t new_size = 2 * _IO_blen(fp) + 100;
new_buf
= (char*)(*((_IO_strfile*)fp)->_s._allocate_buffer)(new_size);
if (new_buf == NULL)
@@ -136,31 +140,32 @@ DEFUN(_IO_str_overflow, (fp, c),
/* __ferror(fp) = 1; */
return EOF;
}
- memcpy(new_buf, fp->_IO_buf_base, _IO_blen(fp));
-#if 0
- if (lenp == &LEN(fp)) /* use '\0'-filling */
- memset(new_buf + pos, 0, blen() - pos);
-#endif
if (fp->_IO_buf_base)
{
+ memcpy(new_buf, old_buf, _IO_blen(fp));
(*((_IO_strfile*)fp)->_s._free_buffer)(fp->_IO_buf_base);
/* Make sure _IO_setb won't try to delete _IO_buf_base. */
fp->_IO_buf_base = NULL;
}
+#if 0
+ if (lenp == &LEN(fp)) /* use '\0'-filling */
+ memset(new_buf + pos, 0, blen() - pos);
+#endif
_IO_setb(fp, new_buf, new_buf + new_size, 1);
+ fp->_IO_read_base = new_buf + (fp->_IO_read_base - old_buf);
+ fp->_IO_read_ptr = new_buf + (fp->_IO_read_ptr - old_buf);
+ fp->_IO_read_end = new_buf + (fp->_IO_read_end - old_buf);
+ fp->_IO_write_ptr = new_buf + (fp->_IO_write_ptr - old_buf);
+
fp->_IO_write_base = new_buf;
+ fp->_IO_write_end = fp->_IO_buf_end;
}
- fp->_IO_write_end = fp->_IO_buf_end;
}
- fp->_IO_write_ptr = fp->_IO_buf_base + pos;
-
- fp->_IO_read_base = fp->_IO_buf_base;
- fp->_IO_read_ptr = fp->_IO_buf_base + get_pos;
- fp->_IO_read_end = fp->_IO_buf_base + LEN(fp);
-
if (!flush_only)
*fp->_IO_write_ptr++ = (unsigned char) c;
+ if (fp->_IO_write_ptr > fp->_IO_read_end)
+ fp->_IO_read_end = fp->_IO_write_ptr;
return c;
}
@@ -168,28 +173,29 @@ int
DEFUN(_IO_str_underflow, (fp),
register _IO_FILE* fp)
{
- _IO_size_t ppos = fp->_IO_write_ptr - fp->_IO_write_base;
- if (ppos > LEN(fp)) LEN(fp) = ppos;
+ if (fp->_IO_write_ptr > fp->_IO_read_end)
+ fp->_IO_read_end = fp->_IO_write_ptr;
if ((fp->_flags & _IO_TIED_PUT_GET) && (fp->_flags & _IO_CURRENTLY_PUTTING))
{
fp->_flags &= ~_IO_CURRENTLY_PUTTING;
+ fp->_IO_read_ptr = fp->_IO_write_ptr;
fp->_IO_write_ptr = fp->_IO_write_end;
}
- fp->_IO_read_end = fp->_IO_read_base + LEN(fp);
if (fp->_IO_read_ptr < fp->_IO_read_end)
return *fp->_IO_read_ptr;
else
return EOF;
}
+/* The size of the valid part of the buffer. */
+
_IO_ssize_t
DEFUN(_IO_str_count, (fp),
register _IO_FILE *fp)
{
- _IO_ssize_t put_len = fp->_IO_write_ptr - fp->_IO_write_base;
- if (put_len < (_IO_ssize_t) LEN(fp))
- put_len = LEN(fp);
- return put_len;
+ return (fp->_IO_write_ptr > fp->_IO_read_end ? fp->_IO_write_ptr
+ : fp->_IO_read_end)
+ - fp->_IO_read_base;
}
_IO_pos_t
@@ -236,7 +242,6 @@ DEFUN(_IO_str_seekoff, (fp, offset, dir, mode),
}
if (offset < 0 || (_IO_ssize_t)offset > cur_size)
return EOF;
- LEN(fp) = cur_size;
fp->_IO_write_ptr = fp->_IO_write_base + offset;
new_pos = offset;
}
diff --git a/login/Makefile b/login/Makefile
index 247ab958df..da47089b5a 100644
--- a/login/Makefile
+++ b/login/Makefile
@@ -12,9 +12,9 @@
# Library General Public License for more details.
# You should have received a copy of the GNU Library General Public
-# License along with the GNU C Library; see the file COPYING.LIB. If
-# not, write to the Free Software Foundation, Inc.,
-# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# License along with the GNU C Library; see the file COPYING.LIB. If not,
+# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
#
# Sub-makefile for login portion of the library.
@@ -24,9 +24,10 @@ subdir := login
headers := utmp.h utmpbits.h lastlog.h pty.h
-routines := setutent endutent getutent getutid getutline pututline \
- setutent_r endutent_r getutent_r getutid_r getutline_r \
- pututline_r
+routines := getutent getutent_r getutid getutline getutid_r getutline_r \
+ utmp_file utmp_db
+
+distribtue := utmp-private.h
# Build the -lutil library with these extra functions.
extra-libs := libutil
diff --git a/login/getutent.c b/login/getutent.c
index 03b49dbf7e..e9462db18d 100644
--- a/login/getutent.c
+++ b/login/getutent.c
@@ -1,27 +1,27 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include <utmp.h>
-/* The global data defined in setutent.c. */
-extern struct utmp_data __utmp_data;
+/* Local buffer to store the result. */
+static struct utmp buffer;
struct utmp *
@@ -29,7 +29,7 @@ getutent (void)
{
struct utmp *result;
- if (__getutent_r (&result, &__utmp_data) < 0)
+ if (__getutent_r (&buffer, &result) < 0)
return NULL;
return result;
diff --git a/login/getutent_r.c b/login/getutent_r.c
index e3550017f9..df9a7977ab 100644
--- a/login/getutent_r.c
+++ b/login/getutent_r.c
@@ -1,51 +1,196 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>
+ and Paul Janzen <pcj@primenet.com>, 1996.
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
-#include <unistd.h>
+#include <assert.h>
+#include <db.h>
+#include <fcntl.h>
+#include <libc-lock.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
#include <utmp.h>
+#include <gnu/lib-names.h>
+#include <sys/stat.h>
+#include "utmp-private.h"
+#include "../elf/link.h"
-int
-__getutent_r (struct utmp **utmp, struct utmp_data *utmp_data)
+
+/* The various backends we have. */
+static int __setutent_unknown (int reset);
+static int __getutent_r_unknown (struct utmp *buffer, struct utmp **result);
+static void __pututline_unknown (const struct utmp *data);
+static void __endutent_unknown (void);
+
+
+/* We have three jump tables: unknown, db, or file. */
+static struct utfuncs unknown_functions =
+{
+ __setutent_unknown,
+ __getutent_r_unknown,
+ NULL,
+ NULL,
+ __pututline_unknown,
+ __endutent_unknown,
+ NULL
+};
+
+/* Currently selected backend. */
+struct utfuncs *__libc_utmp_jump_table = &unknown_functions;
+
+/* The tables from the services. */
+extern struct utfuncs __libc_utmp_db_functions;
+extern struct utfuncs __libc_utmp_file_functions;
+
+
+/* We need to protect the opening of the file. */
+__libc_lock_define_initialized (, __libc_utmp_lock)
+
+void
+__setutent (void)
+{
+ __libc_lock_lock (__libc_utmp_lock);
+
+ (void) (*__libc_utmp_jump_table->setutent) (1);
+
+ __libc_lock_unlock (__libc_utmp_lock);
+}
+weak_alias (__setutent, setutent)
+
+
+static int
+__setutent_unknown (int reset)
{
- /* Open utmp file if not already done. */
- if (utmp_data->ut_fd == -1)
+ /* We have to test whether it is still not decided which backend to use. */
+ assert (__libc_utmp_jump_table == &unknown_functions);
+
+ /* See whether utmp db file exists. */
+ if ((*__libc_utmp_db_functions.setutent) (reset))
+ __libc_utmp_jump_table = &__libc_utmp_db_functions;
+ else
{
- setutent_r (utmp_data);
- if (utmp_data->ut_fd == -1)
- return -1;
+ /* Either the db file does not exist or we have other
+ problems. So use the normal file. */
+ (*__libc_utmp_file_functions.setutent) (reset);
+ __libc_utmp_jump_table = &__libc_utmp_file_functions;
}
- /* Position file correctly. */
- if (lseek (utmp_data->ut_fd, utmp_data->loc_utmp, SEEK_SET) == -1)
- return -1;
+ return 0;
+}
+
- /* Read the next entry. */
- if (read (utmp_data->ut_fd, &utmp_data->ubuf, sizeof (struct utmp))
- != sizeof (struct utmp))
- return -1;
+void
+__endutent (void)
+{
+ __libc_lock_lock (__libc_utmp_lock);
+
+ (*__libc_utmp_jump_table->endutent) ();
- /* Update position pointer. */
- utmp_data->loc_utmp += sizeof (struct utmp);
+ __libc_lock_unlock (__libc_utmp_lock);
+}
+weak_alias (__endutent, endutent)
- *utmp = &utmp_data->ubuf;
- return 0;
+static void
+__endutent_unknown (void)
+{
+ /* Huh, how do we came here? Nothing to do. */
+}
+
+
+int
+__getutent_r (struct utmp *buffer, struct utmp **result)
+{
+ int retval;
+
+ __libc_lock_lock (__libc_utmp_lock);
+
+ retval = (*__libc_utmp_jump_table->getutent_r) (buffer, result);
+
+ __libc_lock_unlock (__libc_utmp_lock);
+
+ return retval;
}
weak_alias (__getutent_r, getutent_r)
+
+
+static int
+__getutent_r_unknown (struct utmp *buffer, struct utmp **result)
+{
+ /* It is not yet initialized. */
+ __setutent_unknown (0);
+
+ return (*__libc_utmp_jump_table->getutent_r) (buffer, result);
+}
+
+
+void
+__pututline (const struct utmp *data)
+{
+ __libc_lock_lock (__libc_utmp_lock);
+
+ (*__libc_utmp_jump_table->pututline) (data);
+
+ __libc_lock_unlock (__libc_utmp_lock);
+}
+
+
+static void
+__pututline_unknown (const struct utmp *data)
+{
+ /* It is not yet initialized. */
+ __setutent_unknown (0);
+
+ (*__libc_utmp_jump_table->pututline) (data);
+}
+
+
+int
+__utmpname (const char *file)
+{
+ int result = -1;
+
+ __libc_lock_lock (__libc_utmp_lock);
+
+ /* Close the old file. */
+ (*__libc_utmp_jump_table->endutent) ();
+
+ /* Store new names. */
+ if ((*__libc_utmp_file_functions.utmpname) (file) == 0
+ && !(*__libc_utmp_db_functions.utmpname) (file) == 0)
+ {
+ /* Try to find out whether we are supposed to work with a db
+ file or not. Do this by looking for the extension ".db". */
+ const char *ext = strrchr (file, '.');
+
+ if (ext != NULL && strcmp (ext, ".db") == 0)
+ __libc_utmp_jump_table = &__libc_utmp_db_functions;
+ else
+ __libc_utmp_jump_table = &unknown_functions;
+
+ result = 0;
+ }
+
+ __libc_lock_unlock (__libc_utmp_lock);
+
+ return result;
+}
+weak_alias (__utmpname, utmpname)
diff --git a/login/getutid.c b/login/getutid.c
index 64ced6aeea..d3d3b5d068 100644
--- a/login/getutid.c
+++ b/login/getutid.c
@@ -1,27 +1,27 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include <utmp.h>
-/* The global data defined in setutent.c. */
-extern struct utmp_data __utmp_data;
+/* Local buffer to store the result. */
+static struct utmp buffer;
struct utmp *
@@ -29,8 +29,8 @@ getutid (const struct utmp *id)
{
struct utmp *result;
- if (__getutid_r (id, &result, &__utmp_data) < 0)
+ if (__getutid_r (id, &buffer, &result) < 0)
return NULL;
- return (struct utmp *) result;
+ return result;
}
diff --git a/login/getutid_r.c b/login/getutid_r.c
index 81070157a4..52b83cd862 100644
--- a/login/getutid_r.c
+++ b/login/getutid_r.c
@@ -1,35 +1,45 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>
+ and Paul Janzen <pcj@primenet.com>, 1996.
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include <errno.h>
+#include <libc-lock.h>
#include <string.h>
#include <unistd.h>
#include <utmp.h>
+#include "utmp-private.h"
+
+
+/* We have to use the lock in getutent_r.c. */
+__libc_lock_define (extern, __libc_utmp_lock)
+
+/* The jump table is also in getutent_r.c. */
+extern struct utfuncs *__libc_utmp_jump_table;
+
-/* For implementing this function we don't use the getutent_r function
- because we can avoid the reposition on every new entry this way. */
int
-__getutid_r (const struct utmp *id, struct utmp **utmp,
- struct utmp_data *utmp_data)
+__getutid_r (const struct utmp *id, struct utmp *buffer, struct utmp **result)
{
#if (_HAVE_UT_ID - 0) && (_HAVE_UT_TYPE - 0)
+ int retval = -1;
+
/* Test whether ID has any of the legal types. */
if (id->ut_type != RUN_LVL && id->ut_type != BOOT_TIME
&& id->ut_type != OLD_TIME && id->ut_type != NEW_TIME
@@ -38,77 +48,21 @@ __getutid_r (const struct utmp *id, struct utmp **utmp,
/* No, using '<' and '>' for the test is not possible. */
{
__set_errno (EINVAL);
+ *result = NULL;
return -1;
}
- /* Open utmp file if not already done. */
- if (utmp_data->ut_fd == -1)
- {
- setutent_r (utmp_data);
- if (utmp_data->ut_fd == -1)
- return -1;
- }
-
- /* Position file correctly. */
- if (lseek (utmp_data->ut_fd, utmp_data->loc_utmp, SEEK_SET) == -1)
- return -1;
-
- if (id->ut_type == RUN_LVL || id->ut_type == BOOT_TIME
- || id->ut_type == OLD_TIME || id->ut_type == NEW_TIME)
- {
- /* Search for next entry with type RUN_LVL, BOOT_TIME,
- OLD_TIME, or NEW_TIME. */
-
- while (1)
- {
- /* Read the next entry. */
- if (read (utmp_data->ut_fd, &utmp_data->ubuf, sizeof (struct utmp))
- != sizeof (struct utmp))
- {
- utmp_data->loc_utmp = 0; /* Mark loc_utmp invalid. */
- __set_errno (ESRCH);
- return -1;
- }
-
- /* Update position pointer. */
- utmp_data->loc_utmp += sizeof (struct utmp);
+ __libc_lock_lock (__libc_utmp_lock);
- if (id->ut_type == utmp_data->ubuf.ut_type)
- break;
- }
- }
+ /* Not yet initialized. */
+ if ((*__libc_utmp_jump_table->setutent) (0))
+ retval = (*__libc_utmp_jump_table->getutid_r) (id, buffer, result);
else
- {
- /* Search for the next entry with the specified ID and with type
- INIT_PROCESS, LOGIN_PROCESS, USER_PROCESS, or DEAD_PROCESS. */
-
- while (1)
- {
- /* Read the next entry. */
- if (read (utmp_data->ut_fd, &utmp_data->ubuf, sizeof (struct utmp))
- != sizeof (struct utmp))
- {
- utmp_data->loc_utmp = 0; /* Mark loc_utmp invalid. */
- __set_errno (ESRCH);
- return -1;
- }
-
- /* Update position pointer. */
- utmp_data->loc_utmp += sizeof (struct utmp);
-
- if (( utmp_data->ubuf.ut_type == INIT_PROCESS
- || utmp_data->ubuf.ut_type == LOGIN_PROCESS
- || utmp_data->ubuf.ut_type == USER_PROCESS
- || utmp_data->ubuf.ut_type == DEAD_PROCESS)
- && (strncmp (utmp_data->ubuf.ut_id, id->ut_id, sizeof id->ut_id)
- == 0))
- break;
- }
- }
+ *result = NULL;
- *utmp = &utmp_data->ubuf;
+ __libc_lock_unlock (__libc_utmp_lock);
- return 0;
+ return retval;
#else /* !_HAVE_UT_ID && !_HAVE_UT_TYPE */
__set_errno (ENOSYS);
return -1;
diff --git a/login/getutline.c b/login/getutline.c
index c21f81745b..16a02f6e89 100644
--- a/login/getutline.c
+++ b/login/getutline.c
@@ -1,27 +1,27 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include <utmp.h>
-/* The global data defined in setutent.c. */
-extern struct utmp_data __utmp_data;
+/* Local buffer to store the result. */
+static struct utmp buffer;
struct utmp *
@@ -29,8 +29,8 @@ getutline (const struct utmp *line)
{
struct utmp *result;
- if (__getutline_r (line, &result, &__utmp_data) < 0)
+ if (__getutline_r (line, &buffer, &result) < 0)
return NULL;
- return (struct utmp *) result;
+ return result;
}
diff --git a/login/getutline_r.c b/login/getutline_r.c
index e88267decb..2285248ece 100644
--- a/login/getutline_r.c
+++ b/login/getutline_r.c
@@ -1,74 +1,55 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>
+ and Paul Janzen <pcj@primenet.com>, 1996.
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include <errno.h>
+#include <libc-lock.h>
#include <string.h>
#include <unistd.h>
#include <utmp.h>
+#include "utmp-private.h"
-/* For implementing this function we don't use the getutent_r function
- because we can avoid the reposition on every new entry this way. */
-int
-__getutline_r (const struct utmp *line, struct utmp **utmp,
- struct utmp_data *utmp_data)
-{
- /* Open utmp file if not already done. */
- if (utmp_data->ut_fd == -1)
- {
- __setutent_r (utmp_data);
- if (utmp_data->ut_fd == -1)
- return -1;
- }
- /* Position file correctly. */
- if (lseek (utmp_data->ut_fd, utmp_data->loc_utmp, SEEK_SET) == -1)
- return -1;
+/* We have to use the lock in getutent_r.c. */
+__libc_lock_define (extern, __libc_utmp_lock)
+
+/* The jump table is also in getutent_r.c. */
+extern struct utfuncs *__libc_utmp_jump_table;
- while (1)
- {
- /* Read the next entry. */
- if (read (utmp_data->ut_fd, &utmp_data->ubuf, sizeof (struct utmp))
- != sizeof (struct utmp))
- {
- utmp_data->loc_utmp = 0; /* Mark UTMP_DATA->ubuf invalid. */
- __set_errno (ESRCH);
- return -1;
- }
- /* Update position pointer. */
- utmp_data->loc_utmp += sizeof (struct utmp);
+int
+__getutline_r (const struct utmp *line, struct utmp *buffer,
+ struct utmp **result)
+{
+ int retval = -1;
+
+ __libc_lock_lock (__libc_utmp_lock);
- if (
-#if _HAVE_UT_TYPE - 0
- (utmp_data->ubuf.ut_type == USER_PROCESS
- || utmp_data->ubuf.ut_type == LOGIN_PROCESS)
- &&
-#endif
- ! strncmp (line->ut_line, utmp_data->ubuf.ut_line,
- sizeof line->ut_line))
- /* Stop if we found a user or login entry. */
- break;
- }
+ /* Not yet initialized. */
+ if ((*__libc_utmp_jump_table->setutent) (0))
+ retval = (*__libc_utmp_jump_table->getutline_r) (line, buffer, result);
+ else
+ *result = NULL;
- *utmp = &utmp_data->ubuf;
+ __libc_lock_unlock (__libc_utmp_lock);
- return 0;
+ return retval;
}
weak_alias (__getutline_r, getutline_r)
diff --git a/login/login.c b/login/login.c
index 00b176a104..7cbe8b603e 100644
--- a/login/login.c
+++ b/login/login.c
@@ -1,21 +1,21 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include <errno.h>
#include <limits.h>
@@ -43,8 +43,8 @@ tty_name (int fd, char **tty, size_t buf_len)
rv = ttyname_r (fd, buf, buf_len);
if (rv < 0 || memchr (buf, '\0', buf_len))
- /* We either got an error, or we succeeded and the returned name fit
- in the buffer. */
+ /* We either got an error, or we succeeded and the
+ returned name fit in the buffer. */
break;
/* Try again with a longer buffer. */
@@ -68,9 +68,9 @@ tty_name (int fd, char **tty, size_t buf_len)
}
if (rv == 0)
- *tty = buf; /* Return buffer to the user. */
+ *tty = buf; /* Return buffer to the user. */
else if (buf != *tty)
- free (buf); /* Free what we malloced when returning an error. */
+ free (buf); /* Free what we malloced when returning an error. */
return rv;
}
@@ -86,8 +86,8 @@ login (const struct utmp *ut)
char *tty = _tty;
int found_tty;
const char *ttyp;
- struct utmp_data data = { -1 };
struct utmp copy = *ut;
+ struct utmp utbuf;
/* Fill in those fields we supply. */
#if _HAVE_UT_TYPE - 0
@@ -118,26 +118,16 @@ login (const struct utmp *ut)
struct utmp *old;
/* Open UTMP file. */
- setutent_r (&data);
+ setutent ();
/* Read the record. */
- if (getutline_r (&copy, &old, &data) >= 0)
- {
-#if _HAVE_UT_TYPE - 0
- /* We have to fake the old entry because this `login'
- function does not fit well into the UTMP file
- handling scheme. */
- old->ut_type = copy.ut_type;
-#endif
- pututline_r (&copy, &data);
- }
- else if (errno == ESRCH)
- /* We didn't find anything. pututline_r will add UT at the end
- of the file in this case. */
- pututline_r (&copy, &data);
+ getutline_r (&copy, &utbuf, &old);
+
+ /* Write the entry. */
+ pututline (&copy);
/* Close UTMP file. */
- endutent_r (&data);
+ endutent ();
}
if (tty != _tty)
@@ -147,23 +137,18 @@ login (const struct utmp *ut)
/* Update the WTMP file. Here we have to add a new entry. */
if (utmpname (_PATH_WTMP) != 0)
{
+ struct utmp *up;
+
/* Open the WTMP file. */
- setutent_r (&data);
+ setutent ();
/* Position at end of file. */
- data.loc_utmp = lseek (data.ut_fd, 0, SEEK_END);
- if (data.loc_utmp != -1)
- {
-#if _HAVE_UT_TYPE - 0
- /* We have to fake the old entry because this `login'
- function does not fit well into the UTMP file handling
- scheme. */
- data.ubuf.ut_type = copy.ut_type;
-#endif
- pututline_r (&copy, &data);
- }
+ while (! getutent_r (&utbuf, &up));
+
+ /* Write the new entry. */
+ pututline (&copy);
/* Close WTMP file. */
- endutent_r (&data);
+ endutent ();
}
}
diff --git a/login/logout.c b/login/logout.c
index 8575512e0e..3e625486f6 100644
--- a/login/logout.c
+++ b/login/logout.c
@@ -25,8 +25,7 @@ Boston, MA 02111-1307, USA. */
int
logout (const char *line)
{
- struct utmp_data data = { ut_fd: -1 };
- struct utmp tmp;
+ struct utmp tmp, utbuf;
struct utmp *ut;
int result = 0;
@@ -35,7 +34,7 @@ logout (const char *line)
return 0;
/* Open UTMP file. */
- setutent_r (&data);
+ setutent ();
/* Fill in search information. */
#if _HAVE_UT_TYPE - 0
@@ -44,7 +43,7 @@ logout (const char *line)
strncpy (tmp.ut_line, line, sizeof tmp.ut_line);
/* Read the record. */
- if (getutline_r (&tmp, &ut, &data) >= 0)
+ if (getutline_r (&tmp, &utbuf, &ut) >= 0)
{
/* Clear information about who & from where. */
bzero (ut->ut_name, sizeof ut->ut_name);
@@ -57,12 +56,12 @@ logout (const char *line)
time (&ut->ut_time);
#endif
- if (pututline_r (ut, &data) >= 0)
+ if (pututline (ut) >= 0)
result = 1;
}
/* Close UTMP file. */
- endutent_r (&data);
+ endutent ();
return result;
}
diff --git a/login/logwtmp.c b/login/logwtmp.c
index 17c900181f..0d5e48e51f 100644
--- a/login/logwtmp.c
+++ b/login/logwtmp.c
@@ -1,21 +1,21 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include <errno.h>
#include <string.h>
diff --git a/login/utmp-private.h b/login/utmp-private.h
new file mode 100644
index 0000000000..4825ae3f6d
--- /dev/null
+++ b/login/utmp-private.h
@@ -0,0 +1,41 @@
+/* Internal definitions and declarations for UTMP functions.
+ Copyright (C) 1996 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>
+ and Paul Janzen <pcj@primenet.com>, 1996.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#ifndef _UTMP_PRIVATE_H
+#define _UTMP_PRIVATE_H 1
+
+#include <utmp.h>
+
+/* The extra `int' argument for each function shows whether locking is
+ wanted or not. */
+struct utfuncs
+{
+ int (*setutent) (int);
+ int (*getutent_r) (struct utmp *, struct utmp **);
+ int (*getutid_r) (const struct utmp *, struct utmp *, struct utmp **);
+ int (*getutline_r) (const struct utmp *, struct utmp *, struct utmp **);
+ struct utmp *(*pututline) (const struct utmp *);
+ void (*endutent) (void);
+ int (*utmpname) (const char *);
+
+};
+
+#endif /* utmp-private.h */
diff --git a/login/utmp.h b/login/utmp.h
index 6786190aad..87f822d9c3 100644
--- a/login/utmp.h
+++ b/login/utmp.h
@@ -58,9 +58,11 @@ extern int utmpname __P ((__const char *__file));
extern struct utmp *getutent __P ((void));
/* Rest the input stream to the beginning of the file. */
+extern void __setutent __P ((void));
extern void setutent __P ((void));
/* Close the current open file. */
+extern void __endutent __P ((void));
extern void endutent __P ((void));
/* Search forward from the current point in the utmp file until the
@@ -76,42 +78,19 @@ extern struct utmp *pututline __P ((__const struct utmp *__utmp_ptr));
#ifdef __USE_REENTRANT
-/* Define the data structure needed for the reentrant version. */
-struct utmp_data
-{
- int ut_fd;
- off_t loc_utmp;
- struct utmp ubuf;
-};
-
-
/* Reentrant versions of the file for handling utmp files. */
-extern int __getutent_r __P ((struct utmp **__utmp,
- struct utmp_data *__utmp_data));
-extern int getutent_r __P ((struct utmp **__utmp,
- struct utmp_data *__utmp_data));
-
-extern void __setutent_r __P ((struct utmp_data *__utmp_data));
-extern void setutent_r __P ((struct utmp_data *__utmp_data));
-
-extern void __endutent_r __P ((struct utmp_data *__utmp_data));
-extern void endutent_r __P ((struct utmp_data *__utmp_data));
+extern int __getutent_r __P ((struct utmp *__buffer, struct utmp **__result));
+extern int getutent_r __P ((struct utmp *__buffer, struct utmp **__result));
-extern int __getutid_r __P ((__const struct utmp *__id, struct utmp **__utmp,
- struct utmp_data *__utmp_data));
-extern int getutid_r __P ((__const struct utmp *__id, struct utmp **__utmp,
- struct utmp_data *__utmp_data));
+extern int __getutid_r __P ((__const struct utmp *__id, struct utmp *__buffer,
+ struct utmp **__result));
+extern int getutid_r __P ((__const struct utmp *__id, struct utmp *__buffer,
+ struct utmp **__result));
extern int __getutline_r __P ((__const struct utmp *__line,
- struct utmp **__utmp,
- struct utmp_data *__utmp_data));
-extern int getutline_r __P ((__const struct utmp *__line, struct utmp **__utmp,
- struct utmp_data *__utmp_data));
-
-extern int __pututline_r __P ((__const struct utmp *__utmp_ptr,
- struct utmp_data *__utmp_data));
-extern int pututline_r __P ((__const struct utmp *__utmp_ptr,
- struct utmp_data *__utmp_data));
+ struct utmp *__buffer, struct utmp **__result));
+extern int getutline_r __P ((__const struct utmp *__line,
+ struct utmp *__buffer, struct utmp **__result));
#endif /* Use reentrant. */
diff --git a/login/utmp_db.c b/login/utmp_db.c
new file mode 100644
index 0000000000..2c5baf6592
--- /dev/null
+++ b/login/utmp_db.c
@@ -0,0 +1,102 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>
+ and Paul Janzen <pcj@primenet.com>, 1996.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <assert.h>
+#include <db.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <utmp.h>
+#include <sys/stat.h>
+
+#include "utmp-private.h"
+
+
+/* This is the default name. */
+static const char default_file_name[] = _PATH_UTMP_DB;
+
+/* Current file name. */
+static const char *file_name = (const char *) default_file_name;
+
+/* Descriptor for database. */
+static DB *db_fd;
+static char last_date[16];
+
+
+/* Our local functions. */
+static int setutent_db (int reset);
+static void endutent_db (void);
+static int utmpname_db (const char *name);
+
+
+/* The jump table for the local functions. */
+struct utfuncs __libc_utmp_db_functions =
+{
+ setutent_db,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ endutent_db,
+ utmpname_db
+};
+
+
+static int
+setutent_db (int reset)
+{
+ return 0;
+}
+
+
+static void
+endutent_db (void)
+{
+}
+
+
+static int
+utmpname_db (const char *name)
+{
+ if (strcmp (name, file_name) != 0)
+ {
+ if (strcmp (name, default_file_name) == 0)
+ {
+ if (file_name != default_file_name)
+ free ((char *) file_name);
+
+ file_name = default_file_name;
+ }
+ else
+ {
+ char *new_name = __strdup (name);
+ if (new_name == NULL)
+ /* Out of memory. */
+ return -1;
+
+ if (file_name != default_file_name)
+ free ((char *) file_name);
+
+ file_name = new_name;
+ }
+ }
+ return 0;
+}
diff --git a/login/utmp_file.c b/login/utmp_file.c
new file mode 100644
index 0000000000..fff487a0a3
--- /dev/null
+++ b/login/utmp_file.c
@@ -0,0 +1,385 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>
+ and Paul Janzen <pcj@primenet.com>, 1996.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <utmp.h>
+#include <sys/file.h>
+#include <sys/stat.h>
+
+#include "utmp-private.h"
+
+
+/* This is the default name. */
+static const char default_file_name[] = _PATH_UTMP;
+
+/* Current file name. */
+static const char *file_name = (const char *) default_file_name;
+
+/* Descriptor for the file and position. */
+static int file_fd = INT_MIN;
+static off_t file_offset;
+
+static struct utmp last_entry;
+
+/* Functions defined here. */
+static int setutent_file (int reset);
+static int getutent_r_file (struct utmp *buffer, struct utmp **result);
+static int getutid_r_file (const struct utmp *key, struct utmp *buffer,
+ struct utmp **result);
+static int getutline_r_file (const struct utmp *key, struct utmp *buffer,
+ struct utmp **result);
+static struct utmp *pututline_file (const struct utmp *data);
+static void endutent_file (void);
+static int utmpname_file (const char *name);
+
+
+/* Jump table for file functions. */
+struct utfuncs __libc_utmp_file_functions =
+{
+ setutent_file,
+ getutent_r_file,
+ getutid_r_file,
+ getutline_r_file,
+ pututline_file,
+ endutent_file,
+ utmpname_file
+};
+
+
+static int
+setutent_file (int reset)
+{
+ if (file_fd == INT_MIN)
+ {
+ file_fd = open (file_name, O_RDWR);
+ if (file_fd == -1)
+ {
+ /* Hhm, read-write access did not work. Try read-only. */
+ file_fd = open (file_name, O_RDONLY);
+ if (file_fd == -1)
+ {
+ perror (_("while opening UTMP file"));
+ return 0;
+ }
+ }
+ file_offset = 0;
+
+ /* Make sure the entry won't match. */
+ last_entry.ut_type = -1;
+ }
+ else if (reset)
+ {
+ /* Remember we are at beginning of file. */
+ file_offset = 0;
+
+ /* Make sure the entry won't match. */
+ last_entry.ut_type = -1;
+ }
+
+ return 1;
+}
+
+
+static void
+endutent_file (void)
+{
+ if (file_fd >= 0)
+ close (file_fd);
+
+ file_fd = INT_MIN;
+}
+
+
+static int
+getutent_r_file (struct utmp *buffer, struct utmp **result)
+{
+ int nbytes;
+
+ /* Open utmp file if not already done. */
+ if (file_fd == INT_MIN)
+ setutent_file (1);
+
+ if (file_fd == -1 || file_offset == -1l)
+ {
+ /* Not available. */
+ *result = NULL;
+ return -1;
+ }
+
+ /* Read the next entry. */
+ flock (file_fd, LOCK_SH);
+ nbytes = read (file_fd, &last_entry, sizeof (struct utmp));
+ flock (file_fd, LOCK_UN);
+
+ if (nbytes!= sizeof (struct utmp))
+ {
+ file_offset = -1l;
+ *result = NULL;
+ return -1;
+ }
+
+ /* Update position pointer. */
+ file_offset += sizeof (struct utmp);
+
+ memcpy (buffer, &last_entry, sizeof (struct utmp));
+ *result = buffer;
+
+ return 0;
+}
+
+
+/* For implementing this function we don't use the getutent_r function
+ because we can avoid the reposition on every new entry this way. */
+static int
+getutline_r_file (const struct utmp *line, struct utmp *buffer,
+ struct utmp **result)
+{
+ if (file_fd < 0 || file_offset == -1l)
+ {
+ *result = NULL;
+ return -1;
+ }
+
+ while (1)
+ {
+ /* Read the next entry. */
+ if (read (file_fd, &last_entry, sizeof (struct utmp))
+ != sizeof (struct utmp))
+ {
+ __set_errno (ESRCH);
+ file_offset = -1l;
+ *result = NULL;
+ return -1;
+ }
+
+ /* Stop if we found a user or login entry. */
+ if (
+#if _HAVE_UT_TYPE - 0
+ (last_entry.ut_type == USER_PROCESS
+ || last_entry.ut_type == LOGIN_PROCESS)
+ &&
+#endif
+ !strncmp (line->ut_line, last_entry.ut_line, sizeof line->ut_line))
+ break;
+
+ file_offset += sizeof (struct utmp);
+ }
+
+ memcpy (buffer, &last_entry, sizeof (struct utmp));
+ *result = buffer;
+
+ return 0;
+}
+
+
+static int
+internal_getutid_r (const struct utmp *id, struct utmp *buffer)
+{
+ if (id->ut_type == RUN_LVL || id->ut_type == BOOT_TIME
+ || id->ut_type == OLD_TIME || id->ut_type == NEW_TIME)
+ {
+ /* Search for next entry with type RUN_LVL, BOOT_TIME,
+ OLD_TIME, or NEW_TIME. */
+
+ while (1)
+ {
+ /* Read the next entry. */
+ if (read (file_fd, buffer, sizeof (struct utmp))
+ != sizeof (struct utmp))
+ {
+ __set_errno (ESRCH);
+ file_offset = -1l;
+ return -1;
+ }
+
+ if (id->ut_type == buffer->ut_type)
+ break;
+
+ file_offset += sizeof (struct utmp);
+ }
+ }
+ else
+ {
+ /* Search for the next entry with the specified ID and with type
+ INIT_PROCESS, LOGIN_PROCESS, USER_PROCESS, or DEAD_PROCESS. */
+
+ while (1)
+ {
+ /* Read the next entry. */
+ if (read (file_fd, buffer, sizeof (struct utmp))
+ != sizeof (struct utmp))
+ {
+ __set_errno (ESRCH);
+ file_offset = -1l;
+ return -1;
+ }
+ if (( buffer->ut_type == INIT_PROCESS
+ || buffer->ut_type == LOGIN_PROCESS
+ || buffer->ut_type == USER_PROCESS
+ || buffer->ut_type == DEAD_PROCESS)
+ && strncmp (buffer->ut_id, id->ut_id, sizeof id->ut_id) == 0)
+ break;
+
+ file_offset += sizeof (struct utmp);
+ }
+ }
+
+ return 0;
+}
+
+
+/* For implementing this function we don't use the getutent_r function
+ because we can avoid the reposition on every new entry this way. */
+static int
+getutid_r_file (const struct utmp *id, struct utmp *buffer,
+ struct utmp **result)
+{
+ if (file_fd < 0 || file_offset == -1l)
+ {
+ *result = NULL;
+ return -1;
+ }
+
+ if (internal_getutid_r (id, &last_entry) < 0)
+ {
+ *result = NULL;
+ return -1;
+ }
+
+ memcpy (buffer, &last_entry, sizeof (struct utmp));
+ *result = buffer;
+
+ return 0;
+}
+
+
+static struct utmp *
+pututline_file (const struct utmp *data)
+{
+ struct utmp buffer;
+ struct utmp *pbuf;
+ int found;
+
+ if (file_fd < 0)
+ /* Something went wrong. */
+ return NULL;
+
+ /* Find the correct place to insert the data. */
+ if (file_offset > 0)
+ found = 0;
+ else
+ if ( last_entry.ut_type == RUN_LVL
+ || last_entry.ut_type == BOOT_TIME
+ || last_entry.ut_type == OLD_TIME
+ || last_entry.ut_type == NEW_TIME
+ || (( last_entry.ut_type == INIT_PROCESS
+ || last_entry.ut_type == LOGIN_PROCESS
+ || last_entry.ut_type == USER_PROCESS
+ || last_entry.ut_type == DEAD_PROCESS)
+ && !strncmp (last_entry.ut_id, data->ut_id, sizeof data->ut_id)))
+ found = 1;
+ else
+ found = internal_getutid_r (data, &buffer);
+
+ /* Try to lock the file. */
+ if (flock (file_fd, LOCK_EX | LOCK_NB) < 0 && errno != ENOSYS)
+ {
+ /* Oh, oh. The file is already locked. Wait a bit and try again. */
+ sleep (1);
+
+ /* This time we ignore the error. */
+ (void) flock (file_fd, LOCK_EX | LOCK_NB);
+ }
+
+ if (found < 0)
+ {
+ /* We append the next entry. */
+ file_offset = lseek (file_fd, 0, SEEK_END);
+ if (file_offset % sizeof (struct utmp) != 0)
+ {
+ file_offset -= file_offset % sizeof (struct utmp);
+ ftruncate (file_fd, file_offset);
+
+ if (lseek (file_fd, 0, SEEK_END) < 0)
+ {
+ (void) flock (file_fd, LOCK_UN);
+ return NULL;
+ }
+ }
+ }
+ else
+ {
+ /* We replace the just read entry. */
+ file_offset -= sizeof (struct utmp);
+ lseek (file_fd, file_offset, SEEK_SET);
+ }
+
+ /* Write the new data. */
+ if (write (file_fd, data, sizeof (struct utmp)) != sizeof (struct utmp)
+ /* If we appended a new record this is only partially written.
+ Remove it. */
+ && found < 0)
+ {
+ (void) ftruncate (file_fd, file_offset);
+ pbuf = NULL;
+ }
+ else
+ pbuf = (struct utmp *) data;
+
+ /* And unlock the file. */
+ (void) flock (file_fd, LOCK_UN);
+
+ return pbuf;
+}
+
+
+static int
+utmpname_file (const char *name)
+{
+ if (strcmp (name, file_name) != 0)
+ {
+ if (strcmp (name, default_file_name) == 0)
+ {
+ if (file_name != default_file_name)
+ free ((char *) file_name);
+
+ file_name = default_file_name;
+ }
+ else
+ {
+ char *new_name = __strdup (name);
+ if (new_name == NULL)
+ /* Out of memory. */
+ return -1;
+
+ if (file_name != default_file_name)
+ free ((char *) file_name);
+
+ file_name = new_name;
+ }
+ }
+ return 0;
+}
diff --git a/nss/getXXbyYY_r.c b/nss/getXXbyYY_r.c
index 6ddfd61d8d..635023884e 100644
--- a/nss/getXXbyYY_r.c
+++ b/nss/getXXbyYY_r.c
@@ -97,7 +97,7 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
{
no_more = DB_LOOKUP_FCT (&nip, REENTRANT_NAME_STRING, (void **) &fct);
if (no_more)
- startp = (service_user *) -1;
+ startp = (service_user *) -1l;
else
{
startp = nip;
@@ -118,7 +118,7 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
else
{
fct = start_fct;
- no_more = (nip = startp) == (service_user *) -1;
+ no_more = (nip = startp) == (service_user *) -1l;
}
while (no_more == 0)
diff --git a/nss/getXXent_r.c b/nss/getXXent_r.c
index 6c8105c03f..1df51ab768 100644
--- a/nss/getXXent_r.c
+++ b/nss/getXXent_r.c
@@ -124,9 +124,9 @@ setup (void **fctp, const char *func_name, int all)
if (startp == NULL)
{
no_more = DB_LOOKUP_FCT (&nip, func_name, fctp);
- startp = no_more ? (service_user *) -1 : nip;
+ startp = no_more ? (service_user *) -1l : nip;
}
- else if (startp == (service_user *) -1)
+ else if (startp == (service_user *) -1l)
/* No services at all. */
return 1;
else
diff --git a/nss/nsswitch.c b/nss/nsswitch.c
index 8ce1e8d122..af74493c3f 100644
--- a/nss/nsswitch.c
+++ b/nss/nsswitch.c
@@ -339,10 +339,10 @@ nss_lookup_function (service_user *ni, const char *fct_name)
if (nss_dlerror_run (do_open) != 0)
/* Failed to load the library. */
- ni->library->lib_handle = (void *) -1;
+ ni->library->lib_handle = (void *) -1l;
}
- if (ni->library->lib_handle == (void *) -1)
+ if (ni->library->lib_handle == (void *) -1l)
/* Library not found => function not found. */
result = NULL;
else
diff --git a/posix/Makefile b/posix/Makefile
index a2b7e57cda..fcf7cbae9e 100644
--- a/posix/Makefile
+++ b/posix/Makefile
@@ -25,7 +25,7 @@ headers := sys/utsname.h sys/times.h sys/wait.h sys/types.h unistd.h \
glob.h regex.h wordexp.h fnmatch.h gnu/types.h getopt.h \
posix1_lim.h posix2_lim.h posix_opt.h local_lim.h tar.h \
utsnamelen.h confname.h waitflags.h waitstatus.h sys/unistd.h \
- sched.h schedbits.h re_comp.h
+ sched.h schedbits.h re_comp.h wait.h
distribute := confstr.h
diff --git a/posix/sys/types.h b/posix/sys/types.h
index 26a35ee584..bbda57eee0 100644
--- a/posix/sys/types.h
+++ b/posix/sys/types.h
@@ -76,7 +76,6 @@ typedef unsigned short int ushort;
typedef unsigned int uint;
#endif
-#ifdef __USE_BSD
/* These size-specific names are used by some of the inet code. */
#if !defined (__GNUC__) || __GNUC__ < 2 || __GNUC_MINOR__ < 7
@@ -112,7 +111,6 @@ __u_intN_t (64, __DI__);
typedef int register_t __attribute__ ((__mode__ (__word__)));
-#endif
/* Some code from BIND tests this macro to see if the types above are
defined. */
diff --git a/posix/wait.h b/posix/wait.h
new file mode 100644
index 0000000000..d01b81125f
--- /dev/null
+++ b/posix/wait.h
@@ -0,0 +1 @@
+#include <sys/wait.h>
diff --git a/rellns-sh b/rellns-sh
index 2df4721b00..40c4386c9c 100755
--- a/rellns-sh
+++ b/rellns-sh
@@ -28,15 +28,13 @@ case $1 in
to=`echo $1 | sed 's%^/%%'`
if test -d $2; then
- fromname=.
- from=`echo $2 | sed 's%/$%%'`
+ from=`echo $2 | sed 's%/*$%%'`
else
- fromname=`echo $2 | sed 's%.*/\([^/]*\)$%\1%'`
- from=`echo $2 | sed "s%/*$fromname$%%"`
+ from=`echo $2 | sed 's%/*[^/]*$%%'`
fi
- case $from in
- /*) from=`echo $from | sed 's%^/%%'` ;;
+ case "$from" in
+ /*) from=`echo $from | sed 's%^/*%%'` ;;
?*) from=`cd $from && pwd | sed 's%^/%%'` ;;
*) from=`pwd | sed 's%^/%%'` ;;
esac
@@ -47,8 +45,8 @@ case $1 in
test "$preto" != "$prefrom" && break
- to=`echo $to | sed 's%^[^/]*/\(.*\)$%\1%'`
- from=`echo $from | sed 's%^[^/]*/\(.*\)$%\1%'`
+ to=`echo $to | sed 's%^[^/]*/*\(.*\)$%\1%'`
+ from=`echo $from | sed 's%^[^/]*/*\(.*\)$%\1%'`
done
while test -n "$from"; do
@@ -63,5 +61,3 @@ case $1 in
ln -s $1 $2
;;
esac
-
-exit 0
diff --git a/shlib-versions b/shlib-versions
index 58ea1f55b3..f2dbb79635 100644
--- a/shlib-versions
+++ b/shlib-versions
@@ -9,49 +9,49 @@
# ------------- ------- --------
# The interface to -lm depends only on cpu, not on operating system.
-i?86-*-* libm=6
-m68k-*-* libm=6
-alpha-*-* libm=6
+i.86-.*-.* libm=6
+m68k-.*-.* libm=6
+alpha-.*-.* libm=6
# We provide libc.so.6 for Linux kernel versions 2.0 and later.
-i?86-*-linux* libc=6
-m68k-*-linux* libc=6
-alpha-*-linux* libc=6
+i.86-.*-linux.* libc=6
+m68k-.*-linux.* libc=6
+alpha-.*-linux.* libc=6
# libmachuser.so.1 corresponds to mach/*.defs as of Utah's UK22 release.
-*-*-gnu?* libmachuser=1
+.*-.*-gnu-gnu.* libmachuser=1
# libhurduser.so.0.0 corresponds to hurd/*.defs as of 7 May 1996.
-*-*-gnu?* libhurduser=0.0
+.*-.*-gnu-gnu* libhurduser=0.0
# libc.so.0.2 is for the Hurd alpha release 0.2.
-*-*-gnu?* libc=0.2
+.*-.*-gnu-gnu* libc=0.2
# The dynamic loader also requires different names.
-i?86-*-linux* ld=ld-linux.so.2
+i.86-.*-linux.* ld=ld-linux.so.2
# We use the ELF ABI standard name for the default.
-*-*-* ld=ld.so.1
+.*-.*-.* ld=ld.so.1
# The -ldl interface (see <dlfcn.h>) is the same on all platforms.
-*-*-* libdl=2
+.*-.*-.* libdl=2
# So far the -lutil interface is the same on all platforms, except for the
# `struct utmp' format, which depends on libc.
-*-*-* libutil=1
+.*-.*-.* libutil=1
# Version number 2 is used on other systems for the BIND 4.9.5 resolver
# interface.
-*-*-* libresolv=2
+.*-.*-.* libresolv=2
# Interface revision of nss_* modules. This must match NSS_SHLIB_REVISION
# in nss/nsswitch.h, which determines the library names used for service
# names given in /etc/nsswitch.conf.
-*-*-* libnss_files=1
-*-*-* libnss_dns=1
-*-*-* libnss_db=1
+.*-.*-.* libnss_files=1
+.*-.*-.* libnss_dns=1
+.*-.*-.* libnss_db=1
# We use libdb.so.2 for the interface in version 1.85 of the Berkeley DB code.
-*-*-* libdb=2
+.*-.*-.* libdb=2
# This defines the shared library version numbers we will install.
-*-*-* libcrypt=1
+.*-.*-.* libcrypt=1
diff --git a/stdio-common/Makefile b/stdio-common/Makefile
index 920af7938f..ec7429c36e 100644
--- a/stdio-common/Makefile
+++ b/stdio-common/Makefile
@@ -12,9 +12,9 @@
# Library General Public License for more details.
# You should have received a copy of the GNU Library General Public
-# License along with the GNU C Library; see the file COPYING.LIB. If
-# not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-# Cambridge, MA 02139, USA.
+# License along with the GNU C Library; see the file COPYING.LIB. If not,
+# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
#
# Specific makefile for stdio-common.
@@ -51,6 +51,8 @@ include ../Rules
CFLAGS-_itoa.c = -Wno-unused
CFLAGS-tst-printf.c = -Wno-format
CFLAGS-tstdiomisc.c = -Wno-format
+CFLAGS-scanf4.c = -Wno-format
+CFLAGS-scanf7.c = -Wno-format
ifeq ($(stdio),libio)
ifneq (,$(filter %REENTRANT, $(defines)))
diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h
index 8f94f3b168..e741f492c6 100644
--- a/stdlib/stdlib.h
+++ b/stdlib/stdlib.h
@@ -245,14 +245,16 @@ struct random_data
extern int __random_r __P ((struct random_data *__buf, int32_t *__result));
extern int random_r __P ((struct random_data *__buf, int32_t *__result));
+
extern int __srandom_r __P ((unsigned int __seed, struct random_data *__buf));
+extern int srandom_r __P ((unsigned int __seed, struct random_data *__buf));
+
extern int __initstate_r __P ((unsigned int __seed, __ptr_t __statebuf,
size_t __statelen, struct random_data *__buf));
-extern int __setstate_r __P ((__ptr_t __statebuf, struct random_data *__buf));
-
-extern int srandom_r __P ((unsigned int __seed, struct random_data *__buf));
extern int initstate_r __P ((unsigned int __seed, __ptr_t __statebuf,
size_t __statelen, struct random_data *__buf));
+
+extern int __setstate_r __P ((__ptr_t __statebuf, struct random_data *__buf));
extern int setstate_r __P ((__ptr_t __statebuf, struct random_data *__buf));
#endif /* Use reentrant. */
#endif /* Use BSD. */
diff --git a/stdlib/strtod.c b/stdlib/strtod.c
index e1fff3dc3d..859e077b66 100644
--- a/stdlib/strtod.c
+++ b/stdlib/strtod.c
@@ -445,7 +445,8 @@ INTERNAL (STRTOF) (nptr, endptr, group)
/* If no other digit but a '0' is found the result is 0.0.
Return current read pointer. */
- if ((c < L_('0') || c > L_('9')) && (wint_t) c != decimal && !TOLOWER (c))
+ if ((c < L_('0') || c > L_('9')) && (wint_t) c != decimal
+ && TOLOWER (c) != L_('e'))
{
tp = correctly_grouped_prefix (start_of_digits, cp, thousands, grouping);
/* If TP is at the start of the digits, there was no correctly
diff --git a/sysdeps/alpha/elf/Dist b/sysdeps/alpha/elf/Dist
new file mode 100644
index 0000000000..3e7010182b
--- /dev/null
+++ b/sysdeps/alpha/elf/Dist
@@ -0,0 +1,2 @@
+crtbegin.S
+crtend.S
diff --git a/sysdeps/alpha/elf/crtbegin.S b/sysdeps/alpha/elf/crtbegin.S
new file mode 100644
index 0000000000..f75673e35f
--- /dev/null
+++ b/sysdeps/alpha/elf/crtbegin.S
@@ -0,0 +1,91 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+ Contributed by Richard Henderson (rth@tamu.edu)
+
+ 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. */
+
+
+/*
+ * Heads of the constructor/destructor lists.
+ */
+
+/* The __*TOR_LIST__ symbols are not global because when this file is used
+ in a shared library, we do not want the symbol to fall over to the
+ application's lists. */
+
+.section .ctors,"aw"
+
+ .align 3
+__CTOR_LIST__:
+ .quad -1
+
+.section .dtors,"aw"
+
+ .align 3
+__DTOR_LIST__:
+ .quad -1
+
+
+/*
+ * Fragment of the ELF _fini routine that invokes our dtor cleanup.
+ */
+
+.section .fini,"ax"
+
+ /* Since the bits of the _fini function are spread across many
+ object files, each potentially with its own GP, we must
+ assume we need to load ours. Further, our .fini section
+ can easily be more than 4MB away from our .text bits so we
+ can't use bsr. */
+
+ br $gp,1f
+1: ldgp $gp,0($gp)
+ jsr $26,__do_global_dtors_aux
+
+ /* Must match the alignment we got from crti.o else we get
+ zero-filled holes in our _fini function and thense SIGILL. */
+ .align 3
+
+/*
+ * Invoke our destructors in order.
+ */
+
+.text
+
+ .align 3
+ .ent __do_global_dtors_aux
+
+__do_global_dtors_aux:
+ .frame $sp,16,$26,0
+ /* GP already loaded in .fini */
+ lda $sp,-16($sp)
+ stq $9,8($sp)
+ stq $26,0($sp)
+ .mask (1<<26)|(1<<9), -16
+ .prologue 1
+
+ lda $9,__DTOR_LIST__
+ br 1f
+0: jsr $26,($27)
+1: ldq $27,8($9)
+ addq $9,8,$9
+ bne $27,0b
+
+ ldq $26,0($sp)
+ ldq $9,8($sp)
+ lda $sp,16($sp)
+ ret
+
+ .end __do_global_dtors_aux
diff --git a/sysdeps/alpha/elf/crtend.S b/sysdeps/alpha/elf/crtend.S
new file mode 100644
index 0000000000..7f51d81da1
--- /dev/null
+++ b/sysdeps/alpha/elf/crtend.S
@@ -0,0 +1,92 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+ Contributed by Richard Henderson (rth@tamu.edu)
+
+ 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. */
+
+
+/*
+ * Tails of the constructor/destructor lists.
+ */
+
+/* The __*TOR_END__ symbols are not global because when this file is used
+ in a shared library, we do not want the symbol to fall over to the
+ application's lists. */
+
+.section .ctors,"aw"
+
+ .align 3
+__CTOR_END__:
+ .quad 0
+
+.section .dtors,"aw"
+
+ .align 3
+__DTOR_END__:
+ .quad 0
+
+
+/*
+ * Fragment of the ELF _init routine that invokes our ctor startup
+ */
+
+.section .init,"ax"
+
+ /* Since the bits of the _init function are spread across many
+ object files, each potentially with its own GP, we must
+ assume we need to load ours. Further, our .init section
+ can easily be more than 4MB away from our .text bits so we
+ can't use bsr. */
+
+ br $gp,1f
+1: ldgp $gp,0($gp)
+ jsr $26,__do_global_ctors_aux
+
+ /* Must match the alignment we got from crti.o else we get
+ zero-filled holes in our _init function and thense SIGILL. */
+ .align 3
+
+/*
+ * Invoke our destructors in order.
+ */
+
+.text
+
+ .align 3
+ .ent __do_global_ctors_aux
+
+__do_global_ctors_aux:
+ .frame $sp,16,$26,0
+ /* GP already loaded in .init. */
+ lda $sp,-16($sp)
+ stq $9,8($sp)
+ stq $26,0($sp)
+ .mask (1<<26)|(1<<9), -16
+ .prologue 1
+
+ lda $9,__CTOR_END__
+ br 1f
+0: jsr $26,($27)
+1: ldq $27,-8($9)
+ subq $9,8,$9
+ not $27,$0
+ bne $0,0b
+
+ ldq $26,0($sp)
+ ldq $9,8($sp)
+ lda $sp,16($sp)
+ ret
+
+ .end __do_global_ctors_aux
diff --git a/sysdeps/generic/paths.h b/sysdeps/generic/paths.h
index a2ff426753..e5f34014a8 100644
--- a/sysdeps/generic/paths.h
+++ b/sysdeps/generic/paths.h
@@ -62,6 +62,7 @@
#define _PATH_TTY "/dev/tty"
#define _PATH_UNIX "/vmunix"
#define _PATH_UTMP "/var/run/utmp"
+#define _PATH_UTMP_DB "/var/run/utmp.db"
#define _PATH_VI "/usr/bin/vi"
#define _PATH_WTMP "/var/log/wtmp"
diff --git a/sysdeps/generic/pty.c b/sysdeps/generic/pty.c
index 8df8aba4ba..660602b25a 100644
--- a/sysdeps/generic/pty.c
+++ b/sysdeps/generic/pty.c
@@ -59,9 +59,12 @@ openpty(amaster, aslave, name, termp, winp)
static char line[] = "/dev/ptyXX";
register const char *cp1, *cp2;
register int master, slave, ttygid;
+ size_t buflen = sysconf (_SC_GETGR_R_SIZE_MAX);
+ char buffer[buflen];
+ struct group grbuffer;
struct group *gr;
- if ((gr = getgrnam("tty")) != NULL)
+ if (getgrnam_r("tty", &grbuffer, buffer, buflen, &gr) >= 0)
ttygid = gr->gr_gid;
else
ttygid = -1;
diff --git a/sysdeps/gnu/utmpbits.h b/sysdeps/gnu/utmpbits.h
index 37e4fb9acc..5bb230b243 100644
--- a/sysdeps/gnu/utmpbits.h
+++ b/sysdeps/gnu/utmpbits.h
@@ -52,6 +52,31 @@ struct lastlog
char ll_host[UT_HOSTSIZE];
};
+
+/* Which program created the record. */
+enum utlogin
+{
+ unknown,
+ X,
+ local,
+ rlogin,
+ telnet,
+ rsh,
+ ftp,
+ screen,
+ splitvt,
+ xterm
+ /* More could be added here. */
+};
+
+
+struct exit_status
+{
+ short int e_termination; /* Process termination status. */
+ short int e_exit; /* Process exit status. */
+};
+
+
struct utmp
{
short int ut_type; /* Type of login. */
@@ -61,11 +86,14 @@ struct utmp
char ut_user[UT_NAMESIZE]; /* Username (not NUL terminated). */
#define ut_name ut_user /* Compatible field name for same. */
char ut_host[UT_HOSTSIZE]; /* Hostname for remote login. */
- int ut_exit; /* Process termination/exit status. */
+ struct exit_status ut_exit; /* The exit status of a process marked
+ as DEAD_PROCESS. */
long ut_session; /* Session ID, used for windowing. */
struct timeval ut_tv; /* Time entry was made. */
- int32_t ut_addr; /* Internet address of remote host. */
- char pad[32]; /* Reserved for future use. */
+ int32_t ut_addr[4]; /* Internet address of remote host. */
+ enum utlogin ut_login; /* To store information about source. */
+ short int ut_syslen; /* Significant length of ut_host. */
+ char pad[14]; /* Reserved for future use. */
};
#define ut_time ut_tv.tv_sec /* Backwards compatibility. */
diff --git a/sysdeps/mach/hurd/Dist b/sysdeps/mach/hurd/Dist
index 986efc4e2d..62fe4d96c6 100644
--- a/sysdeps/mach/hurd/Dist
+++ b/sysdeps/mach/hurd/Dist
@@ -1,3 +1,3 @@
errnos.awk err_hurd.sub
libc-ldscript
-
+libc_p-ldscript
diff --git a/sysdeps/mach/hurd/Makefile b/sysdeps/mach/hurd/Makefile
index 74ceb2e6e1..eb3dc01252 100644
--- a/sysdeps/mach/hurd/Makefile
+++ b/sysdeps/mach/hurd/Makefile
@@ -98,17 +98,20 @@ common-generated += errnos.d stamp-errnos
libc-name = crt
ifeq (,$(subdir))
-install-others += $(libdir)/libc.a
+install-others += $(libdir)/libc.a $(libdir)/libc_p.a
$(libdir)/libc.a: $(hurd)/libc-ldscript; $(do-install)
+$(libdir)/libc_p.a: $(hurd)/libc_p-ldscript; $(do-install)
endif
-# For the shared library, we don't need to do the linker script machination.
-# Instead, we specify the required libraries when building the shared object.
+# Make sure these are used to build the libc.so shared object too.
rpcuserlibs := $(common-objpfx)mach/libmachuser.so \
$(common-objpfx)hurd/libhurduser.so
$(common-objpfx)libc.so: $(rpcuserlibs)
rpath-link := $(rpath-link):$(common-objpfx)mach:$(common-objpfx)hurd
+# And get them into the libc.so ldscript.
+$(libdir)/libc.so: $(rpcuserlibs)
+
# The RPC stubs from these libraries are needed in building the dynamic
# linker, too. It must be self-contained, so we link the needed PIC
# objects directly into the shared object.
diff --git a/sysdeps/mach/hurd/libc_p-ldscript b/sysdeps/mach/hurd/libc_p-ldscript
new file mode 100644
index 0000000000..d809998a1f
--- /dev/null
+++ b/sysdeps/mach/hurd/libc_p-ldscript
@@ -0,0 +1,5 @@
+/* This linker script is installed as /lib/libc_p.a.
+ It makes -lc_p become just like -( -lcrt_p -lmachuser_p -lhurduser_p -).
+ */
+
+GROUP ( libcrt_p.a libmachuser_p.a libhurduser_p.a )
diff --git a/sysdeps/posix/getcwd.c b/sysdeps/posix/getcwd.c
index 825599f370..5f3f628fb5 100644
--- a/sysdeps/posix/getcwd.c
+++ b/sysdeps/posix/getcwd.c
@@ -344,8 +344,11 @@ __getcwd (buf, size)
__set_errno (ENOMEM);/* closedir might have changed it.*/
return NULL;
}
- pathp = &buf[pathp - path];
+ pathp = &buf[pathp - path + size / 2];
path = buf;
+ /* Move current contents up to the end of the buffer.
+ This is guaranteed to be non-overlapping. */
+ memcpy (pathp, pathp - size / 2, path + size - pathp);
}
}
pathp -= namlen;
diff --git a/sysdeps/stub/getlogin.c b/sysdeps/stub/getlogin.c
index 484c159855..34acbc38a9 100644
--- a/sysdeps/stub/getlogin.c
+++ b/sysdeps/stub/getlogin.c
@@ -1,20 +1,20 @@
/* Copyright (C) 1991, 1995, 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+ This file is part of the GNU C Library.
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include <stddef.h>
#include <errno.h>
@@ -23,11 +23,10 @@ Cambridge, MA 02139, USA. */
/* Return the login name of the user, or NULL if it can't be determined.
The returned pointer, if not NULL, is good only until the next call. */
char *
-getlogin ()
+getlogin (void)
{
__set_errno (ENOSYS);
return NULL;
}
-
stub_warning (getlogin)
diff --git a/sysdeps/stub/getlogin_r.c b/sysdeps/stub/getlogin_r.c
index fa9bb75d41..d811818096 100644
--- a/sysdeps/stub/getlogin_r.c
+++ b/sysdeps/stub/getlogin_r.c
@@ -1,21 +1,21 @@
/* Reentrant function to return the current login name. Stub version.
-Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+ Copyright (C) 1996 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include <errno.h>
#include <unistd.h>
diff --git a/sysdeps/unix/getlogin.c b/sysdeps/unix/getlogin.c
index ef985f2d2f..6e8a9a2a87 100644
--- a/sysdeps/unix/getlogin.c
+++ b/sysdeps/unix/getlogin.c
@@ -1,20 +1,20 @@
/* Copyright (C) 1991, 1992, 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+ This file is part of the GNU C Library.
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include <errno.h>
#include <unistd.h>
@@ -34,9 +34,8 @@ getlogin (void)
char tty_pathname[2 + 2 * NAME_MAX];
char *real_tty_path = tty_pathname;
char *result = NULL;
- struct utmp_data utmp_data = { ut_fd: -1 };
static char name[UT_NAMESIZE + 1];
- struct utmp *ut, line;
+ struct utmp *ut, line, buffer;
/* Get name of tty connected to fd 0. Return NULL if not a tty or
if fd 0 isn't open. Note that a lot of documentation says that
@@ -52,9 +51,9 @@ getlogin (void)
real_tty_path += 5; /* Remove "/dev/". */
- __setutent_r (&utmp_data);
+ __setutent ();
strncpy (line.ut_line, real_tty_path, sizeof line.ut_line);
- if (__getutline_r (&line, &ut, &utmp_data) < 0)
+ if (__getutline_r (&line, &buffer, &ut) < 0)
{
if (errno == ESRCH)
/* The caller expects ENOENT if nothing is found. */
@@ -68,7 +67,7 @@ getlogin (void)
result = name;
}
- __endutent_r (&utmp_data);
+ __endutent ();
return result;
}
diff --git a/sysdeps/unix/getlogin_r.c b/sysdeps/unix/getlogin_r.c
index aa2c0617e6..868fdbee12 100644
--- a/sysdeps/unix/getlogin_r.c
+++ b/sysdeps/unix/getlogin_r.c
@@ -1,21 +1,21 @@
/* Reentrant function to return the current login name. Unix version.
-Copyright (C) 1991, 1992, 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+ Copyright (C) 1991, 1992, 1996 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include <errno.h>
#include <unistd.h>
@@ -38,8 +38,7 @@ getlogin_r (name, name_len)
char tty_pathname[2 + 2 * NAME_MAX];
char *real_tty_path = tty_pathname;
int result = 0;
- struct utmp_data utmp_data;
- struct utmp *ut, line;
+ struct utmp *ut, line, buffer;
{
int err;
@@ -60,9 +59,9 @@ getlogin_r (name, name_len)
real_tty_path += 5; /* Remove "/dev/". */
- setutent_r (&utmp_data);
+ __setutent ();
strncpy (line.ut_line, real_tty_path, sizeof line.ut_line);
- if (getutline_r (&line, &ut, &utmp_data) < 0)
+ if (__getutline_r (&line, &buffer, &ut) < 0)
{
if (errno == ESRCH)
/* The caller expects ENOENT if nothing is found. */
@@ -85,7 +84,7 @@ getlogin_r (name, name_len)
result = 0;
}
}
- endutent_r (&utmp_data);
+ __endutent ();
return result;
}
diff --git a/sysdeps/unix/sysv/linux/Dist b/sysdeps/unix/sysv/linux/Dist
index ce55ab2d25..e1a89711e2 100644
--- a/sysdeps/unix/sysv/linux/Dist
+++ b/sysdeps/unix/sysv/linux/Dist
@@ -20,6 +20,7 @@ sys/mount.h
sys/mtio.h
sys/procfs.h
sys/quota.h
+sys/serial.h
sys/socketcall.h
sys/soundcard.h
sys/sysctl.h
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index fcfb76c08f..69c207a575 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -8,7 +8,8 @@ sysdep_routines += sysctl clone
sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h sys/mtio.h \
sys/module.h sys/io.h sys/klog.h sys/kdaemon.h \
sys/user.h syscall-list.h sys/sysmacros.h sys/procfs.h \
- sys/debugreg.h sys/kd.h sys/soundcard.h sys/vt.h
+ sys/debugreg.h sys/kd.h sys/soundcard.h sys/vt.h \
+ sys/serial.h
# Generate the list of SYS_* macros for the system calls (__NR_* macros).
$(objpfx)syscall-%.h $(objpfx)syscall-%.d: ../sysdeps/unix/sysv/linux/syscall.h
diff --git a/sysdeps/unix/sysv/linux/paths.h b/sysdeps/unix/sysv/linux/paths.h
index 6751c0d4a9..eaa6aa632f 100644
--- a/sysdeps/unix/sysv/linux/paths.h
+++ b/sysdeps/unix/sysv/linux/paths.h
@@ -62,6 +62,7 @@
#define _PATH_TTY "/dev/tty"
#define _PATH_UNIX "/vmlinux"
#define _PATH_UTMP "/var/run/utmp"
+#define _PATH_UTMP_DB "/var/run/utmp.db"
#define _PATH_VI "/usr/bin/vi"
#define _PATH_WTMP "/var/log/wtmp"
diff --git a/sysdeps/unix/sysv/linux/sys/serial.h b/sysdeps/unix/sysv/linux/sys/serial.h
new file mode 100644
index 0000000000..1844ef6032
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sys/serial.h
@@ -0,0 +1,110 @@
+/* Copyright (C) 1996 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#ifndef _SYS_SERIAL_H
+#define _SYS_SERIAL_H 1
+/* Defines for PC AT serial port. */
+
+/* Serial port addresses and IRQs. */
+#define PORT_0 0x03F8
+#define PORT_1 0x02F8
+#define IRQ_0 0x04
+#define IRQ_1 0x03
+
+/* Definitions for INS8250 / 16550 chips. */
+
+/* Defined as offsets from the port address (data port). */
+#define DAT 0 /* Receive/transmit data. */
+#define ICR 1 /* Interrupt control register. */
+#define ISR 2 /* Interrupt status register. */
+#define LCR 3 /* Line control register. */
+#define MCR 4 /* Modem control register. */
+#define LSR 5 /* Line status register. */
+#define MSR 6 /* Modem status register. */
+#define DLL 0 /* Divisor latch (lsb). */
+#define DLH 1 /* Divisor latch (msb). */
+
+
+/* ICR. */
+#define RIEN 0x01 /* Enable receiver interrupt. */
+#define TIEN 0x02 /* Enable transmitter interrupt. */
+#define SIEN 0x04 /* Enable receiver line status interrupt. */
+#define MIEN 0x08 /* Enable modem status interrupt. */
+
+
+/* ISR */
+#define FFTMOUT 0x0c /* Fifo rcvr timeout. */
+#define RSTATUS 0x06 /* Change in receiver line status. */
+#define RxRDY 0x04 /* Receiver data available. */
+#define TxRDY 0x02 /* Transmitter holding register empty. */
+#define MSTATUS 0x00 /* Change in modem status. */
+
+
+/* LCR 3
+ Number of data bits per received/transmitted character. */
+#define RXLEN 0x03
+#define STOP1 0x00
+#define STOP2 0x04
+#define PAREN 0x08
+#define PAREVN 0x10
+#define PARMARK 0x20
+#define SNDBRK 0x40
+#define DLAB 0x80
+
+/* Baud rate definitions. */
+#define ASY9600 12
+
+/* Definitions for character length (data bits) in RXLEN field. */
+#define BITS5 0x00
+#define BITS6 0x01
+#define BITS7 0x02
+#define BITS8 0x03
+
+/* MCR. */
+#define DTR 0x01 /* Bring up DTR. */
+#define RTS 0x02 /* Bring up RTS. */
+#define OUT1 0x04
+#define OUT2 0x08
+#define LOOP 0x10 /* Put chip into loopback state. */
+
+
+/* LSR */
+#define RCA 0x01 /* Receive char available. */
+#define OVRRUN 0x02 /* Receive overrun. */
+#define PARERR 0x04 /* Parity error. */
+#define FRMERR 0x08 /* Framing/CRC error. */
+#define BRKDET 0x10 /* Break detected (null char + frame error). */
+#define XHRE 0x20 /* Transmit holding register empty. */
+#define XSRE 0x40 /* Transmit shift register empty. */
+
+
+/* MSR */
+#define DCTS 0x01 /* CTS has changed state. */
+#define DDSR 0x02 /* DSR has changed state. */
+#define DRI 0x04 /* RI has changed state. */
+#define DDCD 0x08 /* DCD has changed state. */
+#define CTS 0x10 /* State of CTS. */
+#define DSR 0x20 /* State of DSR. */
+#define RI 0x40 /* State of RI. */
+#define DCD 0x80 /* State of DCD. */
+
+
+#define DELTAS(x) ((x) & (DCTS | DDSR | DRI | DDCD))
+#define STATES(x) ((x) (CTS | DSR | RI | DCD))
+
+#endif /* sys/serial.h */
diff --git a/time/Makefile b/time/Makefile
index 772461c778..252b335c9e 100644
--- a/time/Makefile
+++ b/time/Makefile
@@ -125,7 +125,7 @@ $(installed-localtime-file): $(zonedir)/$(localtime) $(objpfx)zic
echo Site timezone NOT reset to Factory.; \
else \
rm -f $@T; \
- $(SHELL) $(top_absdir)/rellns-sh $< $@T; \
+ $(SHELL) $(..)/rellns-sh $< $@T; \
mv -f $@T $@; \
fi
endif
diff --git a/time/africa b/time/africa
index a3a28c95ea..49f39fbfab 100644
--- a/time/africa
+++ b/time/africa
@@ -1,15 +1,23 @@
-# @(#)africa 7.15
+# @(#)africa 7.16
# 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
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert <eggert@twinsun.com> (1996-09-03):
+# From Paul Eggert <eggert@twinsun.com> (1996-11-22):
#
# A good source for time zone historical data outside the U.S. is
# Thomas G. Shanks, The International Atlas (3rd edition),
# San Diego: ACS Publications, Inc. (1991).
-# Except where otherwise noted, it is the source for the data below.
+#
+# Gwillim Law <LAW@encmail.encompass.com> writes that a good source
+# for recent time zone data is the International Air Transport
+# Association's Standard Schedules Information Manual (IATA SSIM),
+# published semiannually. Law sent in several helpful summaries
+# of the IATA's data after 1990.
+#
+# Except where otherwise noted, Shanks is the source for entries through 1990,
+# and IATA SSIM is the source for entries after 1990.
#
# Another source occasionally used is Edward W. Whitman, World Time Differences,
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
@@ -255,12 +263,17 @@ Rule Egypt 1957 1958 - Oct 1 0:00 0 -
Rule Egypt 1958 only - May 1 0:00 1:00 S
Rule Egypt 1959 1981 - May 1 1:00 1:00 S
Rule Egypt 1959 1965 - Sep 30 3:00 0 -
-Rule Egypt 1966 max - Oct 1 3:00 0 -
+Rule Egypt 1966 1990 - Oct 1 3:00 0 -
Rule Egypt 1982 only - Jul 25 1:00 1:00 S
Rule Egypt 1983 only - Jul 12 1:00 1:00 S
Rule Egypt 1984 1988 - May 1 1:00 1:00 S
Rule Egypt 1989 only - May 6 1:00 1:00 S
-Rule Egypt 1990 max - May 1 1:00 1:00 S
+Rule Egypt 1990 only - May 1 1:00 1:00 S
+Rule Egypt 1991 1994 - May 1 0:00 1:00 S
+Rule Egypt 1991 1994 - Oct 1 0:00 0 -
+Rule Egypt 1995 max - Apr lastFri 0:00 1:00 S
+Rule Egypt 1995 max - Sep lastFri 0:00 0 -
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Cairo 2:05:00 - LMT 1900 Oct
2:00 Egypt EE%sT
@@ -390,15 +403,15 @@ Rule Libya 1986 only - Oct 3 0:00 0 -
Rule Libya 1987 1989 - Apr 1 0:00 1:00 S
Rule Libya 1987 1990 - Oct 1 0:00 0 -
Rule Libya 1990 only - May 4 0:00 1:00 S
+Rule Libya 1996 max - Mar 30 2:00s 1:00 S
+Rule Libya 1996 max - Sep 30 2:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Tripoli 0:52:44 - LMT 1920
1:00 Libya CE%sT 1959
2:00 - EET 1982
-# From Paul Eggert <eggert@twinsun.com> (1995-12-19):
-# usno1995 (from OAG) says Libya uses 2:00 all year, as they did before 1982.
-# We don't know when they switched back. We'll guess 1991.
1:00 Libya CE%sT 1991
- 2:00 - EET
+ 2:00 - EET 1996 Mar 30 3:00
+ 1:00 Libya CE%sT
# Madagascar
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -442,7 +455,7 @@ Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou
3:00 - EAT
# Morocco
-# rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Morocco 1939 only - Sep 12 0:00 1:00 S
Rule Morocco 1939 only - Nov 19 0:00 0 -
Rule Morocco 1940 only - Feb 25 0:00 1:00 S
@@ -474,12 +487,15 @@ Zone Africa/Maputo 2:10:20 - LMT 1903 Mar
2:00 - SAT
# Namibia
+# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Namibia 1994 max - Sep Sun>=1 2:00 1:00 S
+Rule Namibia 1995 max - Apr Sun>=1 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8
1:30 - SWAT 1903 Mar # SW Africa Time
2:00 - SAT 1942 Sep 20 2:00
2:00 1:00 SAST 1943 Mar 21 2:00
- 2:00 - SAT
+ 2:00 Namibia SA%sT
# Niger
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -618,10 +634,9 @@ Rule Tunisia 1977 only - Sep 24 0:00s 0 -
Rule Tunisia 1978 only - May 1 0:00s 1:00 S
Rule Tunisia 1978 only - Oct 1 0:00s 0 -
Rule Tunisia 1988 only - Jun 1 0:00s 1:00 S
-Rule Tunisia 1988 max - Sep lastSun 0:00s 0 -
+Rule Tunisia 1988 1990 - Sep lastSun 0:00s 0 -
Rule Tunisia 1989 only - Mar 26 0:00s 1:00 S
Rule Tunisia 1990 only - May 1 0:00s 1:00 S
-Rule Tunisia 1991 max - Mar lastSun 0:00s 1:00 S
# Shanks gives 0:09 for Paris Mean Time; go with Howse's more precise 0:09:21.
# Shanks says the 1911 switch occurred on Mar 9; go with Howse's Mar 11.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
diff --git a/time/antarctica b/time/antarctica
index 0c78eb6826..b4a7d397a3 100644
--- a/time/antarctica
+++ b/time/antarctica
@@ -1,4 +1,4 @@
-# @(#)antarctica 7.4
+# @(#)antarctica 7.5
# From Paul Eggert (1996-09-03):
# To keep things manageable, we list only locations occupied year-round;
@@ -8,6 +8,20 @@
# I made up all time zone abbreviations mentioned here; corrections welcome!
# FORMAT is `___' and GMTOFF is 0 for locations while uninhabited.
+# These rules are stolen from the `southamerica' file.
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule ArgAQ 1964 1966 - Mar 1 0:00 0 -
+Rule ArgAQ 1964 1966 - Oct 15 0:00 1:00 S
+Rule ArgAQ 1967 only - Apr 1 0:00 0 -
+Rule ArgAQ 1967 1968 - Oct Sun<=7 0:00 1:00 S
+Rule ArgAQ 1968 1969 - Apr Sun<=7 0:00 0 -
+Rule ArgAQ 1974 only - Jan 23 0:00 1:00 S
+Rule ArgAQ 1974 only - May 1 0:00 0 -
+Rule ArgAQ 1974 1976 - Oct Sun<=7 0:00 1:00 S
+Rule ArgAQ 1975 1977 - Apr Sun<=7 0:00 0 -
+Rule ChileAQ 1969 max - Oct Sun>=9 0:00 1:00 S
+Rule ChileAQ 1970 max - Mar Sun>=9 0:00 0 -
+
# Argentina - 6 year-round bases
# General Belgrano II
@@ -118,7 +132,21 @@ Rule NZAQ 1990 max - Mar Sun>=15 2:00s 0 S
# USA - year-round bases
#
-# Palmer, Anvers Island
+# Palmer, Anvers Island, since 1965 (moved 2 miles in 1968)
+#
+# From Ethan Dicks <erd@mcmsun5.mcmurdo.gov> (1996-10-06):
+# It keeps the same time as Punta Arenas, Chile, because, just like us
+# and the South Pole, that's the other end of their supply line....
+# I verified with someone who was there that since 1980,
+# Palmer has followed Chile. Prior to that, before the Falklands War,
+# Palmer used to be supplied from Argentina.
+#
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Antarctica/Palmer 0 - ___ 1965
+ -4:00 ArgAQ AR%sT 1969 Oct 5
+ -3:00 ArgAQ AR%sT 1982 May
+ -4:00 ChileAQ CL%sT
+#
#
# McMurdo, Ross Island, since 1956
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
diff --git a/time/asia b/time/asia
index b5220f3915..7afe922bf4 100644
--- a/time/asia
+++ b/time/asia
@@ -1,16 +1,25 @@
-# @(#)asia 7.25
+# @(#)asia 7.26
# 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
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert <eggert@twinsun.com> (1995-07-24):
+# From Paul Eggert <eggert@twinsun.com> (1996-11-22):
#
# A good source for time zone historical data outside the U.S. is
# Thomas G. Shanks, The International Atlas (3rd edition),
# San Diego: ACS Publications, Inc. (1991).
# Except where otherwise noted, it is the source for the data below.
#
+# Gwillim Law <LAW@encmail.encompass.com> writes that a good source
+# for recent time zone data is the International Air Transport
+# Association's Standard Schedules Information Manual (IATA SSIM),
+# published semiannually. Law sent in several helpful summaries
+# of the IATA's data after 1990.
+#
+# Except where otherwise noted, Shanks is the source for entries through 1990,
+# and IATA SSIM is the source for entries after 1990.
+#
# Another source occasionally used is Edward W. Whitman, World Time Differences,
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
# I found in the UCLA library.
@@ -24,7 +33,6 @@
# Corrections are welcome!
# std dst
# LMT Local Mean Time
-# LST Local Star Time (Russian ``mestnoe zvezdnoe vremya'')
# 2:00 EET EEST Eastern European Time
# 2:00 IST IDT Israel
# 3:00 AST ADT Arabia*
@@ -48,12 +56,22 @@
###############################################################################
-# These rules for Russia are stolen from the `europe' file.
+# These rules are stolen from the `europe' file.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule RussiaAsia 1981 1984 - Apr 1 0:00 1:00 S
-Rule RussiaAsia 1981 1983 - Oct 1 0:00 0 -
-Rule RussiaAsia 1984 max - Sep lastSun 2:00s 0 -
-Rule RussiaAsia 1985 max - Mar lastSun 2:00s 1:00 S
+Rule EUAsia 1981 max - Mar lastSun 1:00u 1:00 S
+Rule EUAsia 1996 max - Oct lastSun 1:00u 0 -
+Rule E-EurAsia 1981 max - Mar lastSun 0:00 1:00 S
+Rule E-EurAsia 1979 1995 - Sep lastSun 0:00 0 -
+Rule E-EurAsia 1996 max - Oct lastSun 0:00 0 -
+Rule RussiaAsia 1981 1984 - Apr 1 0:00 1:00 S
+Rule RussiaAsia 1981 1983 - Oct 1 0:00 0 -
+Rule RussiaAsia 1984 1991 - Sep lastSun 2:00s 0 -
+Rule RussiaAsia 1985 1991 - Mar lastSun 2:00s 1:00 S
+Rule RussiaAsia 1992 only - Mar lastSat 23:00 1:00 S
+Rule RussiaAsia 1992 only - Sep lastSat 23:00 0 -
+Rule RussiaAsia 1993 max - Mar lastSun 2:00s 1:00 S
+Rule RussiaAsia 1993 1995 - Sep lastSun 2:00s 0 -
+Rule RussiaAsia 1996 max - Oct lastSun 2:00s 0 -
# Afghanistan
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -85,10 +103,9 @@ Zone Asia/Baku 3:19:24 - LMT 1924 May 2
3:00 - BAKT 1957 Mar # Baku Time
4:00 RussiaAsia BAK%sT 1991 Mar 31 2:00s
3:00 1:00 BAKST 1991 Aug 30 # independence
- 3:00 RussiaAsia AZ%sT 1992 # Azerbaijan Time
- 3:00 - AZT
-# Shanks has Baku using Russian DST rules after 1991,
-# but usno1995 has Azerbaijan with no DST. Guess no DST after 1991.
+ 3:00 RussiaAsia AZ%sT 1992 Sep lastSun 2:00s
+ 4:00 - AZT 1996 # Azerbaijan time
+ 4:00 EUAsia AZ%sT
# Bahrain
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -287,18 +304,20 @@ Zone Asia/Nicosia 2:13:28 - LMT 1921 Nov 14
# an MP who went on a hunger strike for 11 days to force discussion about it!
# We have no details, but we'll guess they didn't move the clocks back in fall.
#
-# From Paul Eggert (1995-11-13):
-# usno1995 has Georgia at 4:00. Guess that Georgia stopped transitions
-# after spring 1994 (thus sticking at 4:00).
-# Most likely we're still missing some rule changes between 1991 and 1994.
+# From Mathew Englander <mathew@io.org>, quoting AP (1996-10-23 13:05-04):
+# Instead of putting back clocks at the end of October, Georgia
+# will stay on daylight savings time this winter to save energy,
+# President Eduard Shevardnadze decreed Wednesday.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tbilisi 2:59:16 - LMT 1880
2:59:16 - TBMT 1924 May 2 # Tbilisi Mean Time
3:00 - TBIT 1957 Mar # Tbilisi Time
4:00 RussiaAsia TBI%sT 1991 Mar 31 2:00s
3:00 1:00 TBIST 1991 Apr 9 # independence
- 3:00 RussiaAsia GE%sT 1994 Sep 25 2:00s # Georgia Time
- 4:00 - GET
+ 3:00 RussiaAsia GE%sT 1992 # Georgia Time
+ 3:00 E-EurAsia GE%sT 1994 Sep lastSun
+ 4:00 E-EurAsia GE%sT 1996 Oct lastSun
+ 5:00 - GET
# India
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -340,6 +359,13 @@ Rule Iran 1978 1980 - Mar 21 0:00 1:00 S
Rule Iran 1978 only - Oct 21 0:00 0 -
Rule Iran 1979 only - Sep 19 0:00 0 -
Rule Iran 1980 only - Sep 23 0:00 0 -
+Rule Iran 1991 only - May 3 0:00s 1:00 S
+Rule Iran 1991 only - Sep 20 0:00s 0 -
+Rule Iran 1992 only - Mar 22 0:00 1:00 S
+Rule Iran 1992 1993 - Sep 23 0:00 0 -
+Rule Iran 1993 max - Mar 21 0:00 1:00 S
+Rule Iran 1994 1995 - Sep 22 0:00 0 -
+Rule Iran 1996 max - Sep 21 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tehran 3:25:44 - LMT 1916
3:25:44 - TMT 1946 # Tehran Mean Time
@@ -353,8 +379,11 @@ Rule Iraq 1982 only - May 1 0:00 1:00 D
Rule Iraq 1982 1984 - Oct 1 0:00 0 S
Rule Iraq 1983 only - Mar 31 0:00 1:00 D
Rule Iraq 1984 1985 - Apr 1 0:00 1:00 D
-Rule Iraq 1985 max - Sep lastSun 1:00s 0 S
-Rule Iraq 1986 max - Mar lastSun 1:00s 1:00 D
+Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 S
+Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 D
+# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the `:01' is a typo.
+Rule Iraq 1991 max - Apr 1 3:00s 1:00 D
+Rule Iraq 1991 max - Oct 1 3:00s 0 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Baghdad 2:57:40 - LMT 1890
2:57:36 - BMT 1918 # Baghdad Mean Time?
@@ -512,9 +541,6 @@ Zone Asia/Ishigaki 8:16:36 - LMT 1896
# Other Japanese possessions are probably like Asia/Tokyo.
# Jordan
-# From Paul Eggert <eggert@twinsun.com> (1993-11-18):
-# Most likely Shanks is merely guessing dates from 1992 on.
-# From Shanks (1991):
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Jordan 1973 only - Jun 6 0:00 1:00 S
Rule Jordan 1973 1975 - Oct 1 0:00 0 -
@@ -529,40 +555,56 @@ Rule Jordan 1986 1988 - Apr Fri>=1 0:00 1:00 S
Rule Jordan 1986 1990 - Oct Fri>=1 0:00 0 -
Rule Jordan 1989 only - May 8 0:00 1:00 S
Rule Jordan 1990 only - Apr 27 0:00 1:00 S
-Rule Jordan 1991 only - Apr 19 0:00 1:00 S
+Rule Jordan 1991 only - Apr 17 0:00 1:00 S
Rule Jordan 1991 only - Sep 27 0:00 0 -
-Rule Jordan 1992 max - Apr Fri>=1 0:00 1:00 S
-Rule Jordan 1992 max - Oct Fri>=1 0:00 0 -
+Rule Jordan 1992 only - Apr 10 0:00 1:00 S
+Rule Jordan 1992 1993 - Oct Fri>=1 0:00 0 -
+Rule Jordan 1993 max - Apr Fri>=1 0:00 1:00 S
+Rule Jordan 1994 only - Sep Fri>=15 0:00 0 -
+Rule Jordan 1995 max - Sep Fri>=15 0:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Amman 2:23:44 - LMT 1931
2:00 Jordan EE%sT
# Kazakhstan
-# From Paul Eggert (1996-04-19):
+# From Paul Eggert (1996-11-22):
# Andrew Evtichov <evti@chevron.com> (1996-04-13) writes that Kazakhstan
-# stayed in sync with Moscow after 1990, and that Aktau is the biggest city
-# in western Kazakhstan. Follow Shanks before 1991, Evtichov afterwards.
+# stayed in sync with Moscow after 1990, and that Aqtobe (formerly Aktyubinsk)
+# and Aqtau (formerly Shevchenko) are the largest cities in their zones.
+# Guess that Aqtau and Aqtobe diverged in 1995, since that's the first time
+# IATA SSIM mentions a third time zone in Kazakhstan.
+#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Alma-Ata 5:07:48 - LMT 1924 May 2 # or Almaty
5:00 - ALMT 1957 Mar # Alma-Ata Time
6:00 RussiaAsia ALM%sT 1991 Mar 31 2:00s
5:00 1:00 ALMST 1991 Sep 29 2:00s
5:00 - ALMT 1992 Jan 19 2:00s
- 6:00 RussiaAsia ALM%sT
-Zone Asia/Aktau 3:21:04 - LMT 1924 May 2 # or Aqtau
+ 6:00 E-EurAsia ALM%sT
+Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2
+ 4:00 - AKT 1957 Mar # Aktyubinsk Time
+ 5:00 RussiaAsia AK%sT 1991 Mar 31 2:00s
+ 4:00 1:00 AKTST 1991 Sep 29 2:00s
+ 4:00 - AQTT 1992 Jan 19 2:00s # Aqtobe Time
+ 5:00 E-EurAsia AQT%sT
+Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2 # or Aktau
4:00 - SHET 1957 Mar # Fort Shevchenko Time
5:00 RussiaAsia SHE%sT 1991 Mar 31 2:00s
- 4:00 1:00 AKTST 1991 Sep 29 2:00s
- 4:00 - AKTT 1992 Jan 19 2:00s # Aktau Time
- 5:00 RussiaAsia AKT%sT
+ 4:00 1:00 AQTST 1991 Sep 29 2:00s
+ 4:00 - AQTT 1992 Jan 19 2:00s # Aqtau Time
+ 5:00 E-EurAsia AQT%sT 1995 Sep lastSun
+ 4:00 E-EurAsia AQT%sT
# Kirgizstan
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Kirgiz 1992 max - Apr Sun>=7 0:00 1:00 S
+Rule Kirgiz 1991 max - Sep lastSun 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2
5:00 - FRUT 1957 Mar # Frunze Time
6:00 RussiaAsia FRU%sT 1991 Mar 31 2:00s
5:00 1:00 FRUST 1991 Aug 31 # independence
- 5:00 RussiaAsia KG%sT # Kirgizstan Time
+ 5:00 Kirgiz KG%sT # Kirgizstan Time
###############################################################################
@@ -630,10 +672,13 @@ Rule Lebanon 1973 1977 - May 1 0:00 1:00 S
Rule Lebanon 1978 only - Apr 30 0:00 1:00 S
Rule Lebanon 1978 only - Sep 30 0:00 0 -
Rule Lebanon 1984 1987 - May 1 0:00 1:00 S
-Rule Lebanon 1984 max - Oct 16 0:00 0 -
+Rule Lebanon 1984 1991 - Oct 16 0:00 0 -
Rule Lebanon 1988 only - Jun 1 0:00 1:00 S
Rule Lebanon 1989 only - May 10 0:00 1:00 S
-Rule Lebanon 1990 max - May 1 0:00 1:00 S
+Rule Lebanon 1990 1992 - May 1 0:00 1:00 S
+Rule Lebanon 1992 only - Oct 4 0:00 0 -
+Rule Lebanon 1993 max - Mar lastSun 0:00 1:00 S
+Rule Lebanon 1993 max - Sep lastSun 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Beirut 2:22:00 - LMT 1880
2:00 Lebanon EE%sT
@@ -673,8 +718,11 @@ Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Mongol 1981 1984 - Apr 1 0:00 1:00 S
Rule Mongol 1981 1984 - Oct 1 0:00 0 -
-Rule Mongol 1985 max - Mar lastSun 2:00 1:00 S
-Rule Mongol 1985 max - Sep lastSun 3:00 0 -
+Rule Mongol 1985 1990 - Mar lastSun 2:00 1:00 S
+Rule Mongol 1985 1990 - Sep lastSun 3:00 0 -
+Rule Mongol 1991 max - Mar lastSun 0:00 1:00 S
+Rule Mongol 1991 1995 - Sep lastSun 0:00 0 -
+Rule Mongol 1996 max - Oct Fri>=22 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
#Zone Asia/Dariv 6:14:32 - LMT 1905 Aug
# 6:00 - DART 1978 # Dariv Time
@@ -712,9 +760,9 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
Rule EgyptAsia 1957 only - May 10 0:00 1:00 S
Rule EgyptAsia 1957 1958 - Oct 1 0:00 0 -
Rule EgyptAsia 1958 only - May 1 0:00 1:00 S
-Rule EgyptAsia 1959 1981 - May 1 1:00 1:00 S
+Rule EgyptAsia 1959 1967 - May 1 1:00 1:00 S
Rule EgyptAsia 1959 1965 - Sep 30 3:00 0 -
-Rule EgyptAsia 1966 max - Oct 1 3:00 0 -
+Rule EgyptAsia 1966 only - Oct 1 3:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Gaza 2:17:52 - LMT 1900 Oct
2:00 - EET 1957 May 10
@@ -806,8 +854,16 @@ Rule Syria 1987 1988 - Oct 31 2:00 0 -
Rule Syria 1988 only - Mar 15 2:00 1:00 S
Rule Syria 1989 only - Mar 31 2:00 1:00 S
Rule Syria 1989 only - Oct 1 2:00 0 -
-Rule Syria 1990 max - Apr 1 2:00 1:00 S
-Rule Syria 1990 max - Sep 30 2:00 0 -
+Rule Syria 1990 only - Apr 1 2:00 1:00 S
+Rule Syria 1990 only - Sep 30 2:00 0 -
+Rule Syria 1991 only - Apr 1 0:00 1:00 S
+Rule Syria 1991 1992 - Oct 1 0:00 0 -
+Rule Syria 1992 only - Apr 8 0:00 1:00 S
+Rule Syria 1993 only - Mar 26 0:00 1:00 S
+Rule Syria 1993 only - Sep 25 0:00 0 -
+# IATA SSIM (1996-09) says 1997-03-31; assume that it should be 1997-04-01.
+Rule Syria 1994 max - Apr 1 0:00 1:00 S
+Rule Syria 1994 max - Oct 1 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Damascus 2:25:12 - LMT 1920
2:00 Syria EE%sT
@@ -820,10 +876,6 @@ Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
5:00 1:00 DUSST 1991 Sep 9 # independence
5:00 RussiaAsia TJ%sT 1992
5:00 - TJT # Tajikistan Time
-# Shanks has Dushanbe at 5:00 (6:00 summer) after 1991,
-# but a cable from the American Embassy at Dushanbe
-# <URL:http://www.itaiep.doc.gov/bisnis/cables/960703ti.html> (1996-07-02)
-# says that Tajikistan is at 5:00. Guess no DST after 1991.
# Thailand
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -836,12 +888,10 @@ Zone Asia/Bangkok 6:42:04 - LMT 1880
Zone Asia/Ashkhabad 3:53:32 - LMT 1924 May 2 # or Ashgabat
4:00 - ASHT 1957 Mar # Ashkhabad Time
5:00 RussiaAsia ASH%sT 1991 Mar 31 2:00s
- 4:00 1:00 ASHST 1991 Oct 27 # independence
- 4:00 RussiaAsia TM%sT 1992 # Turkmenistan Time
- 4:00 - TMT
-# Shanks has Ashkhabad at 4:00 (5:00 summer) after 1991, but
-# DHL <URL:http://www.dhl.com/dhlinfo/country/turkmeni.html> (1996-07-26)
-# reports 4:00. Guess no DST after 1991.
+ 4:00 1:00 ASHST 1991 Sep 29 2:00s
+ 4:00 - ASHT 1991 Oct 27 # independence
+ 4:00 - TMT 1992 Jan 19 2:00s
+ 5:00 - TMT # Turkmenistan Time
# United Arab Emirates
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
diff --git a/time/australasia b/time/australasia
index 27e018bcde..be15771b07 100644
--- a/time/australasia
+++ b/time/australasia
@@ -1,4 +1,4 @@
-# @(#)australasia 7.29
+# @(#)australasia 7.30
# This file also includes Pacific islands.
# Notes are at the end of this file
@@ -35,17 +35,33 @@ Zone Australia/Perth 7:43:24 - LMT 1895 Dec
8:00 1:00 WST 1992 Mar Sun>=1 2:00s
8:00 - WST
# Queensland
+#
+# From Alex Livingston <alex@agsm.unsw.edu.au> (1996-11-01):
+# I have heard or read more than once that some resort islands off the coast
+# of Queensland chose to keep observing daylight-saving time even after
+# Queensland ceased to.
+#
+# From Paul Eggert (1996-11-22):
+# IATA SSIM (1993-02/1994-09) say that the Holiday Islands (Hayman, Lindeman,
+# Hamilton) observed DST for two years after the rest of Queensland stopped.
+# Hamilton is the largest, but there is also a Hamilton in Victoria,
+# so use Lindeman.
+#
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule QL 1989 1991 - Oct lastSun 2:00s 1:00 -
+Rule QL 1990 1992 - Mar Sun>=1 2:00s 0 -
+Rule Holiday 1989 1993 - Oct lastSun 2:00s 1:00 -
+Rule Holiday 1990 1994 - Mar Sun>=1 2:00s 0 -
Zone Australia/Brisbane 10:12:08 - LMT 1895
10:00 - EST 1917 Jan 1 0:01
10:00 Aus EST 1971 Oct lastSun 2:00s
10:00 1:00 EST 1972 Feb lastSun 2:00s
- 10:00 - EST 1989 Oct lastSun 2:00s
- 10:00 1:00 EST 1990 Mar Sun>=1 2:00s
- 10:00 - EST 1990 Oct lastSun 2:00s
- 10:00 1:00 EST 1991 Mar Sun>=1 2:00s
- 10:00 - EST 1991 Oct lastSun 2:00s
- 10:00 1:00 EST 1992 Mar Sun>=1 2:00s
- 10:00 - EST
+ 10:00 QL EST
+Zone Australia/Lindeman 9:55:56 - LMT 1895
+ 10:00 - EST 1917 Jan 1 0:01
+ 10:00 Aus EST 1971 Oct lastSun 2:00s
+ 10:00 1:00 EST 1972 Feb lastSun 2:00s
+ 10:00 Holiday EST
# South Australia
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -289,11 +305,13 @@ Rule NZ 1990 max - Oct Sun>=1 2:00s 1:00 D
Rule NZ 1975 only - Feb 23 2:00s 0 S
Rule NZ 1976 1989 - Mar Sun>=1 2:00s 0 S
Rule NZ 1990 max - Mar Sun>=15 2:00s 0 S
+Rule Chatham 1990 max - Oct Sun>=1 2:45s 1:00 D
+Rule Chatham 1991 max - Mar Sun>=15 2:45s 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Auckland 11:39:04 - LMT 1868
11:30 NZ NZ%sT 1940 Sep 29 2:00
12:00 NZ NZ%sT
-Zone Pacific/Chatham 12:45 NZ CHA%sT
+Zone Pacific/Chatham 12:45 Chatham CHA%sT
# Antipodes Is, Kermadec Is
@@ -375,9 +393,9 @@ Zone Pacific/Funafuti 11:56:52 - LMT 1901
Rule Vanuatu 1983 only - Sep 25 0:00 1:00 S
Rule Vanuatu 1984 1991 - Mar Sun>=23 0:00 0 -
Rule Vanuatu 1984 only - Oct 23 0:00 1:00 S
-Rule Vanuatu 1985 1990 - Sep Sun>=23 0:00 1:00 S
-Rule Vanuatu 1991 max - Sep lastSun 0:00 1:00 S
-Rule Vanuatu 1992 max - Mar lastSun 0:00 0 -
+Rule Vanuatu 1985 1991 - Sep Sun>=23 0:00 1:00 S
+Rule Vanuatu 1992 1993 - Jan Sun>=23 0:00 0 -
+Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
11:00 Vanuatu VU%sT # Vanuatu Time
@@ -400,11 +418,19 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert <eggert@twinsun.com> (1996-01-22);
+# From Paul Eggert <eggert@twinsun.com> (1996-11-22):
# A good source for time zone historical data outside the U.S. is
# Thomas G. Shanks, The International Atlas (3rd edition),
# San Diego: ACS Publications, Inc. (1991).
-# Except where noted, it is the source for the data above.
+#
+# Gwillim Law <LAW@encmail.encompass.com> writes that a good source
+# for recent time zone data is the International Air Transport
+# Association's Standard Schedules Information Manual (IATA SSIM),
+# published semiannually. Law sent in several helpful summaries
+# of the IATA's data after 1990.
+#
+# Except where otherwise noted, Shanks is the source for entries through 1990,
+# and IATA SSIM is the source for entries after 1990.
#
# Another source occasionally used is Edward W. Whitman, World Time Differences,
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
@@ -799,8 +825,11 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# time on both the first Sunday in October and the third Sunday in March.
# As with Australia, we'll assume the tradition is 2:00s, not 2:00.
#
-# Shanks gives no data for Chatham, but usno1995 says it's +12:45/+13:45.
-# Guess NZ switchover rules for now.
+# From Paul Eggert (1996-11-22):
+# Shanks gives no data for Chatham; usno1989 says it's +12:45,
+# usno1995 says it's +12:45/+13:45, and IATA SSIM (1991/1996)
+# gives the NZ rules but with transitions at 2:45 local standard time.
+# Guess that they adopted DST in 1990.
###############################################################################
diff --git a/time/etcetera b/time/etcetera
index 73ad68ee0a..c47fae7a68 100644
--- a/time/etcetera
+++ b/time/etcetera
@@ -1,15 +1,19 @@
-# @(#)etcetera 7.5
+# @(#)etcetera 7.6
-# All of these are set up just so people can "zic -l" to a timezone
-# that's right for their area, even if it doesn't have a name or DST rules
-# (half hour zones are too much to bother with -- when someone asks!)
+# These entries are mostly present for historical reasons, so that
+# people in areas not otherwise covered by the tz files could "zic -l"
+# to a time zone that was right for their area. These days, the
+# tz files cover almost all the inhabited world, so there's little
+# need now for the entries that are not on UTC.
Zone Etc/GMT 0 - GMT
-Link Etc/GMT Etc/UTC
-Link Etc/GMT Etc/UCT
-Link Etc/GMT Etc/Universal
+Zone Etc/UTC 0 - UTC
+Zone Etc/UCT 0 - UCT
+
+Link Etc/UTC Etc/Universal
+Link Etc/UTC Etc/Zulu
+
Link Etc/GMT Etc/Greenwich
-Link Etc/GMT Etc/Zulu
Link Etc/GMT Etc/GMT-0
Link Etc/GMT Etc/GMT+0
Link Etc/GMT Etc/GMT0
diff --git a/time/europe b/time/europe
index abeba98386..6eb92b769d 100644
--- a/time/europe
+++ b/time/europe
@@ -1,14 +1,22 @@
-# @(#)europe 7.40
+# @(#)europe 7.41
# 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
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert <eggert@twinsun.com> (1996-09-03):
+# From Paul Eggert <eggert@twinsun.com> (1996-11-22):
# A good source for time zone historical data outside the U.S. is
# Thomas G. Shanks, The International Atlas (3rd edition),
# San Diego: ACS Publications, Inc. (1991).
-# Except where otherwise noted, it is the source for the data below.
+#
+# Gwillim Law <LAW@encmail.encompass.com> writes that a good source
+# for recent time zone data is the International Air Transport
+# Association's Standard Schedules Information Manual (IATA SSIM),
+# published semiannually. Law sent in several helpful summaries
+# of the IATA's data after 1990.
+#
+# Except where otherwise noted, Shanks is the source for entries through 1990,
+# and IATA SSIM is the source for entries after 1990.
#
# Another source occasionally used is Edward W. Whitman, World Time Differences,
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
@@ -27,6 +35,7 @@
# 0:00 WET WEST Western Europe
# 1:00 CET CEST Central Europe
# 2:00 EET EEST Eastern Europe
+# 3:00 MSK MSD Moscow
#
# See the `africa' file for time zone naming and abbreviation conventions.
#
@@ -826,6 +835,14 @@ Rule C-Eur 1979 1995 - Sep lastSun 2:00s 0 -
Rule C-Eur 1981 max - Mar lastSun 2:00s 1:00 S
Rule C-Eur 1996 max - Oct lastSun 2:00s 0 -
+# E-Eur differs from EU only in that E-Eur switches at midnight local time.
+Rule E-Eur 1977 1980 - Apr Sun>=1 0:00 1:00 S
+Rule E-Eur 1977 only - Sep lastSun 0:00 0 -
+Rule E-Eur 1978 only - Oct 1 0:00 0 -
+Rule E-Eur 1979 1995 - Sep lastSun 0:00 0 -
+Rule E-Eur 1981 max - Mar lastSun 0:00 1:00 S
+Rule E-Eur 1996 max - Oct lastSun 0:00 0 -
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Russia 1917 only - Jul 1 23:00 1:00 MST # Moscow Summer Time
Rule Russia 1917 only - Dec 28 0:00 0 MMT # Moscow Mean Time
@@ -836,15 +853,20 @@ Rule Russia 1919 only - Jul 1 2:00 1:00 S
Rule Russia 1919 only - Aug 16 0:00 0 -
Rule Russia 1921 only - Feb 14 23:00 1:00 S
# Shanks gives 1921 Mar 21 for the following transition.
-# From Andrew A. Chernov <ache@astral.msk.su> (1993-11-12):
+# From Andrey A. Chernov <ache@astral.msk.su> (1993-11-12):
# My sources says, that it is Mar 20, not 21.
Rule Russia 1921 only - Mar 20 23:00 2:00 DS
Rule Russia 1921 only - Sep 1 0:00 1:00 S
Rule Russia 1921 only - Oct 1 0:00 0 -
Rule Russia 1981 1984 - Apr 1 0:00 1:00 S
Rule Russia 1981 1983 - Oct 1 0:00 0 -
-Rule Russia 1984 max - Sep lastSun 2:00s 0 -
-Rule Russia 1985 max - Mar lastSun 2:00s 1:00 S
+Rule Russia 1984 1991 - Sep lastSun 2:00s 0 -
+Rule Russia 1985 1991 - Mar lastSun 2:00s 1:00 S
+Rule Russia 1992 only - Mar lastSat 23:00 1:00 S
+Rule Russia 1992 only - Sep lastSat 23:00 0 -
+Rule Russia 1993 max - Mar lastSun 2:00s 1:00 S
+Rule Russia 1993 1995 - Sep lastSun 2:00s 0 -
+Rule Russia 1996 max - Oct lastSun 2:00s 0 -
# These are for backward compatibility with older versions.
@@ -913,7 +935,8 @@ Rule Albania 1984 only - Oct 1 0:00 0 -
Zone Europe/Tirane 1:19:20 - LMT 1914
1:00 - CET 1940 Jun 16
1:00 Albania CE%sT 1985 Mar 31 1:00
- 1:00 W-Eur CE%sT
+ 1:00 W-Eur CE%sT 1991
+ 1:00 EU CE%sT
# Andorra
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -944,11 +967,13 @@ Zone Europe/Vienna 1:05:20 - LMT 1893 Apr
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Minsk 1:50:16 - LMT 1880
2:30:20 Russia %s 1919 Jul 1 2:00
- 3:00 Russia MOS%sT 1922 Oct # Moscow Time
+ 3:00 Russia MSK/MSD 1922 Oct
2:00 - EET 1930 Jun 21
- 3:00 Russia MOS%sT 1991 Mar 31 2:00s
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
2:00 1:00 EEST 1991 Sep 29 2:00s
- 2:00 C-Eur EE%sT
+ 2:00 - EET 1992 Mar 29 0:00
+ 2:00 1:00 EEST 1992 Sep 27 0:00
+ 2:00 Russia EE%sT
# Belgium
# Whitman and Shanks disagree; go with Shanks, usually.
@@ -1021,7 +1046,8 @@ Zone Europe/Sofia 1:33:16 - LMT 1880
1:00 C-Eur CE%sT 1945 Apr 2 3:00
2:00 - EET 1979 Mar 31 23:00
2:00 Bulg EE%sT 1982 Sep 26 2:00
- 2:00 C-Eur EE%sT
+ 2:00 C-Eur EE%sT 1991
+ 2:00 E-Eur EE%sT
# Croatia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1077,30 +1103,54 @@ Zone Europe/Copenhagen 0:50:20 - LMT 1890
Zone Atlantic/Faeroe -0:27:04 - LMT 1908 Jan 11 # Torshavn
0:00 - WET 1981
0:00 EU WE%sT
-Zone America/Scoresbysund -1:29:00 - LMT 1916 Jul 28
+#
+# From Paul Eggert (1996-11-22):
+# Greenland joined the EU as part of Denmark, obtained home rule on 1979-05-01,
+# and left the EU on 1985-02-01. It therefore should have been using EU
+# rules at least through 1984. Shanks says Scoresbysund and Godthab
+# used C-Eur rules after 1980, but IATA SSIM (1991/1996) says they use EU
+# rules since at least 1991. Assume EU rules since 1980.
+
+#
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Thule 1993 max - Apr Sun>=1 2:00 1:00 D
+Rule Thule 1993 max - Oct lastSun 2:00 0 S
+#
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Scoresbysund -1:29:00 - LMT 1916 Jul 28 # Ittoqqortoormit
-2:00 - CGT 1980 Apr 6 2:00
-2:00 C-Eur CG%sT 1981 Mar 29
- -1:00 C-Eur EG%sT
-Zone America/Godthab -3:26:56 - LMT 1916 Jul 28
+ -1:00 EU EG%sT
+Zone America/Godthab -3:26:56 - LMT 1916 Jul 28 # Nuuk
-3:00 - WGT 1980 Apr 6 2:00
- -3:00 C-Eur WG%sT
-Zone America/Thule -4:35:08 - LMT 1916 Jul 28
- -4:00 - AST
+ -3:00 EU WG%sT
+Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik
+ -4:00 Thule A%sT
# Estonia
# From Peter Ilieve <peter@memex.co.uk> (1994-10-15):
# A relative in Tallinn confirms the accuracy of the data for 1989 onwards
# [through 1994] and gives the legal authority for it,
# a regulation of the Government of Estonia, No. 111 of 1989....
+#
+# From Peter Ilieve <peter@aldie.co.uk> (1996-10-28):
+# [IATA SSIM (1992/1996) claims that the Baltic republics switch at 01:00s,
+# but a relative confirms that Estonia still switches at 02:00s, writing:]
+# ``I do not [know] exactly but there are some little different
+# (confusing) rules for International Air and Railway Transport Schedules
+# conversion in Sunday connected with end of summer time in Estonia....
+# A discussion is running about the summer time efficiency and effect on
+# human physiology. It seems that Estonia maybe will not change to
+# summer time next spring.''
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Tallinn 1:39:00 - LMT 1880
1:39:00 - TMT 1918 Feb # Tallinn Mean Time
1:00 C-Eur CE%sT 1919 Jul
1:39:00 - TMT 1921 May
2:00 - EET 1940 Aug 6
- 3:00 - MOST 1941 Sep 15 # Moscow Time
+ 3:00 - MSK 1941 Sep 15
1:00 C-Eur CE%sT 1944 Sep 22
- 3:00 Russia MOS%sT 1989 Mar 26 2:00s
+ 3:00 Russia MSK/MSD 1989 Mar 26 2:00s
2:00 1:00 EEST 1989 Sep 24 2:00s
2:00 C-Eur EE%sT
@@ -1418,6 +1468,14 @@ Link Europe/Rome Europe/Vatican
Link Europe/Rome Europe/San_Marino
# Latvia
+# From Paul Eggert (1996-11-22):
+# Rules after 1991 are by extension from Shanks. They contradict
+# IATA SSIM (1992/1996), which claims Latvia uses W-Eur rules, but
+# Peter Ilieve's relative writes that Latvia switched in September this year,
+# so we'll assume that the old C-Eur-style rules still apply.
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Latvia 1992 max - Mar lastSun 2:00s 1:00 S
+Rule Latvia 1992 max - Sep lastSun 2:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Riga 1:36:24 - LMT 1880
1:36:24 - RMT 1918 Apr 15 2:00 #Riga Mean Time
@@ -1426,11 +1484,11 @@ Zone Europe/Riga 1:36:24 - LMT 1880
1:36:24 1:00 LST 1919 May 22 3:00
1:36:24 - RMT 1926 May 11
2:00 - EET 1940 Aug 5
- 3:00 - MOST 1941 Jul # Moscow Time
+ 3:00 - MSK 1941 Jul
1:00 C-Eur CE%sT 1944 Aug 8
- 3:00 Russia MOS%sT 1991 Mar 31 2:00s
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
2:00 1:00 EEST 1991 Sep 29 2:00s
- 2:00 C-Eur EE%sT
+ 2:00 Latvia EE%sT
# Liechtenstein
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1446,11 +1504,14 @@ Zone Europe/Vilnius 1:41:16 - LMT 1880
1:00 - CET 1920 Jul 12
2:00 - EET 1920 Oct 9
1:00 - CET 1940 Aug 3
- 3:00 - MOST 1941 Jun 24 # Moscow Time
+ 3:00 - MSK 1941 Jun 24
1:00 C-Eur CE%sT 1944 Aug
- 3:00 Russia MOS%sT 1991 Mar 31 2:00s
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
2:00 1:00 EEST 1991 Sep 29 2:00s
2:00 C-Eur EE%sT
+# From Paul Eggert (1996-11-22):
+# IATA SSIM (1992/1996) says Lithuania uses W-Eur rules, but since it is
+# known to be wrong about Estonia and Latvia, assume it's wrong here too.
# Luxembourg
# Whitman disagrees with most of these dates in minor ways; go with Shanks.
@@ -1517,9 +1578,9 @@ Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 # Valletta
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Chisinau 1:55:20 - LMT 1924 May 2
2:00 - EET 1930 Jun 21
- 3:00 Russia MOS%sT 1991 Mar 31 2:00s # Moscow Time
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
2:00 1:00 EEST 1991 Sep 29 2:00s
- 2:00 C-Eur EE%sT
+ 2:00 E-Eur EE%sT
# Monaco
# Shanks gives 0:09 for Paris Mean Time; go with Howse's more precise 0:09:21.
@@ -1631,9 +1692,30 @@ Zone Europe/Warsaw 1:24:00 - LMT 1880
1:00 C-Eur CE%sT 1944 Oct
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.
+# Stick with W-Eur for now.
# Portugal
# Gregorian calendar adopted 1582-10-15.
+#
+# From Rui Pedro Salgueiro <rps@inescca.inescc.pt> (1992-11-12):
+# Portugal has recently (September, 27) changed timezone
+# (from WET to MET or CET) to harmonize with EEC.
+#
+# Martin Bruckmann <martin@ua.pt> (1996-02-29) reports via Peter Ilieve
+# that Portugal is reverting to 0:00 by not moving its clocks this spring.
+# The new Prime Minister was fed up with getting up in the dark in the winter.
+#
+# From Paul Eggert (1996-11-12):
+# IATA SSIM (1991-09) reports several 1991-09 and 1992-09 transitions
+# at 02:00u, not 01:00u. Assume that these are typos.
+# IATA SSIM (1991/1992) reports that the Azores were at -1:00.
+# IATA SSIM (1993-02) says +0:00; later issues (through 1996-09) say -1:00.
+# Guess that the Azores changed to EU rules in 1992 (since that's when Portugal
+# harmonized with the EU), and that they stayed +0:00 that winter.
+#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Port 1916 only - Jun 17 23:00 1:00 S
# Whitman gives 1916 Oct 31; go with Shanks.
@@ -1701,23 +1783,16 @@ Zone Europe/Lisbon -0:36:32 - LMT 1884
0:00 Port WE%sT 1966 Apr 3 2:00
1:00 - CET 1976 Sep 26 1:00
0:00 Port WE%sT 1983 Sep 25 1:00s
-# From Rui Pedro Salgueiro <rps@inescca.inescc.pt> (1992-11-12):
-# Portugal has recently (September, 27) changed timezone
-# (from WET to MET or CET) to harmonize with EEC.
- 0:00 EU WE%sT 1992 Sep 27 1:00s
-# Martin Bruckmann <martin@ua.pt> (1996-02-29) reports via Peter Ilieve
-# that Portugal is reverting to 0:00 by not moving its clocks this spring.
-# The new Prime Minister was fed up with getting up in the dark in the winter.
+ 0:00 W-Eur WE%sT 1992 Sep 27 1:00s
1:00 EU CE%sT 1996 Mar 31 1:00u
0:00 EU WE%sT
-# We don't know what happened to Madeira or the Azores,
-# so we'll just use Shanks for now.
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada
-1:55 - HMT 1911 May 24 # Horta Mean Time
-2:00 Port AZO%sT 1966 Apr 3 2:00 # Azores Time
-1:00 Port AZO%sT 1983 Sep 25 1:00s
- -1:00 W-Eur AZO%sT
+ -1:00 W-Eur AZO%sT 1992 Sep 27 1:00s
+ 0:00 EU WE%sT 1993 Mar 28 1:00u
+ -1:00 EU AZO%sT
Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal
-1:08 - FMT 1911 May 24 # Funchal Mean Time
-1:00 Port MAD%sT 1966 Apr 3 2:00 # Madeira Time
@@ -1733,38 +1808,62 @@ Rule Romania 1979 only - May 27 0:00 1:00 S
Rule Romania 1979 only - Sep lastSun 0:00 0 -
Rule Romania 1980 only - Apr 5 23:00 1:00 S
Rule Romania 1980 only - Sep lastSun 1:00 0 -
+Rule Romania 1991 1993 - Mar lastSun 0:00s 1:00 S
+Rule Romania 1991 1993 - Sep lastSun 0:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct
1:44:24 - BMT 1931 Jul 24 # Bucharest MT
2:00 Romania EE%sT 1981 Mar 29 2:00s
- 2:00 C-Eur EE%sT
+ 2:00 C-Eur EE%sT 1991
+ 2:00 Romania EE%sT 1994
+ 2:00 E-Eur EE%sT
# Russia
# From Shanks (1991):
# In 1929 the Soviet Union instituted a 5 day week; in 1932 it instituted
# a 6 day week; on 1940-06-27 it returned to the Gregorian week.
#
-# From Paul Eggert <eggert@twinsun.com> (1996-09-03):
-# Moscow rules after 1991 are from Andrew A. Chernov <ache@astral.msk.su>.
-# I invented the time zone names, and (unless otherwise specified)
-# guessed what happened after 1991; the clocks were chaotic, and we know little.
-# The rest is from Shanks.
+# From Paul Eggert <eggert@twinsun.com> (1996-11-22):
+# Except for Moscow after 1919-07-01, I invented the time zone abbreviations,
+# and (unless otherwise specified) guessed what happened after 1991.
+# Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991,
+# are from Andrey A. Chernov. The rest is from Shanks and the IATA.
+#
+# From Andrey A. Chernov <ache@nagual.ru> (1996-10-04):
+# `MSK' and `MSD' were born and used initially on Moscow computers with
+# Unix-like OSes by several developer groups (e.g. Demos group, Kiae group)....
+# The next step was the UUCP network, the Relcom predecessor
+# (used mainly for mail), and MSK/MSD was actively used there.
+#
+# From Chris Carrier <72157.3334@CompuServe.COM> (1996-10-30):
+# According to a friend of mine who rode the Trans-Siberian Railroad from
+# Moscow to Irkutsk in 1995, public air and rail transport in Russia ...
+# still follows Moscow time, no matter where in Russia it is located.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr
+ 1:00 C-Eur CE%sT 1945
+ 2:00 Poland CET 1946
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
+ 2:00 1:00 EEST 1991 Sep 29 2:00s
+ 2:00 - EET 1992 Jan 19 2:00s
+ 3:00 Russia MSK/MSD 1994
+# IATA SSIM (1994-02) says Kaliningrad is at UTC+2; guess 1994 change.
+ 2:00 Russia EE%sT
Zone Europe/Moscow 2:30:20 - LMT 1880
2:30:20 Russia %s 1919 Jul 1 2:00
- 3:00 Russia MOS%sT 1922 Oct # Moscow TIme
+ 3:00 Russia MSK/MSD 1922 Oct
2:00 - EET 1930 Jun 21
- 3:00 Russia MOS%sT 1991 Mar 31 2:00s
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
2:00 1:00 EEST 1991 Sep 29 2:00s
2:00 - EET 1992 Jan 19 2:00s
- 3:00 Russia MOS%sT
-Zone Europe/Kuybyshev 3:20:36 - LMT 1924 May 2
+ 3:00 Russia MSK/MSD
+Zone Europe/Samara 3:20:36 - LMT 1924 May 2
3:00 - KUYT 1957 Mar # Kuybyshev Time
4:00 Russia KUY%sT 1991 Mar 31 2:00s
3:00 1:00 KUYST 1991 Sep 29 2:00s
- 3:00 - KUYT 1992 Jan 19 2:00s
- 4:00 Russia KUY%sT
+ 3:00 - SAMT 1992 Jan 19 2:00s # Samara Time
+ 4:00 Russia SAM%sT
Zone Asia/Yekaterinburg 4:02:34 - LMT 1924 May 2
4:00 - SVET 1957 Mar # Sverdlovsk Time
5:00 Russia SVE%sT 1991 Mar 31 2:00s
@@ -1916,6 +2015,8 @@ Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
0:00 - WET 1980 Apr 6 0:00s
0:00 1:00 WEST 1980 Sep 28 0:00s
0:00 EU WE%sT
+# IATA SSIM (1996-09) says the Canaries switch at 2:00u, not 1:00u.
+# Ignore this for now, as the Canaries are part of the EU.
# Sweden
@@ -2026,7 +2127,8 @@ Zone Europe/Istanbul 1:55:52 - LMT 1880
2:00 Turkey EE%sT 1978 Oct 15
3:00 Turkey TR%sT 1985 Apr 20 # Turkey Time
2:00 Turkey EE%sT 1986
- 2:00 C-Eur EE%sT
+ 2:00 C-Eur EE%sT 1991
+ 2:00 EU EE%sT
Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
# Ukraine
@@ -2053,23 +2155,28 @@ Rule Crimea 1921 only - Feb 14 23:00 1:00 CST
Rule Crimea 1921 only - Mar 21 23:00 2:00 CDST
Rule Crimea 1921 only - Sep 1 0:00 1:00 CST
Rule Crimea 1921 only - Oct 1 0:00 0 NMT
+Rule Crimea 1996 max - Mar lastSun 0:00u 1:00 -
+Rule Crimea 1996 max - Oct lastSun 0:00u 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Kiev 2:02:04 - LMT 1880
2:02:04 Ukraine %s 1924 May 2
2:00 - EET 1930 Jun 21
- 3:00 Russia MOS%sT 1990 Jul 17 # Moscow Time
- 2:00 C-Eur EE%sT
+ 3:00 Russia MSK/MSD 1990 Jul 17
+ 2:00 E-Eur EE%sT 1996
+ 2:00 EU EE%sT
Zone Europe/Simferopol 2:16:24 - LMT 1880
2:08:00 Crimea %s 1924 May 2
2:00 - EET 1930 Jun 21
- 3:00 Russia MOS%sT 1991 Mar 31 2:00s
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
2:00 1:00 EEST 1991 Sep 29 2:00s
-# From Paul Eggert <eggert@twinsun.com> (1994-05-28):
-# Today's _Economist_ (p 45) reports that Crimea switched
-# from Kiev to Moscow time sometime after the January elections.
-# For now, we'll guess that there was a 2-hour leap forward on March 27.
- 2:00 C-Eur EE%sT 1994 Mar 27 2:00s
- 3:00 Russia MOS%sT
+# From Paul Eggert <eggert@twinsun.com> (1996-10-21):
+# The _Economist_ (1994-05-28, p 45) reports that most of Crimea switched
+# from Kiev to Moscow time sometime after the January 1994 elections.
+# For now, guess it changed Feb 1.
+ 2:00 C-Eur EE%sT 1994 Feb
+# From IATA SSIM (1994/1996), which also says that Kerch is still like Kiev.
+ 3:00 E-Eur MSK/MSD 1996
+ 3:00 Crimea MSK/MSD
# Yugoslavia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
diff --git a/time/northamerica b/time/northamerica
index 5c0c02cc93..af81c5edb9 100644
--- a/time/northamerica
+++ b/time/northamerica
@@ -1,4 +1,4 @@
-# @(#)northamerica 7.28
+# @(#)northamerica 7.29
# also includes Central America and the Caribbean
# This data is by no means authoritative; if you think you know better,
@@ -462,11 +462,19 @@ Link Pacific/Honolulu HST
################################################################################
-# From Paul Eggert <eggert@twinsun.com> (1993-11-18):
+# From Paul Eggert <eggert@twinsun.com> (1996-11-22):
# A good source for time zone historical data outside the US is
# Thomas G. Shanks, The International Atlas (3rd edition),
# San Diego: ACS Publications, Inc. (1991).
-# Except where otherwise noted, it is the source for the data below.
+#
+# Gwillim Law <LAW@encmail.encompass.com> writes that a good source
+# for recent time zone data is the International Air Transport
+# Association's Standard Schedules Information Manual (IATA SSIM),
+# published semiannually. Law sent in several helpful summaries
+# of the IATA's data after 1990.
+#
+# Except where otherwise noted, Shanks is the source for entries through 1990,
+# and IATA SSIM is the source for entries after 1990.
#
# Another source occasionally used is Edward W. Whitman, World Time Differences,
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
@@ -523,7 +531,7 @@ Rule Canada 1974 max - Oct lastSun 2:00 0 S
Rule Canada 1987 max - Apr Sun>=1 2:00 1:00 D
-# Newfoundland
+# Newfoundland (except Labrador)
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule StJohns 1917 1918 - Apr Sun>=8 2:00 1:00 D
@@ -560,11 +568,23 @@ Rule StJohns 1989 max - Apr Sun>=1 2:00 1:00 D
# St John's has an apostrophe, but Posix file names can't have apostrophes.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/St_Johns -3:30:52 - LMT 1884
- -3:31 StJohns N%sT 1935 Mar 30
+ -3:30:52 StJohns N%sT 1935 Mar 30
-3:30 StJohns N%sT
-# Labrador, New Brunswick, Nova Scotia, Prince Edward I
+# east Labrador
+
+# The name `Happy Valley-Goose Bay' is too long; use `Goose Bay'.
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Goose_Bay -4:01:40 - LMT 1884 # Happy Valley-Goose Bay
+ -3:30:52 StJohns NST 1919
+ -3:30:52 - NST 1935 Mar 30
+ -3:30 - NST 1936
+ -3:30 StJohns N%sT 1966 Mar 15 2:00
+ -4:00 StJohns A%sT
+
+
+# west Labrador, New Brunswick, Nova Scotia, Prince Edward I
# From Paul Eggert (1996-06-12):
# Shanks writes that since 1970 most of this region has been like Halifax.
@@ -825,9 +845,17 @@ Zone America/Dawson_Creek -8:00:56 - LMT 1884
# Northwest Territories, Yukon
-# From Paul Eggert (1996-06-12):
+# From Paul Eggert (1996-10-07):
# Dawson switched to PST in 1973. Inuvik switched to MST in 1979.
# Shanks's table for Watson Lake is corrupted, so we have no data there.
+# Mathew Englander <mathew@io.org> (1996-10-07) gives the following refs:
+# * 1967. Paragraph 28(34)(g) of the Interpretation Act, S.C. 1967-68,
+# c. 7 defines Yukon standard time as UTC-9. This is still valid;
+# see Interpretation Act, R.S.C. 1985, c. I-21, s. 35(1).
+# * C.O. 1973/214 switched Yukon to PST on 1973-10-28 00:00.
+# * O.I.C. 1980/02 established DST.
+# * O.I.C. 1987/056 changed DST to Apr firstSun 2:00 to Oct lastSun 2:00.
+# Shanks says Yukon's 1973-10-28 switch was at 2:00; go with Englander.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule NT_YK 1918 only - Apr 14 2:00 1:00 D
@@ -857,7 +885,7 @@ Zone America/Whitehorse -9:00:12 - LMT 1900 Aug 20
-9:00 NT_YK Y%sT 1966 Jul 1 2:00
-8:00 NT_YK P%sT
Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
- -9:00 NT_YK Y%sT 1973 Oct lastSun 2:00
+ -9:00 NT_YK Y%sT 1973 Oct 28 0:00
-8:00 NT_YK P%sT
@@ -1070,8 +1098,10 @@ Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule CR 1979 1980 - Feb lastSun 0:00 1:00 D
Rule CR 1979 1980 - Jun Sun>=1 0:00 0 S
-Rule CR 1991 only - Jan 19 0:00 1:00 D
-Rule CR 1991 only - Jul 1 0:00 0 S
+Rule CR 1991 1992 - Jan Sat>=15 0:00 1:00 D
+# IATA SSIM (1991-09) says the following was at 1:00; go with Shanks.
+Rule CR 1991 only - Jul 1 0:00 0 S
+Rule CR 1992 only - Mar 15 0:00 0 S
# There are too many San Joses elsewhere, so we'll use `Costa Rica'.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Costa_Rica -5:36:20 - LMT 1890 # San Jose
@@ -1114,10 +1144,11 @@ Rule Cuba 1978 only - May 7 0:00 1:00 D
Rule Cuba 1978 1980 - Oct Sun>=8 0:00 0 S
Rule Cuba 1979 1980 - Mar Sun>=15 0:00 1:00 D
Rule Cuba 1981 1985 - May Sun>=5 0:00 1:00 D
-Rule Cuba 1981 max - Oct Sun>=8 0:00 0 S
+Rule Cuba 1981 1990 - Oct Sun>=8 0:00 0 S
Rule Cuba 1986 1989 - Mar Sun>=14 0:00 1:00 D
-Rule Cuba 1990 only - Apr 1 0:00 1:00 D
-Rule Cuba 1991 max - Mar Sun>=14 0:00 1:00 D
+Rule Cuba 1990 max - Apr Sun>=1 0:00 1:00 D
+Rule Cuba 1991 1995 - Oct Sun>=8 0:00s 0 S
+Rule Cuba 1996 max - Oct Sun>=1 0:00s 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Havana -5:29:28 - LMT 1890
@@ -1168,6 +1199,8 @@ Rule Guat 1973 only - Nov 25 0:00 1:00 D
Rule Guat 1974 only - Feb 24 0:00 0 S
Rule Guat 1983 only - May 21 0:00 1:00 D
Rule Guat 1983 only - Sep 22 0:00 0 S
+Rule Guat 1991 only - Mar 23 0:00 1:00 D
+Rule Guat 1991 only - Sep 7 0:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Guatemala -6:02:04 - LMT 1918 Oct 5
-6:00 Guat C%sT
@@ -1177,8 +1210,9 @@ Zone America/Guatemala -6:02:04 - LMT 1918 Oct 5
Rule Haiti 1983 only - May 8 0:00 1:00 D
Rule Haiti 1984 1987 - Apr lastSun 0:00 1:00 D
Rule Haiti 1983 1987 - Oct lastSun 0:00 0 S
-Rule Haiti 1988 max - Apr Sun>=1 2:00 1:00 D
-Rule Haiti 1988 max - Oct lastSun 2:00 0 S
+# Shanks says AT is 2:00, but IATA SSIM (1991/1996) says 1:00s. Go with IATA.
+Rule Haiti 1988 max - Apr Sun>=1 1:00s 1:00 D
+Rule Haiti 1988 max - Oct lastSun 1:00s 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Port-au-Prince -4:49:20 - LMT 1890
-4:49 - PPMT 1917 Jan 24 12:00 # P-a-P MT
@@ -1203,7 +1237,8 @@ Zone America/Tegucigalpa -5:48:52 - LMT 1921 Apr
Zone America/Jamaica -5:07:12 - LMT 1890 # Kingston
-5:07 - KMT 1912 Feb # Kingston Mean Time
-5:00 - EST 1974 Jan 6 2:00
- -5:00 US E%sT
+ -5:00 US E%sT 1984
+ -5:00 - EST
# Martinique
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1222,12 +1257,15 @@ Zone America/Montserrat -4:08:52 - LMT 1911 Jul 1 0:01 # Plymouth
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Nic 1979 1980 - Mar Sun>=16 0:00 1:00 D
Rule Nic 1979 1980 - Jun Mon>=23 0:00 0 S
+Rule Nic 1992 only - Jan 1 4:00 1:00 D
+Rule Nic 1992 only - Sep 24 0:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Managua -5:45:08 - LMT 1890
-5:45 - MMT 1934 Jun 23 # Managua Mean Time
-6:00 - CST 1973 May
-5:00 - EST 1975 Feb 16
- -6:00 Nic C%sT
+ -6:00 Nic C%sT 1993 Jan 1 4:00
+ -5:00 - EST
# Panama
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1268,11 +1306,17 @@ Zone America/St_Vincent -4:04:56 - LMT 1890 # Kingstown
-4:00 - AST
# Turks and Caicos
+# From Paul Eggert (1996-11-22):
+# Shanks says they use US DST rules, but IATA SSIM (1991/1996)
+# says they switch at midnight. Go with IATA SSIM.
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule TC 1979 1986 - Apr lastSun 0:00 1:00 D
+Rule TC 1979 max - Oct lastSun 0:00 0 S
+Rule TC 1987 max - Apr Sun>=1 0:00 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Grand_Turk -4:44:32 - LMT 1890
-5:07 - KMT 1912 Feb # Kingston Mean Time
- -5:00 - EST 1979 Apr 29 2:00
- -5:00 US E%sT
+ -5:00 TC E%sT
# British Virgin Is
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
diff --git a/time/southamerica b/time/southamerica
index cd8c84ec6f..1fdde5ebe5 100644
--- a/time/southamerica
+++ b/time/southamerica
@@ -1,14 +1,22 @@
-# @(#)southamerica 7.14
+# @(#)southamerica 7.15
# 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
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert <eggert@twinsun.com> (1996-09-03):
+# From Paul Eggert <eggert@twinsun.com> (1996-11-22):
# A good source for time zone historical data outside the U.S. is
# Thomas G. Shanks, The International Atlas (3rd edition),
# San Diego: ACS Publications, Inc. (1991).
-# Except where otherwise noted, it is the source for the data below.
+#
+# Gwillim Law <LAW@encmail.encompass.com> writes that a good source
+# for recent time zone data is the International Air Transport
+# Association's Standard Schedules Information Manual (IATA SSIM),
+# published semiannually. Law sent in several helpful summaries
+# of the IATA's data after 1990.
+#
+# Except where otherwise noted, Shanks is the source for entries through 1990,
+# and IATA SSIM is the source for entries after 1990.
#
# The following abbreviations are used in this file.
# Corrections are welcome!
@@ -103,11 +111,64 @@ Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 S
# to the time zones (for daylight saving) are now made.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+#
+# Buenos Aires (BA), Distrito Federal (DF), Santa Cruz (SC),
+# Tierra del Fuego (TF) & Antartida e Islas
Zone America/Buenos_Aires -3:53:48 - LMT 1894 Nov
-4:16:44 - CMT 1920 May # Cordoba Mean Time
-4:00 - ART 1930 Dec
-4:00 Arg AR%sT 1969 Oct 5
-3:00 Arg AR%sT
+#
+# Santa Fe (SF), Entre Rios (ER), Corrientes (CN), Misiones (MN), Chaco (CC),
+# Formosa (FM), La Pampa (LP), Chubut (CH)
+Zone America/Rosario -4:02:40 - LMT 1894 Nov
+ -4:16:44 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1991 Jul
+ -3:00 - ART
+#
+# Cordoba (CB), Santiago del Estero (SE), Salta (SA), Tucuman (TM), La Rioja (LR), San Juan (SJ), San Luis (SL),
+# Neuquen (NQ), Rio Negro (RN)
+Zone America/Cordoba -4:16:44 - LMT 1894 Nov
+ -4:16:44 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1990 Jul
+ -3:00 - ART
+#
+# Jujuy (JY)
+Zone America/Jujuy -4:21:12 - LMT 1894 Nov
+ -4:16:44 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1991 Mar 3
+ -4:00 - WART 1991 Oct 6
+ -4:00 1:00 WARST 1992 Mar 15
+ -4:00 - WART 1992 Oct 18
+ -3:00 - ART
+#
+# Catamarca (CT)
+Zone America/Catamarca -4:23:08 - LMT 1894 Nov
+ -4:16:44 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1990 Jul
+ -3:00 - ART 1991 Jul
+ -3:00 Arg AR%sT 1992 Jul
+ -3:00 - ART
+#
+# Mendoza (MZ)
+Zone America/Mendoza -4:35:16 - LMT 1894 Nov
+ -4:16:44 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1991 Mar 3
+ -4:00 - WART 1991 Oct 15
+ -4:00 1:00 WARST 1992 Mar 1
+ -4:00 - WART 1992 Oct 18
+ -3:00 - ART
# Aruba
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -132,38 +193,55 @@ Zone America/La_Paz -4:32:36 - LMT 1890
# "[America/Porto_Acre]" is for the Territory of Acre;
# "[America/Noronha]" is for Fernando De Noronha.
-# From Bob Devine (1988-01-28):
-# The only information I found is that there was no DST up to 1985.
-# But there was some before 1952!
-
-# From U. S. Naval Observatory (1989-01-16):
-# BRAZIL WEST 5 H BEHIND UTC TERRITORY OF ACRE
-# BRAZIL WEST 4 H BEHIND UTC ACRE OCT 23, '88-FEB 11,
-# BRAZIL '89 (ESTIMATED)
-# BRAZIL CENTRAL 4 H BEHIND UTC MANAUS
-# BRAZIL CENTRAL 3 H BEHIND UTC MANAUS OCT 23, '88-FEB 11,
-# BRAZIL CENTRAL '89 (ESTIMATED)
-# BRAZIL EAST 3 H BEHIND UTC COASTAL STATES, RIO, SAO
-# BRAZIL EAST PAULO, BRASILIA
-# BRAZIL EAST 2 H BEHIND UTC COASTAL STATES, RIO, SAO
-# BRAZIL PAULO, BRASILIA OCT 23,
-# BRAZIL '88-FEB 11, '89
-# BRAZIL (ESTIMATED)
-# BRAZIL 2 H BEHIND UTC ATLANTIC ISLANDS, FERNANDO
-# BRAZIL DE NORONHA
-# BRAZIL 1 H BEHIND UTC OCT 23, '88-FEB 11, '89
-# BRAZIL (ESTIMATED)
-# BRAZIL 3 H BEHIND UTC FOR MOST MAJOR AIRPORTS.
-
# From Paul Eggert <eggert@twinsun.com> (1993-11-18):
# The mayor of Rio recently attempted to change the time zone rules
# just in his city, in order to leave more summer time for the tourist trade.
# The rule change lasted only part of the day;
# the federal government refused to follow the city's rules, and business
# was in a chaos, so the mayor backed down that afternoon.
-# Shanks claims Acre stopped observing DST after 1988 Feb 7, but it
-# could just be that his table ran out of room. We're extrapolating
-# about time zone changes after 1990 Feb 11.
+
+# From IATA SSIM (1996-02):
+# _Only_ the following states in BR1 observe DST: Rio Grande do Sul (RS),
+# Santa Catarina (SC), Parana (PR), Sao Paulo (SP), Rio de Janeiro (RJ),
+# Espirito Santo (ES), Minas Gerais (MG), Bahia (BA), Goias (GO),
+# Distrito Federal (DF), Tocantins (TO), Sergipe [SE] and Alagoas [AL].
+# [The last three states are new to this issue of the IATA SSIM.]
+
+# From Gwillim Law (1996-10-07):
+# Geography, history (Tocantins was part of Goias until 1989), and other
+# sources of time zone information lead me to believe that AL, SE, and TO were
+# always in BR1, and so the only change was whether or not they observed DST....
+# The earliest issue of the SSIM I have is 2/91. Each issue from then until
+# 9/95 says that DST is observed only in the ten states I quoted from 9/95,
+# along with Mato Grosso (MT) and Mato Grosso do Sul (MS), which are in BR2
+# (UTC-4).... The other two time zones given for Brazil are BR3, which is
+# UTC-5, no DST, and applies only in the state of Acre (AC); and BR4, which is
+# UTC-2, and applies to Fernando de Noronha (formerly FN, but I believe it's
+# become part of the state of Pernambuco). The boundary between BR1 and BR2
+# has never been clearly stated. They've simply been called East and West.
+# However, some conclusions can be drawn from another IATA manual: the Airline
+# Coding Directory, which lists close to 400 airports in Brazil. For each
+# airport it gives a time zone which is coded to the SSIM. From that
+# information, I'm led to conclude that the states of Amapa (AP), Ceara (CE),
+# Maranhao (MA), Paraiba (PR), Pernambuco (PE), Piaui (PI), and Rio Grande do
+# Norte (RN), and the eastern part of Para (PA) are all in BR1 without DST.
+
+# From Paul Eggert (1996-11-22):
+# Let's make the following assumptions:
+#
+# * All data in Shanks are correct through 1990. In particular,
+# Shanks was right when he said Acre stopped observing DST in mid-1988.
+# * Areas where Shanks reports DST up to 1990, but the IATA reports no DST
+# in 1995, stopped observing DST in mid-1990.
+#
+# Under these assumptions Brazil needs 7 entries to cover all the distinct
+# time zone histories since 1970:
+#
+# Noronha (UTC-2), Fortaleza (UTC-3), and Manaus (UTC-4) stopped observing DST
+# in mid-1990.
+# Maceio (UTC-3) stopped observing DST in mid-1990, but started again mid-1995.
+# Sao Paulo (UTC-3) and Cuiaba (UTC-4) always observed DST.
+# Porto Acre (UTC-5) stopped observing DST in mid-1988.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Brazil 1931 only - Oct 3 11:00 1:00 D
@@ -185,21 +263,59 @@ Rule Brazil 1986 1987 - Oct Sat<=28 0:00 1:00 D
Rule Brazil 1987 only - Feb 14 0:00 0 S
Rule Brazil 1988 only - Feb 7 0:00 0 S
Rule Brazil 1989 only - Jan 22 0:00 0 S
-Rule Brazil 1988 max - Oct Sun>=15 0:00 1:00 D
-Rule Brazil 1990 max - Feb Sun>=8 0:00 0 S
+Rule Brazil 1988 1989 - Oct Sun>=10 0:00 1:00 D
+Rule Brazil 1990 1991 - Feb Sun>=11 0:00 0 S
+Rule Brazil 1990 1992 - Oct Sun>=20 0:00 1:00 D
+Rule Brazil 1992 only - Feb 9 0:00 0 S
+Rule Brazil 1993 max - Oct Sun>=11 0:00 1:00 D
+Rule Brazil 1993 only - Jan 31 0:00 0 S
+Rule Brazil 1994 1995 - Feb Sun>=15 0:00 0 S
+Rule Brazil 1996 max - Feb Sun>=11 0:00 0 S
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+#
+# Fernando de Noronha
Zone America/Noronha -2:09:40 - LMT 1914
-2:00 - FST 1963 Dec 9
- -2:00 Brazil F%sT
+ -2:00 Brazil F%sT 1990 Jul
+ -2:00 - FST
+#
+# Amapa, east Para, Maranhao, Piaui, Ceara, Rio Grande do Norte, Paraiba,
+# Pernambuco (except Fernando de Noronha)
+Zone America/Fortaleza -2:34:00 - LMT 1914
+ -3:00 - EST 1963 Dec 9
+ -3:00 Brazil E%sT 1990 Jul
+ -3:00 - EST
+#
+# Alagoas, Sergipe, Tocantins
+Zone America/Maceio -2:22:52 - LMT 1914
+ -3:00 - EST 1963 Dec 9
+ -3:00 Brazil E%sT 1990 Jul
+ -3:00 - EST 1995 Jul
+ -3:00 Brazil E%sT
+#
+# Bahia, Goias, Distrito Federal, Minas Gerais, Espirito Santo, Rio de Janeiro,
+# Sao Paulo, Parana, Santa Catarina, Rio Grande do Sul
Zone America/Sao_Paulo -3:06:28 - LMT 1914
-3:00 Brazil E%sT
-Zone America/Manaus -4:00:04 - LMT 1914
+#
+# Mato Grosso, Mato Grosso do Sul
+Zone America/Cuiaba -3:44:20 - LMT 1914
-4:00 - WST 1963 Dec 9
-4:00 Brazil W%sT
+#
+# Roraima, west Para, Amazonas, Rondonia
+Zone America/Manaus -4:00:04 - LMT 1914
+ -4:00 - WST 1963 Dec 9
+ -4:00 Brazil W%sT 1990 Jul
+ -4:00 - WST
+#
+# Acre
# Rio_Branco is too ambiguous, since there's a Rio Branco in Uruguay too.
Zone America/Porto_Acre -4:31:12 - LMT 1914
-5:00 - AST 1963 Dec 9
- -5:00 Brazil A%sT
+ -5:00 Brazil A%sT 1988 Jul
+ -5:00 - AST
#
# Martin Vaz and Trinidade are like America/Noronha.
@@ -217,6 +333,8 @@ Rule Chile 1927 1931 - Sep 1 0:00 1:00 S
Rule Chile 1928 1932 - Apr 1 0:00 0 -
Rule Chile 1969 max - Oct Sun>=9 0:00 1:00 S
Rule Chile 1970 max - Mar Sun>=9 0:00 0 -
+# IATA SSIM anomalies: (1990-09) says 1990-09-16; (1992-02) says 1992-03-14;
+# (1996-09) says 1998-03-08. Ignore these for now.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Santiago -4:42:40 - LMT 1890
-4:42:40 - SMT 1910 # Santiago Mean Time
@@ -233,10 +351,13 @@ Zone Pacific/Easter -7:17:28 - LMT 1890 # Mataveri
# Colombia
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule CO 1992 only - May 2 0:00 1:00 S
+Rule CO 1992 only - Dec 31 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Bogota -4:56:20 - LMT 1884 Mar 13
-4:56:20 - BMT 1914 Nov 23 # Bogota Mean Time
- -5:00 - COT # Colombia Time
+ -5:00 CO CO%sT # Colombia Time
# Malpelo, Providencia, San Andres
# no information; probably like America/Bogota
@@ -265,8 +386,9 @@ Rule Falk 1943 only - Jan 1 0:00 0 -
Rule Falk 1983 only - Sep lastSun 0:00 1:00 S
Rule Falk 1984 1985 - Apr lastSun 0:00 0 -
Rule Falk 1984 only - Sep 16 0:00 1:00 S
-Rule Falk 1985 max - Sep Sun>=9 0:00 1:00 S
+Rule Falk 1985 1995 - Sep Sun>=9 0:00 1:00 S
Rule Falk 1986 max - Apr Sun>=16 0:00 0 -
+Rule Falk 1996 max - Sep Sun>=8 0:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Atlantic/Stanley -3:51:24 - LMT 1890
-3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time
@@ -285,8 +407,9 @@ Zone America/Cayenne -3:29:20 - LMT 1911 Jul
Zone America/Guyana -3:52:40 - LMT 1915 Mar # Georgetown
-3:45 - GBGT 1966 May 26 # Br Guiana Time
-3:45 - GYT 1975 Jul 31 # Guyana Time
- -3:00 - GYT
-
+ -3:00 - GYT 1991
+# IATA SSIM (1996-06) says -4:00. Assume a 1991 switch.
+ -4:00 - GYT
# Paraguay
@@ -303,10 +426,17 @@ Zone America/Guyana -3:52:40 - LMT 1915 Mar # Georgetown
Rule Para 1975 1978 - Oct 1 0:00 1:00 S
Rule Para 1975 1978 - Mar 1 0:00 0 -
# Shanks says 1979 was all DST.
-Rule Para 1980 max - Apr 1 0:00 0 -
+Rule Para 1980 1991 - Apr 1 0:00 0 -
Rule Para 1980 1988 - Oct 1 0:00 1:00 S
Rule Para 1989 only - Oct 22 0:00 1:00 S
-Rule Para 1990 max - Oct 1 0:00 1:00 S
+Rule Para 1990 only - Oct 1 0:00 1:00 S
+Rule Para 1991 only - Oct 6 0:00 1:00 S
+Rule Para 1992 only - Mar 1 0:00 0 -
+Rule Para 1992 only - Oct 5 0:00 1:00 S
+Rule Para 1993 only - Mar 31 0:00 0 -
+Rule Para 1993 max - Oct 1 0:00 1:00 S
+Rule Para 1994 1995 - Feb lastSun 0:00 0 -
+Rule Para 1996 max - Mar 1 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Asuncion -3:50:40 - LMT 1890
-3:50:40 - AMT 1931 Oct 10 # Asuncion Mean Time
@@ -324,6 +454,8 @@ Rule Peru 1987 only - Jan 1 0:00 1:00 S
Rule Peru 1987 only - Apr 1 0:00 0 -
Rule Peru 1990 only - Jan 1 0:00 1:00 S
Rule Peru 1990 only - Apr 1 0:00 0 -
+Rule Peru 1993 only - Jan 1 0:00 1:00 S
+Rule Peru 1993 only - Apr 1 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Lima -5:08:12 - LMT 1890
-5:09 - LMT 1908 Jul 28 # Lima Mean Time
@@ -396,7 +528,10 @@ Rule Uruguay 1988 only - Mar 14 0:00 0 -
Rule Uruguay 1988 only - Dec 11 0:00 1:00 S
Rule Uruguay 1989 only - Mar 12 0:00 0 -
Rule Uruguay 1989 only - Oct 29 0:00 1:00 S
-Rule Uruguay 1990 only - Mar 4 0:00 0 -
+Rule Uruguay 1990 1992 - Mar Sun>=1 0:00 0 -
+Rule Uruguay 1990 1991 - Oct Sun>=21 0:00 1:00 S
+Rule Uruguay 1992 1993 - Oct Sun>=15 0:00 1:00 S
+Rule Uruguay 1993 only - Feb 28 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28
-3:44:44 - MMT 1920 May 1 # Montevideo MT
diff --git a/time/zone.tab b/time/zone.tab
index fef6a7244f..9d86110ca7 100644
--- a/time/zone.tab
+++ b/time/zone.tab
@@ -31,9 +31,15 @@ AN +1211-06900 America/Curacao
AO -0848+01314 Africa/Luanda
AQ -7750+16636 Antarctica/McMurdo McMurdo Station, Ross Island
AQ -9000+00000 Antarctica/South_Pole Amundsen-Scott Station, South Pole
-AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula
+AQ -6448-06406 Antarctica/Palmer Palmer Station, Anvers Island
AQ -6736+06253 Antarctica/Mawson Mawson Station, Holme Bay
-AR -3436-05827 America/Buenos_Aires
+AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula
+AR -3436-05827 America/Buenos_Aires E Argentina (BA, DF, SC, TF)
+AR -3257-06040 America/Rosario NE Argentina (SF, ER, CN, MN, CC, FM, LP, CH)
+AR -3124-06411 America/Cordoba W Argentina (CB, SA, TM, LR, SJ, SL, NQ, RN)
+AR -2411-06518 America/Jujuy Jujuy (JY)
+AR -2828-06547 America/Catamarca Catamarca (CT)
+AR -3253-06849 America/Mendoza Mendoza (MZ)
AS -1416-17042 Pacific/Pago_Pago
AT +4813+01620 Europe/Vienna
AU -3133+15905 Australia/Lord_Howe Lord Howe Island
@@ -41,7 +47,8 @@ AU -4253+14719 Australia/Hobart Tasmania
AU -3749+14458 Australia/Melbourne Victoria
AU -3352+15113 Australia/Sydney New South Wales - most locations
AU -3157+14127 Australia/Broken_Hill New South Wales - Broken Hill
-AU -2728+15302 Australia/Brisbane Queensland
+AU -2728+15302 Australia/Brisbane Queensland - most locations
+AU -2016+14900 Australia/Lindeman Queensland - Holiday Islands
AU -3455+13835 Australia/Adelaide South Australia
AU -1228+13050 Australia/Darwin Northern Territory
AU -3157+11551 Australia/Perth Western Australia
@@ -59,9 +66,12 @@ BJ +0629+00237 Africa/Porto-Novo
BM +3217-06446 Atlantic/Bermuda
BN +0456+11455 Asia/Brunei
BO -1630-06809 America/La_Paz
-BR -0351-03225 America/Noronha Atlantic islands
-BR -2332-04637 America/Sao_Paulo east Brazil
-BR -0308-06001 America/Manaus west Brazil
+BR -0351-03225 America/Noronha Fernando de Noronha
+BR -0343-03830 America/Fortaleza NE Brazil (AP, east PA, MA, PI, CE, RN, PR, PE)
+BR -0940-03543 America/Maceio ENE Brazil (AL, SE, TO)
+BR -2332-04637 America/Sao_Paulo S & SE Brazil (BA, GO, DF, MG, ES, RJ, SP, PR, SC, RS)
+BR -1535-05605 America/Cuiaba SW Brazil (MT, MS)
+BR -0308-06001 America/Manaus NW Brazil (RR, west PA, AM, RO)
BR -0934-06731 America/Porto_Acre Acre
BS +2505-07721 America/Nassau
BT +2728+08939 Asia/Thimbu
@@ -69,8 +79,9 @@ BW -2545+02555 Africa/Gaborone
BY +5354+02734 Europe/Minsk
BZ +1730-08812 America/Belize
CA +4734-05243 America/St_Johns Newfoundland Island
-CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most locations), New Brunswick, Labrador & PEI
+CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), NB, W Labrador, E Quebec & PEI
CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971
+CA +5320-06025 America/Goose_Bay Atlantic Time - E Labrador
CA +6608-06544 America/Pangnirtung Atlantic Time - Northwest Territories
CA +4531-07334 America/Montreal Eastern Time - Ontario & Quebec - most locations
CA +4901-08816 America/Nipigon Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973
@@ -189,7 +200,8 @@ KR +3733+12658 Asia/Seoul
KW +2920+04759 Asia/Kuwait
KY +1918-08123 America/Cayman
KZ +4315+07657 Asia/Alma-Ata east Kazakhstan
-KZ +5016+07302 Asia/Aktau west Kazakhstan
+KZ +5017+05710 Asia/Aqtobe central Kazakhstan
+KZ +4431+05016 Asia/Aqtau west Kazakhstan
LA +1758+10236 Asia/Vientiane
LB +3353+03530 Asia/Beirut
LC +1401-06100 America/St_Lucia
@@ -262,15 +274,16 @@ PY -2516-05740 America/Asuncion
QA +2517+05132 Asia/Qatar
RE -2052+05528 Indian/Reunion
RO +4426+02606 Europe/Bucharest
+RU +5443+02030 Europe/Kaliningrad Moscow-01 - Kaliningrad
RU +5545+03735 Europe/Moscow Moscow+00 - west Russia
-RU +5312+05009 Europe/Kuybyshev Moscow+01 - Caspian Sea
+RU +5312+05009 Europe/Samara Moscow+01 - Caspian Sea
RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals
RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia
RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk
RU +5601+09250 Asia/Krasnoyarsk Moscow+04 - Yenisei River
-RU +5216+10420 Asia/Irkutsk Moscow+05 - Irkutsk
+RU +5216+10420 Asia/Irkutsk Moscow+05 - Lake Baikal
RU +6200+12940 Asia/Yakutsk Moscow+06 - Lena River
-RU +4310+13156 Asia/Vladivostok Moscow+07 - Vladivostok
+RU +4310+13156 Asia/Vladivostok Moscow+07 - Amur River
RU +5934+15048 Asia/Magadan Moscow+08 - Magadan & Sakhalin
RU +5301+15839 Asia/Kamchatka Moscow+09 - Kamchatka
RU +6445+17729 Asia/Anadyr Moscow+10 - Bering Sea