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.

	* stdio-common/tst-ungetc.c: Include unistd.h.
This commit is contained in:
Roland McGrath 1996-07-02 17:43:35 +00:00
parent eb48c9632e
commit ffee131630
18 changed files with 370 additions and 213 deletions

View File

@ -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>

View File

@ -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. */

View File

@ -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;

View File

@ -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. */

View File

@ -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

View File

@ -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;

View File

@ -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"

View File

@ -43,52 +43,53 @@ struct hostent_data
#define TRAILING_LIST_SEPARATOR_P isspace
#include "files-parse.c"
LINE_PARSER
({
char *addr;
("#",
{
char *addr;
STRING_FIELD (addr, isspace, 1);
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;
/* 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;
/* 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);
}
/* 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);
})
STRING_FIELD (result->h_name, isspace, 1);
})
#include "files-XXX.c"

View File

@ -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"

View File

@ -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; \

View File

@ -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,);
)

View File

@ -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"

View File

@ -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,);
)

View File

@ -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);

View File

@ -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. */

View File

@ -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

View File

@ -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

View File

@ -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