aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog44
-rw-r--r--elf/dl-load.c4
-rw-r--r--elf/rtld.c18
-rw-r--r--grp/fgetgrent.c4
-rw-r--r--nss/nss_files/files-XXX.c2
-rw-r--r--nss/nss_files/files-ethers.c3
-rw-r--r--nss/nss_files/files-grp.c10
-rw-r--r--nss/nss_files/files-hosts.c93
-rw-r--r--nss/nss_files/files-network.c13
-rw-r--r--nss/nss_files/files-parse.c17
-rw-r--r--nss/nss_files/files-proto.c3
-rw-r--r--nss/nss_files/files-pwd.c17
-rw-r--r--nss/nss_files/files-rpc.c3
-rw-r--r--nss/nss_files/files-service.c3
-rw-r--r--pwd/fgetpwent.c4
-rw-r--r--sysdeps/i386/strtok.S8
-rw-r--r--time/europe77
-rw-r--r--time/northamerica270
18 files changed, 375 insertions, 218 deletions
diff --git a/ChangeLog b/ChangeLog
index 3cd5206..7677327 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,49 @@
+Tue Jul 2 10:44:37 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
+
+ * pwd/fgetpwent.c: Don't include ../nss/nss_files/files-parse.c to
+ define parse_line function.
+ (parse_line): #define to _nss_files_parse_pwent and
+ add extern decl for that.
+
+ * nss/nss_files/files-XXX.c (internal_getent): Return
+ NSS_STATUS_TRYAGAIN for ERANGE error.
+
+ * sysdeps/i386/strtok.S (LreturnNULL): Save current state ptr instead
+ of null, so next round returns null again instead of bombing. Fix
+ from drepper.
+
+ * nss/nss_files/files-parse.c (LINE_PARSER): Take new first arg EOLSET.
+ Remove ; after `ENTDATA_DECL (data)'.
+ Truncate line at strpbrk (line, EOLSET "\n").
+ (ENTDATA_DECL): Put ; at end.
+ (MIDLINE_COMMENTS): Macro removed.
+ * nss/nss_files/files-ethers.c: Pass new argument.
+ * nss/nss_files/files-hosts.c: Likewise.
+ * nss/nss_files/files-network.c: Likewise.
+ * nss/nss_files/files-parse.c: Likewise.
+ * nss/nss_files/files-proto.c: Likewise.
+ * nss/nss_files/files-rpc.c: Likewise.
+ * nss/nss_files/files-service.c: Likewise.
+ * grp/fgetgrent.c: Likewise.
+ * pwd/fgetpwent.c: Likewise.
+ * nss/nss_files/files-pwd.c: Get parse_line with extern decl, since
+ fgetpwent.c already defines it.
+ * nss/nss_files/files-grp.c: Likewise.
+
+ * elf/dl-load.c (_dl_map_object): Use any object with matching l_name
+ as well as any matching with l_libname. Fix DT_SONAME lookup to use
+ string table properly.
+
+ * elf/rtld.c (dl_main): Set _dl_rtld_map.l_name from _dl_argv[0] when
+ invoked directly, and l_libname from that if PT_INTERP missing.
+ Set l_name from l_libname only if not set from argv.
+
+ * time/europe, time/northamerica: Updated from ADO 96i.
+
Mon Jul 1 15:44:34 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
+ * stdio-common/tst-ungetc.c: Include unistd.h.
+
* inet/Makefile (routines): Change getnetbypt to getnetbyad.
Mon Jul 1 13:32:42 1996 Miles Bader <miles@gnu.ai.mit.edu>
diff --git a/elf/dl-load.c b/elf/dl-load.c
index c19ebe7..ff7f5cf 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -460,11 +460,13 @@ _dl_map_object (struct link_map *loader, const char *name, int type)
/* Look for this name among those already loaded. */
for (l = _dl_loaded; l; l = l->l_next)
if (! strcmp (name, l->l_libname) || /* NAME was requested before. */
+ ! strcmp (name, l->l_name) || /* NAME was found before. */
/* If the requested name matches the soname of a loaded object,
use that object. */
(l->l_info[DT_SONAME] &&
! strcmp (name, (const char *) (l->l_addr +
- l->l_info[DT_SONAME]->d_un.d_ptr))))
+ l->l_info[DT_STRTAB]->d_un.d_ptr +
+ l->l_info[DT_SONAME]->d_un.d_val))))
{
/* The object is already loaded.
Just bump its reference count and return it. */
diff --git a/elf/rtld.c b/elf/rtld.c
index f20602d..1cabe82 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -117,7 +117,6 @@ dl_main (const ElfW(Phdr) *phdr,
{
const ElfW(Phdr) *ph;
struct link_map *l;
- const char *interpreter_name;
int lazy;
int list_only = 0;
@@ -154,7 +153,8 @@ file you run. This is mostly of use for maintainers to test new versions\n\
of this helper program; chances are you did not intend to run this program.\n",
NULL);
- interpreter_name = _dl_argv[0];
+ /* Note the place where the dynamic linker actually came from. */
+ _dl_rtld_map.l_name = _dl_argv[0];
if (! strcmp (_dl_argv[1], "--list"))
{
@@ -182,7 +182,6 @@ of this helper program; chances are you did not intend to run this program.\n",
l = _dl_new_object ((char *) "", "", lt_library);
l->l_phdr = phdr;
l->l_phnum = phent;
- interpreter_name = 0;
l->l_entry = *user_entry;
}
@@ -216,10 +215,14 @@ of this helper program; chances are you did not intend to run this program.\n",
dlopen call or DT_NEEDED entry, for something that wants to link
against the dynamic linker as a shared library, will know that
the shared object is already loaded. */
- interpreter_name = (void *) l->l_addr + ph->p_vaddr;
+ _dl_rtld_map.l_libname = (const char *) l->l_addr + ph->p_vaddr;
break;
}
- assert (interpreter_name); /* How else did we get here? */
+ if (! _dl_rtld_map.l_libname && _dl_rtld_map.l_name)
+ /* We were invoked directly, so the program might not have a PT_INTERP. */
+ _dl_rtld_map.l_libname = _dl_rtld_map.l_name;
+ else
+ assert (_dl_rtld_map.l_libname); /* How else did we get here? */
/* Extract the contents of the dynamic section for easy access. */
elf_get_dynamic_info (l->l_ld, l->l_info);
@@ -229,7 +232,10 @@ of this helper program; chances are you did not intend to run this program.\n",
/* Put the link_map for ourselves on the chain so it can be found by
name. */
- _dl_rtld_map.l_name = (char *) _dl_rtld_map.l_libname = interpreter_name;
+ if (! _dl_rtld_map.l_name)
+ /* If not invoked directly, the dynamic linker shared object file was
+ found by the PT_INTERP name. */
+ _dl_rtld_map.l_name = (char *) _dl_rtld_map.l_libname;
_dl_rtld_map.l_type = lt_library;
while (l->l_next)
l = l->l_next;
diff --git a/grp/fgetgrent.c b/grp/fgetgrent.c
index aced929..38ccd15 100644
--- a/grp/fgetgrent.c
+++ b/grp/fgetgrent.c
@@ -30,11 +30,11 @@ struct grent_data {};
#define TRAILING_LIST_SEPARATOR_P(c) ((c) == ',')
#include "../nss/nss_files/files-parse.c"
LINE_PARSER
-(
+(,
STRING_FIELD (result->gr_name, ISCOLON, 0);
STRING_FIELD (result->gr_passwd, ISCOLON, 0);
INT_FIELD (result->gr_gid, ISCOLON, 0, 10,);
-)
+ )
/* Read one entry from the given stream. */
diff --git a/nss/nss_files/files-XXX.c b/nss/nss_files/files-XXX.c
index 7291c75..b9c3579 100644
--- a/nss/nss_files/files-XXX.c
+++ b/nss/nss_files/files-XXX.c
@@ -144,7 +144,7 @@ internal_getent (struct STRUCTURE *result,
if (buflen < (int) sizeof *data + 1)
{
errno = ERANGE;
- return NSS_STATUS_NOTFOUND;
+ return NSS_STATUS_TRYAGAIN;
}
do
diff --git a/nss/nss_files/files-ethers.c b/nss/nss_files/files-ethers.c
index e7579a4..b66a3c3 100644
--- a/nss/nss_files/files-ethers.c
+++ b/nss/nss_files/files-ethers.c
@@ -33,8 +33,7 @@ struct etherent_data {};
#define DATAFILE "/etc/ethers"
#include "files-parse.c"
LINE_PARSER
-(
- MIDLINE_COMMENTS;
+("#",
/* Read the ethernet address: 6 x 8bit hexadecimal number. */
{
size_t cnt;
diff --git a/nss/nss_files/files-grp.c b/nss/nss_files/files-grp.c
index 6d528a6..580dfbe 100644
--- a/nss/nss_files/files-grp.c
+++ b/nss/nss_files/files-grp.c
@@ -27,12 +27,10 @@ struct grent_data {};
#define TRAILING_LIST_MEMBER gr_mem
#define TRAILING_LIST_SEPARATOR_P(c) ((c) == ',')
#include "files-parse.c"
-LINE_PARSER
-(
- STRING_FIELD (result->gr_name, ISCOLON, 0);
- STRING_FIELD (result->gr_passwd, ISCOLON, 0);
- INT_FIELD (result->gr_gid, ISCOLON, 0, 10,);
-)
+/* Our parser function is already defined in fgetgrent.c, so use that.
+ to parse lines from the database file. */
+extern int parse_line (char *line, struct STRUCTURE *result,
+ void *buffer, int buflen);
#include "files-XXX.c"
diff --git a/nss/nss_files/files-hosts.c b/nss/nss_files/files-hosts.c
index 15f00f3..19a0075 100644
--- a/nss/nss_files/files-hosts.c
+++ b/nss/nss_files/files-hosts.c
@@ -43,52 +43,53 @@ struct hostent_data
#define TRAILING_LIST_SEPARATOR_P isspace
#include "files-parse.c"
LINE_PARSER
-({
- char *addr;
-
- STRING_FIELD (addr, isspace, 1);
-
- /* Parse address. */
- if ((_res.options & RES_USE_INET6)
- && inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
- {
- result->h_addrtype = AF_INET6;
- result->h_length = IN6ADDRSZ;
- }
- else if (inet_pton (AF_INET, addr, entdata->host_addr) > 0)
- {
- if (_res.options & RES_USE_INET6)
- {
- map_v4v6_address ((char *) entdata->host_addr,
- (char *) entdata->host_addr);
- result->h_addrtype = AF_INET6;
- result->h_length = IN6ADDRSZ;
- }
- else
- {
- result->h_addrtype = AF_INET;
- result->h_length = INADDRSZ;
- }
- }
- else
- /* Illegal address: ignore line. */
- return 0;
-
- /* Store a pointer to the address in the expected form. */
- entdata->h_addr_ptrs[0] = entdata->host_addr;
- entdata->h_addr_ptrs[1] = NULL;
- result->h_addr_list = entdata->h_addr_ptrs;
-
- /* If we need the host entry in IPv6 form change it now. */
- if (_res.options & RES_USE_INET6)
- {
- char *bufptr = data->linebuffer;
- int buflen = (char *) data + datalen - bufptr;
- map_v4v6_hostent (result, &bufptr, &buflen);
- }
-
- STRING_FIELD (result->h_name, isspace, 1);
-})
+("#",
+ {
+ char *addr;
+
+ STRING_FIELD (addr, isspace, 1);
+
+ /* Parse address. */
+ if ((_res.options & RES_USE_INET6)
+ && inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
+ {
+ result->h_addrtype = AF_INET6;
+ result->h_length = IN6ADDRSZ;
+ }
+ else if (inet_pton (AF_INET, addr, entdata->host_addr) > 0)
+ {
+ if (_res.options & RES_USE_INET6)
+ {
+ map_v4v6_address ((char *) entdata->host_addr,
+ (char *) entdata->host_addr);
+ result->h_addrtype = AF_INET6;
+ result->h_length = IN6ADDRSZ;
+ }
+ else
+ {
+ result->h_addrtype = AF_INET;
+ result->h_length = INADDRSZ;
+ }
+ }
+ else
+ /* Illegal address: ignore line. */
+ return 0;
+
+ /* Store a pointer to the address in the expected form. */
+ entdata->h_addr_ptrs[0] = entdata->host_addr;
+ entdata->h_addr_ptrs[1] = NULL;
+ result->h_addr_list = entdata->h_addr_ptrs;
+
+ /* If we need the host entry in IPv6 form change it now. */
+ if (_res.options & RES_USE_INET6)
+ {
+ char *bufptr = data->linebuffer;
+ int buflen = (char *) data + datalen - bufptr;
+ map_v4v6_hostent (result, &bufptr, &buflen);
+ }
+
+ STRING_FIELD (result->h_name, isspace, 1);
+ })
#include "files-XXX.c"
diff --git a/nss/nss_files/files-network.c b/nss/nss_files/files-network.c
index 504c420..c6cd718 100644
--- a/nss/nss_files/files-network.c
+++ b/nss/nss_files/files-network.c
@@ -30,15 +30,16 @@ struct netent_data {};
#define TRAILING_LIST_SEPARATOR_P isspace
#include "files-parse.c"
LINE_PARSER
-({
- char *addr;
+("#",
+ {
+ char *addr;
- STRING_FIELD (result->n_name, isspace, 1);
+ STRING_FIELD (result->n_name, isspace, 1);
- STRING_FIELD (addr, isspace, 1);
- result->n_net = inet_network (addr);
+ STRING_FIELD (addr, isspace, 1);
+ result->n_net = inet_network (addr);
-})
+ })
#include "files-XXX.c"
diff --git a/nss/nss_files/files-parse.c b/nss/nss_files/files-parse.c
index be35ae1..a9c461e 100644
--- a/nss/nss_files/files-parse.c
+++ b/nss/nss_files/files-parse.c
@@ -35,7 +35,7 @@ struct parser_data
{
#ifdef ENTDATA
struct ENTDATA entdata;
-#define ENTDATA_DECL(data) struct ENTDATA *const entdata = &data->entdata
+#define ENTDATA_DECL(data) struct ENTDATA *const entdata = &data->entdata;
#else
#define ENTDATA_DECL(data)
#endif
@@ -52,26 +52,21 @@ struct parser_data
#define parse_line CONCAT(_nss_files_parse_,ENTNAME)
#endif
-#define LINE_PARSER(BODY) \
+#define LINE_PARSER(EOLSET, BODY) \
parser_stclass int \
parse_line (char *line, struct STRUCTURE *result, \
struct parser_data *data, int datalen) \
{ \
- ENTDATA_DECL (data); \
+ ENTDATA_DECL (data) \
+ char *p = strpbrk (line, EOLSET "\n"); \
+ if (p) \
+ *p = '\0'; \
BODY; \
TRAILING_LIST_PARSER; \
return 1; \
}
-/* Comments can come mid-line; trim the line at the first # seen. */
-#define MIDLINE_COMMENTS \
- { \
- char *p = strchr (line, '#'); \
- if (p) \
- *p = '\0'; \
- }
-
#define STRING_FIELD(variable, terminator_p, swallow) \
{ \
variable = line; \
diff --git a/nss/nss_files/files-proto.c b/nss/nss_files/files-proto.c
index d67f8db..ef5a7c2 100644
--- a/nss/nss_files/files-proto.c
+++ b/nss/nss_files/files-proto.c
@@ -29,8 +29,7 @@ struct protoent_data {};
#define TRAILING_LIST_SEPARATOR_P isspace
#include "files-parse.c"
LINE_PARSER
-(
- MIDLINE_COMMENTS;
+("#",
STRING_FIELD (result->p_name, isspace, 1);
INT_FIELD (result->p_proto, isspace, 1, 10,);
)
diff --git a/nss/nss_files/files-pwd.c b/nss/nss_files/files-pwd.c
index 4b6a4b7..6b39116 100644
--- a/nss/nss_files/files-pwd.c
+++ b/nss/nss_files/files-pwd.c
@@ -25,19 +25,10 @@ Cambridge, MA 02139, USA. */
struct pwent_data {};
#include "files-parse.c"
-LINE_PARSER
-({
- STRING_FIELD (result->pw_name, ISCOLON, 0);
- STRING_FIELD (result->pw_passwd, ISCOLON, 0);
- INT_FIELD (result->pw_uid, ISCOLON, 0, 10,);
- INT_FIELD (result->pw_gid, ISCOLON, 0, 10,);
- STRING_FIELD (result->pw_gecos, ISCOLON, 0);
- STRING_FIELD (result->pw_dir, ISCOLON, 0);
- result->pw_shell = line;
- line = strchr (line, '\n');
- if (line)
- *line = '\0';
-})
+/* Our parser function is already defined in fgetpwent.c, so use that.
+ to parse lines from the database file. */
+extern int parse_line (char *line, struct STRUCTURE *result,
+ void *buffer, int buflen);
#include "files-XXX.c"
diff --git a/nss/nss_files/files-rpc.c b/nss/nss_files/files-rpc.c
index fef0ff8..f8bef45 100644
--- a/nss/nss_files/files-rpc.c
+++ b/nss/nss_files/files-rpc.c
@@ -29,8 +29,7 @@ struct rpcent_data {};
#define TRAILING_LIST_SEPARATOR_P isspace
#include "files-parse.c"
LINE_PARSER
-(
- MIDLINE_COMMENTS;
+("#",
STRING_FIELD (result->r_name, isspace, 1);
INT_FIELD (result->r_number, isspace, 1, 10,);
)
diff --git a/nss/nss_files/files-service.c b/nss/nss_files/files-service.c
index 3bcb487..f0dba50 100644
--- a/nss/nss_files/files-service.c
+++ b/nss/nss_files/files-service.c
@@ -31,8 +31,7 @@ struct servent_data {};
#include "files-parse.c"
#define ISSLASH(c) ((c) == '/')
LINE_PARSER
-(
- MIDLINE_COMMENTS;
+("#",
STRING_FIELD (result->s_name, isspace, 1);
INT_FIELD (result->s_port, ISSLASH, 10, 0, htons);
STRING_FIELD (result->s_proto, isspace, 1);
diff --git a/pwd/fgetpwent.c b/pwd/fgetpwent.c
index c29e96e..f8548fe 100644
--- a/pwd/fgetpwent.c
+++ b/pwd/fgetpwent.c
@@ -28,7 +28,7 @@ struct pwent_data {};
#include "../nss/nss_files/files-parse.c"
LINE_PARSER
-(
+(,
STRING_FIELD (result->pw_name, ISCOLON, 0);
STRING_FIELD (result->pw_passwd, ISCOLON, 0);
INT_FIELD (result->pw_uid, ISCOLON, 0, 10,);
@@ -36,7 +36,7 @@ LINE_PARSER
STRING_FIELD (result->pw_gecos, ISCOLON, 0);
STRING_FIELD (result->pw_dir, ISCOLON, 0);
result->pw_shell = line;
-)
+ )
/* Read one entry from the given stream. */
diff --git a/sysdeps/i386/strtok.S b/sysdeps/i386/strtok.S
index 2ef8803..c38ebf9 100644
--- a/sysdeps/i386/strtok.S
+++ b/sysdeps/i386/strtok.S
@@ -269,15 +269,15 @@ L11:
LreturnNULL:
xorl %eax, %eax
- /* Store NULL as pointer to the next character. */
+ /* Store current pointer for next round. */
#ifdef USE_AS_STRTOK_R
movl 12(%esp), %ecx
- movl %eax, (%ecx)
+ movl %edx, (%ecx)
#else
# ifndef PIC
- movl %eax, save_ptr
+ movl %edx, save_ptr
# else
- movl %eax, save_ptr@GOTOFF(%ebx)
+ movl %edx, save_ptr@GOTOFF(%ebx)
popl %ebx
# endif
#endif
diff --git a/time/europe b/time/europe
index b96f235..ce66e8a 100644
--- a/time/europe
+++ b/time/europe
@@ -1,4 +1,4 @@
-# @(#)europe 7.37
+# @(#)europe 7.38
# 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
@@ -125,6 +125,15 @@
# transition date for London, namely 1847 Sep 22. We don't know as much
# about Dublin, so we use 1880 Aug 2, the legal transition time.
+# From Paul Eggert (1996-06-12):
+# Summer Time was first seriously proposed by William Willett (1857-1915),
+# a London builder who circulated a pamphlet ``Waste of Daylight'' (1907)
+# that proposed advancing clocks 20 minutes on each of four Sundays in April,
+# and retarding them by the same amount on four Sundays in September.
+# A bill was drafted in 1909 and introduced in Parliament several times,
+# but it met with ridicule and opposition, especially from farming interests.
+# One-hour Summer Time was eventually adopted as a wartime measure in 1916.
+
# From Arthur David Olson (January 19, 1989):
#
# A source at the British Information Office in New York avers that it's
@@ -418,6 +427,22 @@
# who provided the wartime regulations and a snippet of Hansard explaining
# why double summer time started on a Monday in 1945 (it was Easter).
+# From Peter Ilieve <peter@aldie.co.uk> (1996-05-29):
+# I have now got a copy of the British Standard Time Act 1968.
+# It says (S4(2)) that it expires at 02:00 GMT on 31 October 1971 unless
+# an Order in Council was passed in Parliament to make the Act permanent.
+# No Order was passed, so 02:00 1971-10-31 it is...
+#
+# Interestingly, it says baldly `This Act shall come into force on
+# 27 October 1968', without giving a time. As S1 of the Act merely
+# stated that `The time for general purposes in the United Kingdom
+# (to be known as British standard time) shall be one hour in
+# advance of Greenwich mean time throughout the year; ...' you could
+# possibly argue that the start time of BStandardT was 00:00 1968-10-27,
+# especially as the Act repealed the Summer Time Acts 1916--1947 in toto,
+# thereby destroying the authority of the Summer Time Order specifying
+# summer time in 1968....
+
# From Peter Ilieve <peter@memex.co.uk> (November 18, 1993)
#
# Here is a revised version of my tabrules file for the perl script I sent
@@ -617,7 +642,7 @@
# To maintain strict historical accuracy you could start a new UK ending rule
# of Oct Sun>=22 in 1990.
-# From Paul Eggert <eggert@twinsun.com> (November 18, 1993):
+# From Paul Eggert <eggert@twinsun.com> (1996-06-12):
#
# As Ilieve remarks, the date `20 April 1924' in the table of ``Summer Time: A
# Consultation Document'' (Cm 722, 1989) table is a transcription error;
@@ -637,15 +662,28 @@
# It actually just had one transition.
# * Northern Ireland used single daylight savings time throughout WW II.
# Actually, it conformed to Britain.
+# * GB-Eire changed standard time to 1 hour ahead of GMT on 1968-02-18.
+# Actually, that date saw the usual switch to summer time.
+# Standard time was not changed until 1968-10-27 (the clocks didn't change).
#
-# The following claim by Shanks is possible though doubtful;
-# we'll ignore it for now.
+# The following claims by Shanks are possible though doubtful;
+# we'll ignore them for now.
# * Jersey, Guernsey, and the Isle of Man did not switch from GMT
# to daylight savings time until 1921 Apr 3, when they began to
# conform with Great Britain.
+# * Dublin's 1971-10-31 switch was at 02:00, even though London's was 03:00.
+#
#
# Whitman says Dublin Mean Time was -0:25:21, which is more precise than Shanks.
+# From an anonymous contributor (1996-06-02):
+# The law governing time in Ireland is under Statutory Instrument SI 395/94,
+# which gives force to European Union 7th Council Directive # 94/21/EC.
+# Under this directive, the Minister for Justice in Ireland makes appropriate
+# regulations. I spoke this morning with the Secretary of the Department of
+# Justice (tel +353 1 678 9711) who confirmed to me that the correct name is
+# "Irish Summer Time", abbreviated to "IST".
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
# 1916 to 1925--irregular
Rule GB-Eire 1916 only - May 21 2:00s 1:00 BST
@@ -710,11 +748,11 @@ Rule GB-Eire 1958 1959 - Apr Sun>=16 2:00s 1:00 BST
Rule GB-Eire 1960 only - Apr 10 2:00s 1:00 BST
Rule GB-Eire 1961 1963 - Mar lastSun 2:00s 1:00 BST
Rule GB-Eire 1964 1967 - Mar Sun>=19 2:00s 1:00 BST
+Rule GB-Eire 1968 only - Feb 18 2:00s 1:00 BST
Rule GB-Eire 1972 1980 - Mar Sun>=16 2:00s 1:00 BST
# 1953 to 1980, ending rules
Rule GB-Eire 1953 1960 - Oct Sun>=1 2:00s 0 GMT
-Rule GB-Eire 1961 1967 - Oct Sun>=23 2:00s 0 GMT
-Rule GB-Eire 1971 only - Oct 31 3:00 0 GMT
+Rule GB-Eire 1961 1968 - Oct Sun>=23 2:00s 0 GMT
Rule GB-Eire 1972 1980 - Oct Sun>=23 2:00s 0 GMT
# 1981 on
Rule GB-Eire 1981 1995 - Mar lastSun 1:00u 1:00 BST
@@ -724,29 +762,30 @@ Rule GB-Eire 1990 1995 - Oct Sun>=22 1:00u 0 GMT
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/London -0:01:15 - LMT 1847 Sep 22
- 0:00 GB-Eire %s 1968 Feb 18 2:00
- 1:00 - BST 1971 Oct 31 2:00
+ 0:00 GB-Eire %s 1968 Oct 27
+ 1:00 - BST 1971 Oct 31 2:00u
0:00 GB-Eire %s 1996
0:00 EU GMT/BST
Zone Europe/Belfast -0:23:40 - LMT 1880 Aug 2
-0:25:21 - DMT 1916 May 21 2:00 # Dublin MT
-0:25:21 1:00 DST 1916 Oct 1 3:00
- 0:00 GB-Eire %s 1968 Feb 18 2:00
- 1:00 - BST 1971 Oct 31 3:00
+ 0:00 GB-Eire %s 1968 Oct 27
+ 1:00 - BST 1971 Oct 31 2:00u
0:00 GB-Eire %s 1996
0:00 EU GMT/BST
Zone Europe/Dublin -0:25:21 - LMT 1880 Aug 2
-0:25:21 - DMT 1916 May 21 2:00 # Dublin MT
-0:25:21 1:00 DST 1916 Oct 1 3:00
- 0:00 GB-Eire %s 1940 Feb 25 2:00
- 0:00 1:00 BST 1946 Oct 6 2:00
+ 0:00 GB-Eire %s 1921 Dec 6
+ 0:00 GB-Eire GMT/IST 1940 Feb 25 2:00
+ 0:00 1:00 IST 1946 Oct 6 2:00
0:00 - GMT 1947 Mar 16 2:00
- 0:00 1:00 BST 1947 Nov 2 2:00
+ 0:00 1:00 IST 1947 Nov 2 2:00
0:00 - GMT 1948 Apr 18 2:00
- 0:00 GB-Eire %s 1968 Feb 18 2:00
- 1:00 - BST 1971 Oct 31 3:00
- 0:00 GB-Eire %s 1996
- 0:00 EU GMT/BST
+ 0:00 GB-Eire GMT/IST 1968 Oct 27
+ 1:00 - IST 1971 Oct 31 2:00u
+ 0:00 GB-Eire GMT/IST 1996
+ 0:00 EU GMT/IST
###############################################################################
@@ -1294,11 +1333,11 @@ Zone Atlantic/Reykjavik -1:27:24 - LMT 1837
# Italy
# From Paul Eggert (1996-05-06):
# For Italian DST we have three sources: Shanks, Whitman, and F. Pollastri
-# <http://pisolo.cstv.to.cnr.it/toi/it/ienitlt.html> (see `FP' below),
+# <URL:http://pisolo.cstv.to.cnr.it/toi/uk/ienitlt.html> (see `FP' below),
# taken from a publication of the Italian National Electrotechnical Institute.
# When the three sources disagree, guess who's right, as follows:
#
-# year FP Shanks (S) Whitman (W) Go with:
+# year FP Shanks (S) Whitman (W) Go with:
# 1916 06-03 06-03 24:00 06-03 00:00 FP & W
# 09-30 09-30 24:00 09-30 01:00 FP; guess 24:00s
# 1917 04-01 03-31 24:00 03-31 00:00 FP & S
diff --git a/time/northamerica b/time/northamerica
index 1d0342a..5771981 100644
--- a/time/northamerica
+++ b/time/northamerica
@@ -1,4 +1,4 @@
-# @(#)northamerica 7.25
+# @(#)northamerica 7.26
# also includes Central America and the Caribbean
# This data is by no means authoritative; if you think you know better,
@@ -21,6 +21,24 @@
# Make sure you have the errata sheet; the book is somewhat useless without it.
# It is the source for the US and Puerto Rico entries below.
+# From Paul Eggert (1996-06-12):
+# Daylight Saving Time was first suggested as a joke by Benjamin Franklin
+# in his whimsical essay ``Turkey vs Eagle, McCauley is my Beagle'' (1784).
+# Not everyone is happy with the results:
+#
+# I don't really care how time is reckoned so long as there is some
+# agreement about it, but I object to being told that I am saving
+# daylight when my reason tells me that I am doing nothing of the kind.
+# I even object to the implication that I am wasting something
+# valuable if I stay in bed after the sun has risen. As an admirer
+# of moonlight I resent the bossy insistence of those who want to
+# reduce my time for enjoying it. At the back of the Daylight Saving
+# scheme I detect the bony, blue-fingered hand of Puritanism, eager
+# to push people into bed earlier, and get them up earlier, to make
+# them healthy, wealthy and wise in spite of themselves.
+#
+# -- Robertson Davies, The Diary of Samuel Marchbanks (1947), XIX, Sunday
+
# From Arthur David Olson:
# US Daylight Saving Time ended on the last Sunday of *October* in 1974.
# See, for example, the front page of the Saturday, October 26, 1974
@@ -463,78 +481,6 @@ Link Pacific/Honolulu HST
# Canada
-# Canada is reportedly lots easier than the US--leastways since 1951.
-# I don't know what they did before then.
-# 4.3BSD claims that it's perfectly regular.
-# According to a posting in "comp.bugs.misc", "comp.unix.wizards", etc.
-# on February 8, 1987, by Dave Sherman of the Law Society of Upper Canada,
-# "...Canada (well, Ontario and at least some of the other provinces) are
-# adopting the new daylight savings time rules...". We assume all of
-# Canada is doing so.
-
-# From Bob Devine (January 28, 1988):
-# All of Canada did have DST from your first rule except Saskatchewan.
-# Which parts did not observe DST is hard to pinpoint but most of the
-# province follows the rules.
-# NOTE: those that didn't have DST for that rule, also
-# probably did not have it for several years previous.
-
-# From U. S. Naval Observatory (January 19, 1989):
-# CANADA NEW FDL 3.5H BEHIND UTC ST.JOHN'S
-# CANADA NEW FDL 1.5H BEHIND UTC APR 3 - OCT 29
-# CANADA ATLANTIC 4 H BEHIND UTC HALIFAX
-# CANADA ATLANTIC 3 H BEHIND UTC APR 3 - OCT 29
-# CANADA EASTERN 5 H BEHIND UTC TORONTO, MONTREAL, OTTAWA
-# CANADA EASTERN 4 H BEHIND UTC APR 3 - OCT 29
-# CANADA CENTRAL 6 H BEHIND UTC REGINA, WINNIPEG
-# CANADA CENTRAL 5 H BEHIND UTC APR 3 - OCT 29
-# CANADA MOUNTAIN 7 H BEHIND UTC CALGARY, EDMONTON
-# CANADA MOUNTAIN 6 H BEHIND UTC APR 3 - OCT 29
-# CANADA PACIFIC 8 H BEHIND UTC VANCOUVER
-# CANADA PACIFIC 7 H BEHIND UTC APR 3 - OCT 29
-# CANADA YUKON SAME AS PACIFIC DAWSON
-
-# From Arthur David Olson (January 21, 1989):
-# April 3 fell on a Sunday in 1988; October 29 fell on a Sunday in 1989. Ahem.
-# Note claim that there's double DST in Newfoundland and that Yukon should
-# be same as Pacific.
-
-# From W. Jones (jones@skdad.usask.ca) (November 6, 1992):
-# The. . .below is based on information I got from our law library, the
-# provincial archives, and the provincial Community Services department.
-# A precise history would require digging through newspaper archives, and
-# since you didn't say what you wanted, I didn't bother.
-#
-# Saskatchewan is split by a time zone meridian (105W) and over the years
-# the boundary became pretty ragged as communities near it reevaluated
-# their affiliations in one direction or the other. In 1965 a provincial
-# referendum favoured legislating common time practices.
-#
-# On 15 April 1966 the Time Act (c. T-14, Revised Statutes of
-# Saskatchewan 1978) was proclaimed, and established that the eastern
-# part of Saskatchewan would use CST year round, that districts in
-# northwest Saskatchewan would by default follow CST but could opt to
-# follow Mountain Time rules (thus 1 hour difference in the winter and
-# zero in the summer), and that districts in southwest Saskatchewan would
-# by default follow MT but could opt to follow CST.
-#
-# It took a few years for the dust to settle (I know one story of a town
-# on one time zone having its school in another, such that a mom had to
-# serve her family lunch in two shifts), but presently it seems that only
-# a few towns on the border with Alberta (e.g. Lloydminster) follow MT
-# rules any more; all other districts appear to have used CST year round
-# since sometime in the 1960s.
-#
-# Here's how I would summarize things. Establish a "Saskatchewan" CST
-# time zone, and note that it officially exists as of 15 April 1966. Any
-# current exceptions can put themselves in the "Mountain" zone, since
-# those are the rules they follow. Any past exceptions can be forgotten,
-# since that's what those who live here have done.
-
-# From Arthur David Olson (November 21, 1992):
-# East-Saskatchewan kept to avoid problems for folks using that zone by name;
-# plain Saskatchewan added.
-
# From Alain LaBont<e'> <ALB@immedia.ca> (1994-11-14):
# I post here the time zone abbreviations standardized in Canada
# for both English and French in the CAN/CSA-Z234.4-89 standard....
@@ -567,7 +513,21 @@ Link Pacific/Honolulu HST
# From Paul Eggert <eggert@twinsun.com> (1994-11-22):
# Alas, this sort of thing must be handled by localization software.
-# From Shanks (1991):
+# The data for Canada are all from Shanks (1991).
+
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Canada 1918 only - Apr 14 2:00 1:00 D
+Rule Canada 1918 only - Oct 31 2:00 0 S
+Rule Canada 1942 only - Feb 9 2:00 1:00 D
+Rule Canada 1945 only - Sep 30 2:00 0 S
+Rule Canada 1974 1986 - Apr lastSun 2:00 1:00 D
+Rule Canada 1974 max - Oct lastSun 2:00 0 S
+Rule Canada 1987 max - Apr Sun>=1 2:00 1:00 D
+
+
+# Newfoundland
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule StJohns 1917 1918 - Apr Sun>=8 2:00 1:00 D
Rule StJohns 1917 only - Sep 17 2:00 0 S
@@ -606,6 +566,16 @@ Zone America/St_Johns -3:30:52 - LMT 1884
-3:31 StJohns N%sT 1935 Mar 30
-3:30 StJohns N%sT
+
+# 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.
+# Many locales did not observe peacetime DST until 1972;
+# Glace Bay, NS is the largest that we know of.
+# Shanks also writes that Liverpool, NS was the only town in Canada to observe
+# DST in 1971 but not 1970; for now we'll assume this is a typo.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Halifax 1916 only - Apr 1 0:00 1:00 D
Rule Halifax 1916 only - Oct 1 0:00 0 S
@@ -650,6 +620,21 @@ Rule Halifax 1987 max - Apr Sun>=1 2:00 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Halifax -4:14:24 - LMT 1902 Jun 15
-4:00 Halifax A%sT
+Zone America/Glace_Bay -3:59:48 - LMT 1902 Jun 15
+ -4:00 Canada A%sT 1953
+ -4:00 Halifax A%sT 1954
+ -4:00 - AST 1972
+ -4:00 Halifax A%sT
+
+
+# Ontario, Quebec
+
+# From Paul Eggert (1996-06-12):
+# Shanks writes that since 1970 most of this region has been like Montreal.
+# Thunder Bay skipped DST in 1973.
+# Many smaller locales did not observe peacetime DST until 1974;
+# Nipigon (EST) and Rainy River (CST) are the largest that we know of.
+# Far west Ontario is like Winnipeg; far east Quebec is like Halifax.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Mont 1917 only - Mar 25 2:00 1:00 D
@@ -683,6 +668,18 @@ Rule Mont 1987 max - Apr Sun>=1 2:00 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Montreal -4:54:16 - LMT 1884
-5:00 Mont E%sT
+Zone America/Thunder_Bay -5:57:00 - LMT 1895
+ -5:00 Canada E%sT 1970
+ -5:00 Mont E%sT 1973
+ -5:00 - EST 1974
+ -5:00 Canada E%sT
+Zone America/Nipigon -5:53:04 - LMT 1895
+ -5:00 Canada E%sT
+Zone America/Rainy_River -6:17:56 - LMT 1895
+ -6:00 Canada C%sT
+
+
+# Manitoba
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Winn 1916 only - Apr 23 0:00 1:00 D
@@ -712,6 +709,40 @@ Rule Winn 1987 max - Apr Sun>=1 2:00 1:00 D
Zone America/Winnipeg -6:28:36 - LMT 1887 Jul 16
-6:00 Winn C%sT
+
+# Saskatchewan
+
+# From Paul Eggert (1996-06-12):
+# Shanks writes that since 1970 most of this region has been like Regina.
+# Some western towns (e.g. Swift Current) switched from MST/MDT to CST in 1972.
+# Other western towns (e.g. Lloydminster) are like Edmonton.
+
+# From W. Jones <jones@skdad.usask.ca> (November 6, 1992):
+# The. . .below is based on information I got from our law library, the
+# provincial archives, and the provincial Community Services department.
+# A precise history would require digging through newspaper archives, and
+# since you didn't say what you wanted, I didn't bother.
+#
+# Saskatchewan is split by a time zone meridian (105W) and over the years
+# the boundary became pretty ragged as communities near it reevaluated
+# their affiliations in one direction or the other. In 1965 a provincial
+# referendum favoured legislating common time practices.
+#
+# On 15 April 1966 the Time Act (c. T-14, Revised Statutes of
+# Saskatchewan 1978) was proclaimed, and established that the eastern
+# part of Saskatchewan would use CST year round, that districts in
+# northwest Saskatchewan would by default follow CST but could opt to
+# follow Mountain Time rules (thus 1 hour difference in the winter and
+# zero in the summer), and that districts in southwest Saskatchewan would
+# by default follow MT but could opt to follow CST.
+#
+# It took a few years for the dust to settle (I know one story of a town
+# on one time zone having its school in another, such that a mom had to
+# serve her family lunch in two shifts), but presently it seems that only
+# a few towns on the border with Alberta (e.g. Lloydminster) follow MT
+# rules any more; all other districts appear to have used CST year round
+# since sometime in the 1960s.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Regina 1918 only - Apr 14 2:00 1:00 D
Rule Regina 1918 only - Oct 31 2:00 0 S
@@ -723,14 +754,29 @@ Rule Regina 1938 only - Oct Sun>=1 0:00 0 S
Rule Regina 1939 1941 - Oct Sun>=8 0:00 0 S
Rule Regina 1942 only - Feb 9 2:00 1:00 D
Rule Regina 1945 only - Sep lastSun 2:00 0 S
-Rule Regina 1946 only - Apr 14 2:00 1:00 D
-Rule Regina 1946 only - Oct 13 2:00 0 S
-Rule Regina 1947 1960 - Apr lastSun 2:00 1:00 D
-Rule Regina 1947 1959 - Sep lastSun 2:00 0 S
+Rule Regina 1946 only - Apr Sun>=8 2:00 1:00 D
+Rule Regina 1946 only - Oct Sun>=8 2:00 0 S
+Rule Regina 1947 1959 - Apr lastSun 2:00 1:00 D
+Rule Regina 1947 1958 - Sep lastSun 2:00 0 S
+Rule Regina 1959 only - Oct lastSun 2:00 0 S
+#
+Rule Swift 1957 only - Apr lastSun 2:00 1:00 D
+Rule Swift 1957 only - Oct lastSun 2:00 0 S
+Rule Swift 1959 1961 - Apr lastSun 2:00 1:00 D
+Rule Swift 1959 only - Oct lastSun 2:00 0 S
+Rule Swift 1960 1961 - Sep lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Regina -6:58:36 - LMT 1905 Sep
- -7:00 Regina M%sT 1966 Apr 15
+Zone America/Regina -6:58:36 - LMT 1905 Sep
+ -7:00 Regina M%sT 1960 Apr lastSun 2:00
-6:00 - CST
+Zone America/Swift_Current -7:11:20 - LMT 1905 Sep
+ -7:00 Canada M%sT 1946 Apr lastSun 2:00
+ -7:00 Regina M%sT 1950
+ -7:00 Swift M%sT 1972 Apr lastSun 2:00
+ -6:00 - CST
+
+
+# Alberta
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Edm 1918 1919 - Apr Sun>=8 2:00 1:00 D
@@ -754,6 +800,13 @@ Rule Edm 1987 max - Apr Sun>=1 2:00 1:00 D
Zone America/Edmonton -7:33:52 - LMT 1906 Sep
-7:00 Edm M%sT
+
+# British Columbia
+
+# From Paul Eggert (1996-06-12):
+# Shanks writes that since 1970 most of this region has been like Vancouver.
+# Dawswon Creek uses MST. Much of east BC is like Edmonton.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Vanc 1918 only - Apr 14 2:00 1:00 D
Rule Vanc 1918 only - Oct 31 2:00 0 S
@@ -767,23 +820,50 @@ Rule Vanc 1987 max - Apr Sun>=1 2:00 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Vancouver -8:12:28 - LMT 1884
-8:00 Vanc P%sT
+Zone America/Dawson_Creek -8:00:56 - LMT 1884
+ -8:00 Canada P%sT 1947
+ -8:00 Vanc P%sT 1972 Aug 30 2:00
+ -7:00 - MST
+
+
+# Northwest Territories, Yukon
+
+# From Paul Eggert (1996-06-12):
+# 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.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Yukon 1918 only - Apr 14 2:00 1:00 D
-Rule Yukon 1918 only - Oct 27 2:00 0 S
-Rule Yukon 1919 only - May 25 2:00 1:00 D
-Rule Yukon 1919 only - Nov 1 0:00 0 S
-Rule Yukon 1942 only - Feb 9 2:00 1:00 D
-Rule Yukon 1965 only - Apr 25 0:00 1:00 D
-Rule Yukon 1965 only - Oct 31 2:00 0 S
-Rule Yukon 1980 1986 - Apr lastSun 2:00 1:00 D
-Rule Yukon 1980 max - Oct lastSun 2:00 0 S
-Rule Yukon 1987 max - Apr Sun>=1 2:00 1:00 D
+Rule NT_YK 1918 only - Apr 14 2:00 1:00 D
+Rule NT_YK 1918 only - Oct 27 2:00 0 S
+Rule NT_YK 1919 only - May 25 2:00 1:00 D
+Rule NT_YK 1919 only - Nov 1 0:00 0 S
+Rule NT_YK 1942 only - Feb 9 2:00 1:00 D
+Rule NT_YK 1945 only - Sep 30 2:00 0 S
+# 0:00 ??
+Rule NT_YK 1965 only - Apr lastSun 0:00 2:00 DD
+Rule NT_YK 1965 only - Oct lastSun 2:00 0 S
+Rule NT_YK 1980 1986 - Apr lastSun 2:00 1:00 D
+Rule NT_YK 1980 max - Oct lastSun 2:00 0 S
+Rule NT_YK 1987 max - Apr Sun>=1 2:00 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Pangnirtung -4:22:56 - LMT 1884
+ -4:00 NT_YK A%sT
+Zone America/Iqaluit -4:33:52 - LMT 1884 # Frobisher Bay
+ -5:00 NT_YK E%sT
+Zone America/Rankin_Inlet -6:08:40 - LMT 1884
+ -6:00 NT_YK C%sT
+Zone America/Yellowknife -7:37:24 - LMT 1884
+ -7:00 NT_YK M%sT
+Zone America/Inuvik -8:54:00 - LMT 1884
+ -8:00 NT_YK P%sT 1979 Apr lastSun 2:00
+ -7:00 NT_YK M%sT
Zone America/Whitehorse -9:00:12 - LMT 1900 Aug 20
- -9:00 Yukon Y%sT 1966 Jul
- -8:00 Yukon P%sT
-# Parts of Yukon (e.g. Dawson) didn't switch to -8:00 until 1973 Oct 28.
+ -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
+ -8:00 NT_YK P%sT
+
###############################################################################
@@ -868,6 +948,10 @@ Zone America/Whitehorse -9:00:12 - LMT 1900 Aug 20
# The Decree was published in Mexico's Official Newspaper on January 4th.
#
# -------------- End Forwarded Message --------------
+# From Paul Eggert (1996-06-12):
+# For an English translation of the decree,
+# see ``Diario Oficial: Time Zone Changeover'',
+# <URL:http://mexico-travel.com/extra/timezone_eng.html> (1996-01-04).
# From Shanks (1991):
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S