From ffee131630368bc2600747346d0b03025cbca6ee Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Tue, 2 Jul 1996 17:43:35 +0000 Subject: [PATCH] Tue Jul 2 10:44:37 1996 Roland McGrath * 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. * stdio-common/tst-ungetc.c: Include unistd.h. --- ChangeLog | 44 +++++++ elf/dl-load.c | 4 +- elf/rtld.c | 18 ++- grp/fgetgrent.c | 4 +- nss/nss_files/files-XXX.c | 2 +- nss/nss_files/files-ethers.c | 3 +- nss/nss_files/files-grp.c | 10 +- nss/nss_files/files-hosts.c | 93 ++++++++------- nss/nss_files/files-network.c | 13 +- nss/nss_files/files-parse.c | 17 +-- nss/nss_files/files-proto.c | 3 +- nss/nss_files/files-pwd.c | 17 +-- nss/nss_files/files-rpc.c | 3 +- nss/nss_files/files-service.c | 3 +- pwd/fgetpwent.c | 4 +- sysdeps/i386/strtok.S | 8 +- time/europe | 77 +++++++++--- time/northamerica | 270 +++++++++++++++++++++++++++--------------- 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 + + * 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 + * stdio-common/tst-ungetc.c: Include unistd.h. + * inet/Makefile (routines): Change getnetbypt to getnetbyad. Mon Jul 1 13:32:42 1996 Miles Bader 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 (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 (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 (November 18, 1993): +# From Paul Eggert (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 -# (see `FP' below), +# (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 (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 (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 (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'', +# (1996-01-04). # From Shanks (1991): # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S -- 2.7.4