summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d>2006-11-13 16:43:45 +0000
committerjoseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d>2006-11-13 16:43:45 +0000
commitf09284a630c837c56a3bdff26ab9ef624aa41f5d (patch)
treeab5ed171550051d3e3ad184e64b73623802259b9
parent38966ef44646e74412b5bf809e3d678074162205 (diff)
Merge changes between r615 and r677 from /fsf/trunk.
git-svn-id: svn://svn.eglibc.org/trunk@678 7b3dc134-2b1b-0410-93df-9e9f96275f8d
-rw-r--r--libc/ChangeLog145
-rw-r--r--libc/elf/cache.c2
-rw-r--r--libc/elf/dl-debug.c2
-rw-r--r--libc/elf/dl-deps.c2
-rw-r--r--libc/elf/dl-load.c31
-rw-r--r--libc/elf/ldconfig.c10
-rw-r--r--libc/include/libc-symbols.h41
-rw-r--r--libc/libio/vswprintf.c2
-rw-r--r--libc/locale/programs/charmap.c6
-rw-r--r--libc/locale/programs/ld-collate.c4
-rw-r--r--libc/locale/programs/ld-ctype.c6
-rw-r--r--libc/locale/programs/ld-monetary.c2
-rw-r--r--libc/locale/programs/ld-numeric.c2
-rw-r--r--libc/locale/programs/ld-time.c4
-rw-r--r--libc/locale/programs/repertoire.c4
-rwxr-xr-xlibc/malloc/memusage.sh2
-rw-r--r--libc/malloc/memusagestat.c4
-rw-r--r--libc/manual/argp.texi2
-rw-r--r--libc/manual/charset.texi6
-rw-r--r--libc/manual/errno.texi4
-rw-r--r--libc/manual/filesys.texi10
-rw-r--r--libc/manual/lang.texi2
-rw-r--r--libc/manual/maint.texi2
-rw-r--r--libc/manual/memory.texi8
-rw-r--r--libc/manual/message.texi4
-rw-r--r--libc/manual/resource.texi10
-rw-r--r--libc/manual/search.texi6
-rw-r--r--libc/manual/signal.texi2
-rw-r--r--libc/manual/startup.texi2
-rw-r--r--libc/manual/stdio.texi4
-rw-r--r--libc/manual/sysinfo.texi2
-rw-r--r--libc/manual/syslog.texi2
-rw-r--r--libc/manual/time.texi8
-rw-r--r--libc/nis/nis_print_group_entry.c2
-rw-r--r--libc/nis/nss_nisplus/nisplus-publickey.c2
-rw-r--r--libc/nscd/cache.c2
-rw-r--r--libc/nscd/selinux.c2
-rw-r--r--libc/po/sv.po20
-rw-r--r--libc/posix/unistd.h2
-rw-r--r--libc/string/Makefile2
-rw-r--r--libc/string/strxfrm_l.c11
-rw-r--r--libc/string/tst-strxfrm2.c83
-rw-r--r--libc/sunrpc/auth_unix.c2
-rw-r--r--libc/sunrpc/clnt_raw.c2
-rw-r--r--libc/sunrpc/pm_getmaps.c2
-rw-r--r--libc/sunrpc/rpc_main.c2
-rw-r--r--libc/sysdeps/gnu/errlist-compat.awk12
-rw-r--r--libc/sysdeps/gnu/siglist.c27
-rw-r--r--libc/sysdeps/i386/fpu/bits/mathinline.h44
-rw-r--r--libc/sysdeps/posix/getaddrinfo.c8
-rw-r--r--libc/sysdeps/unix/sysv/linux/i386/sysconf.c1
-rw-r--r--libc/sysdeps/unix/sysv/linux/x86_64/sysconf.c1
-rw-r--r--libc/time/tzfile.c114
-rw-r--r--libc/timezone/africa73
-rw-r--r--libc/timezone/antarctica32
-rw-r--r--libc/timezone/asia315
-rw-r--r--libc/timezone/australasia52
-rw-r--r--libc/timezone/backward3
-rw-r--r--libc/timezone/checktab.awk2
-rw-r--r--libc/timezone/europe254
-rw-r--r--libc/timezone/ialloc.c7
-rw-r--r--libc/timezone/iso3166.tab12
-rw-r--r--libc/timezone/northamerica614
-rw-r--r--libc/timezone/private.h83
-rw-r--r--libc/timezone/scheck.c7
-rw-r--r--libc/timezone/southamerica193
-rw-r--r--libc/timezone/tzfile.h23
-rw-r--r--libc/timezone/tzselect.ksh2
-rw-r--r--libc/timezone/zdump.c39
-rw-r--r--libc/timezone/zic.c709
-rw-r--r--libc/timezone/zone.tab43
-rw-r--r--ports/ChangeLog.hppa13
-rw-r--r--ports/sysdeps/hppa/nptl/pthread_spin_init.c29
-rw-r--r--ports/sysdeps/hppa/nptl/pthread_spin_unlock.c7
-rw-r--r--ports/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h3
-rw-r--r--ports/sysdeps/unix/sysv/linux/hppa/nptl/sysdep-cancel.h9
76 files changed, 2235 insertions, 973 deletions
diff --git a/libc/ChangeLog b/libc/ChangeLog
index 5a4e984ee..f60d058ae 100644
--- a/libc/ChangeLog
+++ b/libc/ChangeLog
@@ -1,3 +1,148 @@
+2006-11-10 Ulrich Drepper <drepper@redhat.com>
+
+ * timezone/africa: Update from tzdata2006o.
+ * timezone/antarctica: Likewise.
+ * timezone/asia: Likewise.
+ * timezone/australasia: Likewise.
+ * timezone/backward: Likewise.
+ * timezone/europe: Likewise.
+ * timezone/iso3166.tab: Likewise.
+ * timezone/northamerica: Likewise.
+ * timezone/southamerica: Likewise.
+ * timezone/zone.tab: Likewise.
+
+ * time/tzfile.c (__tzfile_read): Extend to handle new file format
+ on machines with 64-bit time_t.
+
+ * timezone/checktab.awk: Update from tzcode2006o.
+ * timezone/ialloc.c: Likewise.
+ * timezone/private.h: Likewise.
+ * timezone/scheck.: Likewise.
+ * timezone/tzfile.h: Likewise.
+ * timezone/tzselect.ksh: Likewise.
+ * timezone/zdump.c: Likewise.
+ * timezone/zic.c: Likewise.
+
+ [BZ #3483]
+ * elf/ldconfig.c (main): Call setlocale and textdomain.
+ Patch mostly by Benno Schulenberg <bensberg@justemail.net>.
+
+ [BZ #3480]
+ * manual/argp.texi: Fix typos.
+ * manual/charset.texi: Likewise.
+ * manual/errno.texi: Likewise.
+ * manual/filesys.texi: Likewise.
+ * manual/lang.texi: Likewise.
+ * manual/maint.texi: Likewise.
+ * manual/memory.texi: Likewise.
+ * manual/message.texi: Likewise.
+ * manual/resource.texi: Likewise.
+ * manual/search.texi: Likewise.
+ * manual/signal.texi: Likewise.
+ * manual/startup.texi: Likewise.
+ * manual/stdio.texi: Likewise.
+ * manual/sysinfo.texi: Likewise.
+ * manual/syslog.texi: Likewise.
+ * manual/time.texi: Likewise.
+ Patch by Ralf Wildenhues <Ralf.Wildenhues@gmx.de>.
+
+ [BZ #3465]
+ * sunrpc/clnt_raw.c: Minimal message improvements.
+ * sunrpc/pm_getmaps.c: Likewise.
+ * nis/nss_nisplus/nisplus-publickey.c: Likewise.
+ * nis/nis_print_group_entry.c: Likewise.
+ * locale/programs/repertoire.c: Likewise.
+ * locale/programs/charmap.c: Likewise.
+ * malloc/memusage.sh: Likewise.
+ * elf/dl-deps.c: Likewise.
+ * locale/programs/ld-collate.c: Likewise.
+ * libio/vswprintf.c: Likewise.
+ * malloc/memusagestat.c: Likewise.
+ * sunrpc/auth_unix.c: Likewise.
+ * sunrpc/rpc_main.c: Likewise.
+ * nscd/cache.c: Likewise.
+ * locale/programs/repertoire.c: Unify output messages.
+ * locale/programs/charmap.c: Likewise.
+ * locale/programs/ld-ctype.c: Likewise.
+ * locale/programs/ld-monetary.c: Likewise.
+ * locale/programs/ld-numeric.c: Likewise.
+ * locale/programs/ld-time.c: Likewise.
+ * elf/ldconfig.c: Likewise.
+ * nscd/selinux.c: Likewise.
+ * elf/cache.c: Likewise.
+ Patch mostly by Benno Schulenberg <bensberg@justemail.net>.
+
+ [BZ #3451]
+ * sysdeps/i386/fpu/bits/mathinline.h (floor): Make rounding mode
+ change atomic.
+ (ceil): Likewise.
+
+2006-11-10 Jakub Jelinek <jakub@redhat.com>
+
+ * string/strxfrm_l.c (STRXFRM): Fix trailing \1 optimization
+ if N is one bigger than return value.
+ * string/tst-strxfrm2.c (do_test): Also test strxfrm with l1 + 1
+ and l1 last arguments, if buf is defined, verify the return value
+ equals to strlen (buf) and verify no byte beyond passed length
+ is modified.
+
+2006-11-10 Ulrich Drepper <drepper@redhat.com>
+
+ * po/sv.po: Update from translation team.
+
+2006-11-09 Ulrich Drepper <drepper@redhat.com>
+
+ * sysdeps/unix/sysv/linux/x86_64/sysconf.c (intel_check_word): Add
+ noinline attribute.
+
+2006-11-10 Jakub Jelinek <jakub@redhat.com>
+
+ * sysdeps/unix/sysv/linux/i386/sysconf.c (intel_check_word): Add
+ noinline attribute.
+
+ * sysdeps/gnu/siglist.c (__old_sys_siglist, __old_sys_sigabbrev):
+ Use __new_sys_siglist instead of _sys_siglist_internal as
+ second macro argument.
+ (_old_sys_siglist): Use declare_symbol_alias macro instead of
+ strong_alias.
+
+2006-11-09 Ulrich Drepper <drepper@redhat.com>
+
+ [BZ #3493]
+ * posix/unistd.h (sysconf): Remove const attribute.
+
+ * sysdeps/posix/getaddrinfo.c (getaddrinfo): Fix test for
+ temporary or deprecated addresses.
+ Patch by Sridhar Samudrala <sri@us.ibm.com>.
+
+ * string/Makefile (tests): Add tst-strxfrm2.
+ * string/tst-strxfrm2.c: New file.
+
+2006-10-09 Jakub Jelinek <jakub@redhat.com>
+
+ * elf/dl-debug.c (_dl_debug_initialize): Check r->r_map for 0
+ rather than r->r_brk.
+
+2006-11-08 Jakub Jelinek <jakub@redhat.com>
+
+ * string/strxfrm_l.c (STRXFRM): Do the trailing \1 removal
+ optimization even if needed > n.
+
+ * elf/dl-load.c (decompose_rpath): Return bool rather than void.
+ If l->l_name is on inhibit_rpath list, set sps->dirs to -1 and
+ return false, otherwise return true.
+ (cache_rpath): Return decompose_rpath return value.
+
+2006-11-07 Jakub Jelinek <jakub@redhat.com>
+
+ * include/libc-symbols.h (declare_symbol): Rename to...
+ (declare_symbol_alias): ... this. Add ORIGINAL argument, imply
+ strong_alias (ORIGINAL, SYMBOL) in asm to make sure it preceedes
+ .size directive.
+ * sysdeps/gnu/errlist-compat.awk: Adjust for declare_symbol_alias
+ changes.
+ * sysdeps/gnu/siglist.c: Likewise.
+
2006-11-03 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/powerpc/fpu/bits/mathinline.h
diff --git a/libc/elf/cache.c b/libc/elf/cache.c
index 6730fb36e..e18446644 100644
--- a/libc/elf/cache.c
+++ b/libc/elf/cache.c
@@ -439,7 +439,7 @@ save_cache (const char *cache_name)
}
if (write (fd, strings, total_strlen) != (ssize_t) total_strlen)
- error (EXIT_FAILURE, errno, _("Writing of cache data failed."));
+ error (EXIT_FAILURE, errno, _("Writing of cache data failed"));
close (fd);
diff --git a/libc/elf/dl-debug.c b/libc/elf/dl-debug.c
index d00fe87fb..2538364ae 100644
--- a/libc/elf/dl-debug.c
+++ b/libc/elf/dl-debug.c
@@ -54,7 +54,7 @@ _dl_debug_initialize (ElfW(Addr) ldbase, Lmid_t ns)
else
r = &GL(dl_ns)[ns]._ns_debug;
- if (r->r_brk == 0 || ldbase != 0)
+ if (r->r_map == NULL || ldbase != 0)
{
/* Tell the debugger where to find the map of loaded objects. */
r->r_version = 1 /* R_DEBUG_VERSION XXX */;
diff --git a/libc/elf/dl-deps.c b/libc/elf/dl-deps.c
index c35cc977f..4ec984e15 100644
--- a/libc/elf/dl-deps.c
+++ b/libc/elf/dl-deps.c
@@ -123,7 +123,7 @@ DST not allowed in SUID/SGID programs")); \
processed. */ \
if (fatal) \
_dl_signal_error (0, __str, NULL, N_("\
-empty dynamics string token substitution")); \
+empty dynamic string token substitution")); \
else \
{ \
/* This is for DT_AUXILIARY. */ \
diff --git a/libc/elf/dl-load.c b/libc/elf/dl-load.c
index ccbbf4fdd..1650ef953 100644
--- a/libc/elf/dl-load.c
+++ b/libc/elf/dl-load.c
@@ -511,7 +511,7 @@ fillin_rpath (char *rpath, struct r_search_path_elem **result, const char *sep,
}
-static void
+static bool
internal_function
decompose_rpath (struct r_search_path_struct *sps,
const char *rpath, struct link_map *l, const char *what)
@@ -546,19 +546,8 @@ decompose_rpath (struct r_search_path_struct *sps,
{
/* This object is on the list of objects for which the
RUNPATH and RPATH must not be used. */
- result = calloc (1, sizeof *result);
- if (result == NULL)
- {
- signal_error_cache:
- errstring = N_("cannot create cache for search path");
- signal_error:
- _dl_signal_error (ENOMEM, NULL, NULL, errstring);
- }
-
- sps->dirs = result;
- sps->malloced = 1;
-
- return;
+ sps->dirs = (void *) -1;
+ return false;
}
while (*inhp != '\0')
@@ -588,7 +577,11 @@ decompose_rpath (struct r_search_path_struct *sps,
result = (struct r_search_path_elem **) malloc ((nelems + 1 + 1)
* sizeof (*result));
if (result == NULL)
- goto signal_error_cache;
+ {
+ errstring = N_("cannot create cache for search path");
+ signal_error:
+ _dl_signal_error (ENOMEM, NULL, NULL, errstring);
+ }
fillin_rpath (copy, result, ":", 0, what, where);
@@ -599,6 +592,7 @@ decompose_rpath (struct r_search_path_struct *sps,
sps->dirs = result;
/* The caller will change this value if we haven't used a real malloc. */
sps->malloced = 1;
+ return true;
}
/* Make sure cached path information is stored in *SP
@@ -623,10 +617,9 @@ cache_rpath (struct link_map *l,
}
/* Make sure the cache information is available. */
- decompose_rpath (sp, (const char *) (D_PTR (l, l_info[DT_STRTAB])
- + l->l_info[tag]->d_un.d_val),
- l, what);
- return true;
+ return decompose_rpath (sp, (const char *) (D_PTR (l, l_info[DT_STRTAB])
+ + l->l_info[tag]->d_un.d_val),
+ l, what);
}
diff --git a/libc/elf/ldconfig.c b/libc/elf/ldconfig.c
index b14696d49..40f445670 100644
--- a/libc/elf/ldconfig.c
+++ b/libc/elf/ldconfig.c
@@ -24,6 +24,7 @@
#include <errno.h>
#include <inttypes.h>
#include <libintl.h>
+#include <locale.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdio_ext.h>
@@ -558,7 +559,7 @@ manual_link (char *library)
/* Do some sanity checks first. */
if (lstat64 (real_library, &stat_buf))
{
- error (0, errno, _("Can't lstat %s"), library);
+ error (0, errno, _("Cannot lstat %s"), library);
free (path);
return;
}
@@ -1166,9 +1167,14 @@ set_hwcap (void)
int
main (int argc, char **argv)
{
- int remaining;
+ /* Set locale via LC_ALL. */
+ setlocale (LC_ALL, "");
+
+ /* Set the text message domain. */
+ textdomain (_libc_intl_domainname);
/* Parse and process arguments. */
+ int remaining;
argp_parse (&argp, argc, argv, 0, &remaining, NULL);
/* Remaining arguments are additional directories if opt_manual_link
diff --git a/libc/include/libc-symbols.h b/libc/include/libc-symbols.h
index 9eabcbd35..a2faeafb3 100644
--- a/libc/include/libc-symbols.h
+++ b/libc/include/libc-symbols.h
@@ -294,27 +294,42 @@ requires at runtime the shared libraries from the glibc version used \
for linking")
#endif
-/* Declare SYMBOL to be TYPE (`function' or `object') and of SIZE bytes,
- when the assembler supports such declarations (such as in ELF).
+/* Declare SYMBOL to be TYPE (`function' or `object') of SIZE bytes
+ alias to ORIGINAL, when the assembler supports such declarations
+ (such as in ELF).
This is only necessary when defining something in assembly, or playing
funny alias games where the size should be other than what the compiler
thinks it is. */
-#define declare_symbol(symbol, type, size) \
- declare_symbol_1 (symbol, type, size)
+#define declare_symbol_alias(symbol, original, type, size) \
+ declare_symbol_alias_1 (symbol, original, type, size)
#ifdef ASM_TYPE_DIRECTIVE_PREFIX
# ifdef __ASSEMBLER__
-# define declare_symbol_1(symbol, type, size) \
+# define declare_symbol_alias_1(symbol, original, type, size) \
+ strong_alias (original, symbol); \
.type C_SYMBOL_NAME (symbol), \
- declare_symbol_1_paste (ASM_TYPE_DIRECTIVE_PREFIX, type), size
-# define declare_symbol_1_paste(a, b) declare_symbol_1_paste_1 (a,b)
-# define declare_symbol_1_paste_1(a,b) a##b
+ declare_symbol_alias_1_paste (ASM_TYPE_DIRECTIVE_PREFIX, type); \
+ .size C_SYMBOL_NAME (symbol), size
+# define declare_symbol_alias_1_paste(a, b) \
+ declare_symbol_alias_1_paste_1 (a,b)
+# define declare_symbol_alias_1_paste_1(a,b) a##b
# else /* Not __ASSEMBLER__. */
-# define declare_symbol_1(symbol, type, size) \
- asm (".type " __SYMBOL_PREFIX #symbol ", " \
- declare_symbol_1_stringify (ASM_TYPE_DIRECTIVE_PREFIX) #type \
+# define declare_symbol_alias_1(symbol, original, type, size) \
+ asm (declare_symbol_alias_1_stringify (ASM_GLOBAL_DIRECTIVE) \
+ " " __SYMBOL_PREFIX #symbol \
+ "\n\t" declare_symbol_alias_1_alias (symbol, original) \
+ "\n\t.type " __SYMBOL_PREFIX #symbol ", " \
+ declare_symbol_alias_1_stringify (ASM_TYPE_DIRECTIVE_PREFIX) #type \
"\n\t.size " __SYMBOL_PREFIX #symbol ", " #size);
-# define declare_symbol_1_stringify(x) declare_symbol_1_stringify_1 (x)
-# define declare_symbol_1_stringify_1(x) #x
+# define declare_symbol_alias_1_stringify(x) \
+ declare_symbol_alias_1_stringify_1 (x)
+# define declare_symbol_alias_1_stringify_1(x) #x
+# ifdef HAVE_ASM_SET_DIRECTIVE
+# define declare_symbol_alias_1_alias(symbol, original) \
+ ".set " __SYMBOL_PREFIX #symbol ", " __SYMBOL_PREFIX #original
+# else
+# define declare_symbol_alias_1_alias(symbol, original) \
+ __SYMBOL_PREFIX #symbol " = " __SYMBOL_PREFIX #original
+# endif /* HAVE_ASM_SET_DIRECTIVE */
# endif /* __ASSEMBLER__ */
#else
# define declare_symbol_1(symbol, type, size) /* Nothing. */
diff --git a/libc/libio/vswprintf.c b/libc/libio/vswprintf.c
index 5bbd20227..e9a316a01 100644
--- a/libc/libio/vswprintf.c
+++ b/libc/libio/vswprintf.c
@@ -119,7 +119,7 @@ _IO_vswprintf (string, maxlen, format, args)
if (sf.f._sbf._f._wide_data->_IO_buf_base == sf.overflow_buf)
/* ISO C99 requires swprintf/vswprintf to return an error if the
- output does not fit int he provided buffer. */
+ output does not fit in the provided buffer. */
return -1;
/* Terminate the string. */
diff --git a/libc/locale/programs/charmap.c b/libc/locale/programs/charmap.c
index 52a69de4b..dbc1101fd 100644
--- a/libc/locale/programs/charmap.c
+++ b/libc/locale/programs/charmap.c
@@ -607,7 +607,7 @@ character sets with locking states are not supported"));
case 90:
if (nowtok != expected_tok)
lr_error (cmfile, _("\
-`%1$s' definition does not end with `END %1$s'"), expected_str);
+%1$s: definition does not end with `END %1$s'"), expected_str);
lr_ignore_rest (cmfile, nowtok == expected_tok);
state = 91;
@@ -1019,13 +1019,13 @@ hexadecimal range format should use only capital characters"));
&& errno == ERANGE)
|| *to_end != '\0')
{
- lr_error (lr, _("<%s> and <%s> are illegal names for range"), from, to);
+ lr_error (lr, _("<%s> and <%s> are invalid names for range"), from, to);
return;
}
if (from_nr > to_nr)
{
- lr_error (lr, _("upper limit in range is not higher then lower limit"));
+ lr_error (lr, _("upper limit in range is smaller than lower limit"));
return;
}
diff --git a/libc/locale/programs/ld-collate.c b/libc/locale/programs/ld-collate.c
index 3327cee0f..7fbe7fc61 100644
--- a/libc/locale/programs/ld-collate.c
+++ b/libc/locale/programs/ld-collate.c
@@ -1153,7 +1153,7 @@ handle_ellipsis (struct linereader *ldfile, const char *symstr, size_t symlen,
{
if (ret > 0)
lr_error (ldfile, _("%s: byte sequence of first character of \
-sequence is not lower than that of the last character"), "LC_COLLATE");
+range is not lower than that of the last character"), "LC_COLLATE");
return;
}
@@ -1172,7 +1172,7 @@ sequence is not lower than that of the last character"), "LC_COLLATE");
size_t namelen;
void *ptr;
- /* I don't this this can ever happen. */
+ /* I don't think this can ever happen. */
assert (seq->name != NULL);
namelen = strlen (seq->name);
diff --git a/libc/locale/programs/ld-ctype.c b/libc/locale/programs/ld-ctype.c
index 0b4c6fc3a..f5a28fc02 100644
--- a/libc/locale/programs/ld-ctype.c
+++ b/libc/locale/programs/ld-ctype.c
@@ -2940,7 +2940,7 @@ set_class_defaults (struct locale_ctype_t *ctype,
{
if (!be_quiet)
WITH_CUR_LOCALE (error (0, 0, _("\
-%s: character `%s' not defined in charmap while needed as default value"),
+%s: character `%s' not defined while needed as default value"),
"LC_CTYPE", tmp));
}
else if (seq->nbytes != 1)
@@ -3065,8 +3065,8 @@ set_class_defaults (struct locale_ctype_t *ctype,
{
if (!be_quiet)
WITH_CUR_LOCALE (error (0, 0, _("\
-character `%s' not defined while needed as default value"),
- "<newline>"));
+%s: character `%s' not defined while needed as default value"),
+ "LC_CTYPE", "<newline>"));
}
else if (seq->nbytes != 1)
WITH_CUR_LOCALE (error (0, 0, _("\
diff --git a/libc/locale/programs/ld-monetary.c b/libc/locale/programs/ld-monetary.c
index 0bc16c7a4..11409f090 100644
--- a/libc/locale/programs/ld-monetary.c
+++ b/libc/locale/programs/ld-monetary.c
@@ -252,7 +252,7 @@ not correspond to a valid name in ISO 4217"),
else if (monetary->mon_decimal_point[0] == '\0' && ! be_quiet && ! nothing)
{
WITH_CUR_LOCALE (error (0, 0, _("\
-%s: value for field `%s' must not be the empty string"),
+%s: value for field `%s' must not be an empty string"),
"LC_MONETARY", "mon_decimal_point"));
}
if (monetary->mon_decimal_point_wc == L'\0')
diff --git a/libc/locale/programs/ld-numeric.c b/libc/locale/programs/ld-numeric.c
index a5390cb3e..af255a836 100644
--- a/libc/locale/programs/ld-numeric.c
+++ b/libc/locale/programs/ld-numeric.c
@@ -115,7 +115,7 @@ No definition for %s category found"), "LC_NUMERIC"));
else if (numeric->decimal_point[0] == '\0' && ! be_quiet && ! nothing)
{
WITH_CUR_LOCALE (error (0, 0, _("\
-%s: value for field `%s' must not be the empty string"),
+%s: value for field `%s' must not be an empty string"),
"LC_NUMERIC", "decimal_point"));
}
if (numeric->decimal_point_wc == L'\0')
diff --git a/libc/locale/programs/ld-time.c b/libc/locale/programs/ld-time.c
index 93a6386ad..d6a1c6db1 100644
--- a/libc/locale/programs/ld-time.c
+++ b/libc/locale/programs/ld-time.c
@@ -504,7 +504,7 @@ No definition for %s category found"), "LC_TIME"));
time->first_weekday = 1;
else if (time->first_weekday > time->week_ndays)
WITH_CUR_LOCALE (error (0, 0, _("\
-%s: values of field `%s' must not be larger than %d"),
+%s: values for field `%s' must not be larger than %d"),
"LC_TIME", "first_weekday", 7));
if (time->first_workday == '\0')
@@ -512,7 +512,7 @@ No definition for %s category found"), "LC_TIME"));
time->first_workday = 1;
else if (time->first_workday > time->week_ndays)
WITH_CUR_LOCALE (error (0, 0, _("\
-%s: values of field `%s' must not be larger than %d"),
+%s: values for field `%s' must not be larger than %d"),
"LC_TIME", "first_workday", 7));
if (time->cal_direction == '\0')
diff --git a/libc/locale/programs/repertoire.c b/libc/locale/programs/repertoire.c
index e9bdf9e7b..b6c0a6ad5 100644
--- a/libc/locale/programs/repertoire.c
+++ b/libc/locale/programs/repertoire.c
@@ -311,7 +311,7 @@ argument to <%s> must be a single character"),
case 90:
if (nowtok != tok_charids)
lr_error (repfile, _("\
-`%1$s' definition does not end with `END %1$s'"), "CHARIDS");
+%1$s: definition does not end with `END %1$s'"), "CHARIDS");
lr_ignore_rest (repfile, nowtok == tok_charids);
break;
@@ -453,7 +453,7 @@ hexadecimal range format should use only capital characters"));
if (from_nr > to_nr)
{
- lr_error (lr, _("upper limit in range is not smaller then lower limit"));
+ lr_error (lr, _("upper limit in range is smaller than lower limit"));
return;
}
diff --git a/libc/malloc/memusage.sh b/libc/malloc/memusage.sh
index ecc935d03..ad833523f 100755
--- a/libc/malloc/memusage.sh
+++ b/libc/malloc/memusage.sh
@@ -44,7 +44,7 @@ Profile memory usage of PROGRAM.
-d,--data=FILE Generate binary data file and store it in FILE
-u,--unbuffered Don't buffer output
-b,--buffer=SIZE Collect SIZE entries before writing them out
- --no-timer Don't collect additional information though timer
+ --no-timer Don't collect additional information through timer
-m,--mmap Also trace mmap & friends
-?,--help Print this help and exit
diff --git a/libc/malloc/memusagestat.c b/libc/malloc/memusagestat.c
index 5d35ee023..d8fc71b72 100644
--- a/libc/malloc/memusagestat.c
+++ b/libc/malloc/memusagestat.c
@@ -55,8 +55,8 @@ static const struct argp_option options[] =
{ "time", 't', NULL, 0, N_("Generate output linear to time (default is linear to number of function calls)") },
{ "total", 'T', NULL, 0,
N_("Also draw graph for total memory consumption") },
- { "x-size", 'x', "VALUE", 0, N_("make output graphic VALUE pixel wide") },
- { "y-size", 'y', "VALUE", 0, N_("make output graphic VALUE pixel high") },
+ { "x-size", 'x', "VALUE", 0, N_("Make output graphic VALUE pixels wide") },
+ { "y-size", 'y', "VALUE", 0, N_("Make output graphic VALUE pixels high") },
{ NULL, 0, NULL, 0, NULL }
};
diff --git a/libc/manual/argp.texi b/libc/manual/argp.texi
index 090d49f7a..b37232306 100644
--- a/libc/manual/argp.texi
+++ b/libc/manual/argp.texi
@@ -832,7 +832,7 @@ Don't exit on errors, although they may still result in error messages.
@item ARGP_LONG_ONLY
Use the gnu getopt `long-only' rules for parsing arguments. This allows
long-options to be recognized with only a single @samp{-}
-(i.e. @samp{-help}). This results in a less useful interface, and its
+(i.e., @samp{-help}). This results in a less useful interface, and its
use is discouraged as it conflicts with the way most GNU programs work
as well as the GNU coding standards.
diff --git a/libc/manual/charset.texi b/libc/manual/charset.texi
index 5063246d6..8b2c09ca7 100644
--- a/libc/manual/charset.texi
+++ b/libc/manual/charset.texi
@@ -207,7 +207,7 @@ and transmittal. Because each single wide character consists of more
than one byte, they are effected by byte-ordering. Thus, machines with
different endianesses would see different values when accessing the same
data. This byte ordering concern also applies for communication protocols
-that are all byte-based and, thereforet require that the sender has to
+that are all byte-based and therefore require that the sender has to
decide about splitting the wide character in bytes. A last (but not least
important) point is that wide characters often require more storage space
than a customized byte-oriented character set.
@@ -737,7 +737,7 @@ the return value is @math{0}. If the next @var{n} bytes form a valid
multibyte character, the number of bytes belonging to this multibyte
character byte sequence is returned.
-If the the first @var{n} bytes possibly form a valid multibyte
+If the first @var{n} bytes possibly form a valid multibyte
character but the character is incomplete, the return value is
@code{(size_t) -2}. Otherwise the multibyte character sequence is invalid
and the return value is @code{(size_t) -1}.
@@ -2231,7 +2231,7 @@ ordering of the processor (or at least the running process) is not the
same as the one required for UCS-4. This is done for performance reasons
as one does not want to perform unnecessary byte-swapping operations if
one is not interested in actually seeing the result in UCS-4. To avoid
-trouble with endianess, the internal representation consistently is named
+trouble with endianness, the internal representation consistently is named
@code{INTERNAL} even on big-endian systems where the representations are
identical.
diff --git a/libc/manual/errno.texi b/libc/manual/errno.texi
index 4df47008c..7f96130ba 100644
--- a/libc/manual/errno.texi
+++ b/libc/manual/errno.texi
@@ -1434,7 +1434,7 @@ like those given to the @code{printf} family of functions. The
arguments required for the format can follow the @var{format} parameter.
Just like @code{perror}, @code{error} also can report an error code in
textual form. But unlike @code{perror} the error value is explicitly
-passed to the function in the @var{errnum} parameter. This elimintates
+passed to the function in the @var{errnum} parameter. This eliminates
the problem mentioned above that the error reporting function must be
called immediately after the function causing the error since otherwise
@code{errno} might have a different value.
@@ -1479,7 +1479,7 @@ in an input file (like a programming language source code file etc).
If the global variable @code{error_one_per_line} is set to a non-zero
value @code{error_at_line} will avoid printing consecutive messages for
-the same file anem line. Repetition which are not directly following
+the same file and line. Repetition which are not directly following
each other are not caught.
Just like @code{error} this function only returned if @var{status} is
diff --git a/libc/manual/filesys.texi b/libc/manual/filesys.texi
index 2436f22e8..9719d4194 100644
--- a/libc/manual/filesys.texi
+++ b/libc/manual/filesys.texi
@@ -131,7 +131,7 @@ this function is deprecated.
@comment GNU
@deftypefun {char *} get_current_dir_name (void)
@vindex PWD
-This @code{get_current_dir_name} function is bascially equivalent to
+This @code{get_current_dir_name} function is basically equivalent to
@w{@code{getcwd (NULL, 0)}}. The only difference is that the value of
the @code{PWD} variable is returned if this value is correct. This is a
subtle difference which is visible if the path described by the
@@ -917,7 +917,7 @@ function returns a value other than @math{0} this value is returned as
the return value of @code{ftw}.
When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
-32-bit system this function is in fact @code{ftw64}, i.e. the LFS
+32-bit system this function is in fact @code{ftw64}, i.e., the LFS
interface transparently replaces the old interface.
@end deftypefun
@@ -990,7 +990,7 @@ accordingly. If the return value of a callback invocation was non-zero
then that value is returned.
When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
-32-bit system this function is in fact @code{nftw64}, i.e. the LFS
+32-bit system this function is in fact @code{nftw64}, i.e., the LFS
interface transparently replaces the old interface.
@end deftypefun
@@ -1434,7 +1434,7 @@ the existing directory named @var{newname} is deleted first. The name
One useful feature of @code{rename} is that the meaning of @var{newname}
changes ``atomically'' from any previously existing file by that name to
-its new meaning (i.e. the file that was called @var{oldname}). There is
+its new meaning (i.e., the file that was called @var{oldname}). There is
no instant at which @var{newname} is non-existent ``in between'' the old
meaning and the new meaning. If there is a system crash during the
operation, it is possible for both names to still exist; but
@@ -3104,7 +3104,7 @@ terminates abnormally).
This function is reentrant.
When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
-32-bit system this function is in fact @code{tmpfile64}, i.e. the LFS
+32-bit system this function is in fact @code{tmpfile64}, i.e., the LFS
interface transparently replaces the old interface.
@end deftypefun
diff --git a/libc/manual/lang.texi b/libc/manual/lang.texi
index 96f6d9df5..82c5e962a 100644
--- a/libc/manual/lang.texi
+++ b/libc/manual/lang.texi
@@ -1274,7 +1274,7 @@ type of a particular structure member.
@comment ISO
@deftypefn {Macro} size_t offsetof (@var{type}, @var{member})
This expands to a integer constant expression that is the offset of the
-structure member named @var{member} in a the structure type @var{type}.
+structure member named @var{member} in the structure type @var{type}.
For example, @code{offsetof (struct s, elem)} is the offset, in bytes,
of the member @code{elem} in a @code{struct s}.
diff --git a/libc/manual/maint.texi b/libc/manual/maint.texi
index 2b9221233..567db981a 100644
--- a/libc/manual/maint.texi
+++ b/libc/manual/maint.texi
@@ -156,7 +156,7 @@ subdirectories under it intended to be new specific categories.
to look for a system-dependent version of a file that's not in
@file{generic}. This means that any system-dependent source file must
have an analogue in @file{generic}, even if the routines defined by that
-file are not implemented on other platforms. Second. the @file{generic}
+file are not implemented on other platforms. Second, the @file{generic}
version of a system-dependent file is used if the makefiles do not find
a version specific to the system you're compiling for.
diff --git a/libc/manual/memory.texi b/libc/manual/memory.texi
index 91b9d84eb..cbe147b71 100644
--- a/libc/manual/memory.texi
+++ b/libc/manual/memory.texi
@@ -31,7 +31,7 @@ One of the most basic resources a process has available to it is memory.
There are a lot of different ways systems organize memory, but in a
typical one, each process has one linear virtual address space, with
addresses running from zero to some huge maximum. It need not be
-contiguous; i.e. not all of these addresses actually can be used to
+contiguous; i.e., not all of these addresses actually can be used to
store data.
The virtual memory is divided into pages (4 kilobytes is typical).
@@ -1065,7 +1065,7 @@ This is the total size of memory occupied by free (not in use) chunks.
@item int keepcost
This is the size of the top-most releasable chunk that normally
-borders the end of the heap (i.e. the high end of the virtual address
+borders the end of the heap (i.e., the high end of the virtual address
space's data segment).
@end table
@@ -2407,7 +2407,7 @@ of the data segment is.
@cindex paging
You can tell the system to associate a particular virtual memory page
-with a real page frame and keep it that way --- i.e. cause the page to
+with a real page frame and keep it that way --- i.e., cause the page to
be paged in if it isn't already and mark it so it will never be paged
out and consequently will never cause a page fault. This is called
@dfn{locking} a page.
@@ -2467,7 +2467,7 @@ A memory lock is associated with a virtual page, not a real frame. The
paging rule is: If a frame backs at least one locked page, don't page it
out.
-Memory locks do not stack. I.e. you can't lock a particular page twice
+Memory locks do not stack. I.e., you can't lock a particular page twice
so that it has to be unlocked twice before it is truly unlocked. It is
either locked or it isn't.
diff --git a/libc/manual/message.texi b/libc/manual/message.texi
index 1507a6d04..e772b2de1 100644
--- a/libc/manual/message.texi
+++ b/libc/manual/message.texi
@@ -1810,8 +1810,8 @@ help to understand the input better.
Other programs help to manage development cycle when new messages appear
in the source files or when a new translation of the messages appear.
-here it should only be noted that using all the tools in GNU gettext it
-is possible to @emph{completely} automize the handling of message
+Here it should only be noted that using all the tools in GNU gettext it
+is possible to @emph{completely} automate the handling of message
catalog. Beside marking the translatable string in the source code and
generating the translations the developers do not have anything to do
themselves.
diff --git a/libc/manual/resource.texi b/libc/manual/resource.texi
index df77408e6..aabd28976 100644
--- a/libc/manual/resource.texi
+++ b/libc/manual/resource.texi
@@ -584,7 +584,7 @@ to}, but doesn't @emph{need to} run occupies the CPU.
@cindex preemptive scheduling
When two processes are in contention to use the CPU at any instant, the
one with the higher absolute priority always gets it. This is true even if the
-process with the lower priority is already using the CPU (i.e. the
+process with the lower priority is already using the CPU (i.e., the
scheduling is preemptive). Of course, we're only talking about
processes that are running or ``ready to run,'' which means they are
ready to execute instructions right now. When a process blocks to wait
@@ -819,7 +819,7 @@ existing policy is not @code{SCHED_OTHER}.
@item
The calling process does not have @code{CAP_SYS_NICE} permission and its
-owner is not the target process' owner. I.e. the effective uid of the
+owner is not the target process' owner. I.e., the effective uid of the
calling process is neither the effective nor the real uid of process
@var{pid}.
@c We need a cross reference to the capabilities section, when written.
@@ -1185,7 +1185,7 @@ The value of @var{class} is not valid.
@item EPERM
The call would set the nice value of a process which is owned by a different
-user than the calling process (i.e. the target process' real or effective
+user than the calling process (i.e., the target process' real or effective
uid does not match the calling process' effective uid) and the calling
process does not have @code{CAP_SYS_NICE} permission.
@@ -1215,7 +1215,7 @@ a process group ID (pgid).
@comment sys/resource.h
@comment BSD
@item PRIO_USER
-All the processes owned by a particular user (i.e. whose real uid
+All the processes owned by a particular user (i.e., whose real uid
indicates the user). The argument @var{id} is a user ID (uid).
@end vtable
@@ -1272,7 +1272,7 @@ other process or thread is allowed to use.
@item
The access to certain resources (RAM, I/O ports) has different costs
from different CPUs. This is the case in NUMA (Non-Uniform Memory
-Architecture) machines. Preferrably memory should be accessed locally
+Architecture) machines. Preferably memory should be accessed locally
but this requirement is usually not visible to the scheduler.
Therefore forcing a process or thread to the CPUs which have local
access to the mostly used memory helps to significantly boost the
diff --git a/libc/manual/search.texi b/libc/manual/search.texi
index b98fca9b3..0afd0aecd 100644
--- a/libc/manual/search.texi
+++ b/libc/manual/search.texi
@@ -368,9 +368,9 @@ necessary for the @code{struct hsearch_data} object can be allocated
dynamically. It must be initialized with zero before calling this
function.
-The return value is non-zero if the operation were successful. if the
-return value is zero something went wrong which probably means the
-programs runs out of memory.
+The return value is non-zero if the operation was successful. If the
+return value is zero, something went wrong, which probably means the
+programs ran out of memory.
@end deftypefun
@comment search.h
diff --git a/libc/manual/signal.texi b/libc/manual/signal.texi
index cbf746639..dfaaa8895 100644
--- a/libc/manual/signal.texi
+++ b/libc/manual/signal.texi
@@ -2567,7 +2567,7 @@ The prototype for the @code{sigprocmask} function is in @file{signal.h}.
Note that you must not use @code{sigprocmask} in multi-threaded processes,
because each thread has its own signal mask and there is no single process
signal mask. According to POSIX, the behavior of @code{sigprocmask} in a
-multi-threaded process is ``unspeficied''.
+multi-threaded process is ``unspecified''.
Instead, use @code{pthread_sigmask}.
@ifset linuxthreads
@xref{Threads and Signal Handling}.
diff --git a/libc/manual/startup.texi b/libc/manual/startup.texi
index 5ccb78b95..79c79683f 100644
--- a/libc/manual/startup.texi
+++ b/libc/manual/startup.texi
@@ -830,7 +830,7 @@ mean that there was difficulty in opening the files.
Don't confuse a program's exit status with a process' termination status.
There are lots of ways a process can terminate besides having it's program
finish. In the event that the process termination @emph{is} caused by program
-termination (i.e. @code{exit}), though, the program's exit status becomes
+termination (i.e., @code{exit}), though, the program's exit status becomes
part of the process' termination status.
@node Cleanups on Exit
diff --git a/libc/manual/stdio.texi b/libc/manual/stdio.texi
index 977989d95..30a6e6ebe 100644
--- a/libc/manual/stdio.texi
+++ b/libc/manual/stdio.texi
@@ -433,7 +433,7 @@ see @ref{Stream Buffering}.
@cindex multi-threaded application
Streams can be used in multi-threaded applications in the same way they
are used in single-threaded applications. But the programmer must be
-aware of a the possible complications. It is important to know about
+aware of the possible complications. It is important to know about
these also if the program one writes never use threads since the design
and implementation of many stream functions is heavily influenced by the
requirements added by multi-threaded programming.
@@ -1992,7 +1992,7 @@ the precision. The exponent always contains at least two digits. The
The @samp{%g} and @samp{%G} conversions print the argument in the style
of @samp{%e} or @samp{%E} (respectively) if the exponent would be less
than -4 or greater than or equal to the precision; otherwise they use
-the @samp{%f} style. A precision of @code{0}, is taken as 1. is
+the @samp{%f} style. A precision of @code{0}, is taken as 1.
Trailing zeros are removed from the fractional portion of the result and
a decimal-point character appears only if it is followed by a digit.
diff --git a/libc/manual/sysinfo.texi b/libc/manual/sysinfo.texi
index 468de76cc..293e4181d 100644
--- a/libc/manual/sysinfo.texi
+++ b/libc/manual/sysinfo.texi
@@ -872,7 +872,7 @@ shall be accessible while the filesystem is mounted.
@item MS_SYNCHRONOUS
This bit on specifies that all writes to the filesystem while it is
-mounted shall be synchronous; i.e. data shall be synced before each
+mounted shall be synchronous; i.e., data shall be synced before each
write completes rather than held in the buffer cache.
@item MS_MANDLOCK
diff --git a/libc/manual/syslog.texi b/libc/manual/syslog.texi
index df4179e27..3d7def83f 100644
--- a/libc/manual/syslog.texi
+++ b/libc/manual/syslog.texi
@@ -370,7 +370,7 @@ The message is only for debugging purposes.
Results are undefined if the priority code is anything else.
-If the process does not presently have a Syslog connection open (i.e.
+If the process does not presently have a Syslog connection open (i.e.,
it did not call @code{openlog}), @code{syslog} implicitly opens the
connection the same as @code{openlog} would, with the following defaults
for information that would otherwise be included in an @code{openlog}
diff --git a/libc/manual/time.texi b/libc/manual/time.texi
index 9b87d3eed..a3e8438bc 100644
--- a/libc/manual/time.texi
+++ b/libc/manual/time.texi
@@ -193,7 +193,7 @@ total amount of time a process has actively used a CPU since some
arbitrary event. On the GNU system, that event is the creation of the
process. While arbitrary in general, the event is always the same event
for any particular process, so you can always measure how much time on
-the CPU a particular computation takes by examinining the process' CPU
+the CPU a particular computation takes by examining the process' CPU
time before and after the computation.
@cindex CPU time
@cindex clock ticks
@@ -447,7 +447,7 @@ current calendar time is not available, the value
@comment time.h
@comment SVID, XPG
@deftypefun int stime (time_t *@var{newtime})
-@code{stime} sets the system clock, i.e. it tells the system that the
+@code{stime} sets the system clock, i.e., it tells the system that the
current calendar time is @var{newtime}, where @code{newtime} is
interpreted as described in the above definition of @code{time_t}.
@@ -1470,7 +1470,7 @@ widely available.
@node Low-Level Time String Parsing
@subsubsection Interpret string according to given format
-he first function is rather low-level. It is nevertheless frequently
+The first function is rather low-level. It is nevertheless frequently
used in software since it is better known. Its interface and
implementation are heavily influenced by the @code{getdate} function,
which is defined and implemented in terms of calls to @code{strptime}.
@@ -1790,7 +1790,7 @@ process. If the input string contains more characters than required by
the format string the return value points right after the last consumed
input character. If the whole input string is consumed the return value
points to the @code{NULL} byte at the end of the string. If an error
-occurs, i.e. @code{strptime} fails to match all of the format string,
+occurs, i.e., @code{strptime} fails to match all of the format string,
the function returns @code{NULL}.
@end deftypefun
diff --git a/libc/nis/nis_print_group_entry.c b/libc/nis/nis_print_group_entry.c
index 91e6399b9..11680ae7d 100644
--- a/libc/nis/nis_print_group_entry.c
+++ b/libc/nis/nis_print_group_entry.c
@@ -162,7 +162,7 @@ nis_print_group_entry (const_nis_name group)
fputs (_(" No implicit nonmembers\n"), stdout);
if (nomem_rec_cnt)
{
- fputs (_(" Explicit nonmembers:\n"), stdout);
+ fputs (_(" Recursive nonmembers:\n"), stdout);
for (i = 0; i < nomem_rec_cnt; ++i)
printf ("\t%s=n", &nomem_rec[i][2]);
}
diff --git a/libc/nis/nss_nisplus/nisplus-publickey.c b/libc/nis/nss_nisplus/nisplus-publickey.c
index f6b32f882..14e7d41db 100644
--- a/libc/nis/nss_nisplus/nisplus-publickey.c
+++ b/libc/nis/nss_nisplus/nisplus-publickey.c
@@ -217,7 +217,7 @@ parse_grp_str (const char *s, gid_t *gidp, int *gidlenp, gid_t *gidlist,
if (!s || (!isdigit (*s)))
{
- syslog (LOG_ERR, _("netname2user: missing group id list in `%s'."), s);
+ syslog (LOG_ERR, _("netname2user: missing group id list in `%s'"), s);
return NSS_STATUS_NOTFOUND;
}
diff --git a/libc/nscd/cache.c b/libc/nscd/cache.c
index be9be2aa4..ef986f374 100644
--- a/libc/nscd/cache.c
+++ b/libc/nscd/cache.c
@@ -125,7 +125,7 @@ cache_add (int type, const void *key, size_t len, struct datahead *packet,
dbg_log (_("add new entry \"%s\" of type %s for %s to cache%s"),
str, serv2str[type], dbnames[table - dbs],
- first ? " (first)" : "");
+ first ? _(" (first)") : "");
}
unsigned long int hash = __nis_hash (key, len) % table->head->module;
diff --git a/libc/nscd/selinux.c b/libc/nscd/selinux.c
index f123d68b9..f0620d101 100644
--- a/libc/nscd/selinux.c
+++ b/libc/nscd/selinux.c
@@ -202,7 +202,7 @@ preserve_capabilities (void)
if (__builtin_expect (res != 0, 0))
{
cap_free (new_caps);
- dbg_log (_("Failed to drop capabilities\n"));
+ dbg_log (_("Failed to drop capabilities"));
error (EXIT_FAILURE, 0, _("cap_set_proc failed"));
}
diff --git a/libc/po/sv.po b/libc/po/sv.po
index 37a6af79b..6aeb308fe 100644
--- a/libc/po/sv.po
+++ b/libc/po/sv.po
@@ -1,13 +1,13 @@
# GNU libc message catalog for swedish
# Copyright © 1996, 1998, 2001, 2002, 2003, 2006 Free Software Foundation, Inc.
# Jan Djärv <jan.h.d@swipnet.se>, 1996, 1998, 2001, 2002, 2003, 2006.
-# Revision: 1.51
+# Revision: 1.52
#
msgid ""
msgstr ""
"Project-Id-Version: libc 2.5\n"
"POT-Creation-Date: 2006-09-29 11:38-0700\n"
-"PO-Revision-Date: 2006-11-01 08:40+0100\n"
+"PO-Revision-Date: 2006-11-09 13:51+0100\n"
"Last-Translator: Jan Djärv <jan.h.d@swipnet.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"MIME-Version: 1.0\n"
@@ -141,6 +141,7 @@ msgid ""
msgstr ""
"För felrapporteringsinstruktioner, se:\n"
"<http://www.gnu.org/software/libc/bugs.html>.\n"
+"Rapportera fel eller synpunkter på översättningen till <tp-sv@listor.tp-sv.se>.\n"
#: catgets/gencat.c:245 debug/xtrace.sh:64 elf/ldconfig.c:285
#: elf/ldd.bash.in:39 elf/sprof.c:355 iconv/iconv_prog.c:425
@@ -946,7 +947,8 @@ msgstr ""
" -u, --unused skriv ut oanvända direkta beroenden\n"
" -v, --verbose skriv all information\n"
"För felrapporteringsinstruktioner, se:\n"
-"<http://www.gnu.org/software/libc/bugs.html>."
+"<http://www.gnu.org/software/libc/bugs.html>.\n"
+"Rapportera fel eller synpunkter på översättningen till <tp-sv@listor.tp-sv.se>."
#: elf/ldd.bash.in:80
msgid "ldd: option `$1' is ambiguous"
@@ -1048,7 +1050,7 @@ msgstr "%s är inte en ELF-fil, den har inte rätt magiskt tal i början.\n"
#: elf/sprof.c:77
msgid "Output selection:"
-msgstr "Välj utdata:"
+msgstr "Val av utdata:"
#: elf/sprof.c:79
msgid "print list of count paths and their number of use"
@@ -1069,6 +1071,7 @@ msgid ""
msgstr ""
"Läs och visa profildata för delat objekt. För felrapporteringsinstruktioner, se:\n"
"<http://www.gnu.org/software/libc/bugs.html>.\n"
+"Rapportera fel eller synpunkter på översättningen till <tp-sv@listor.tp-sv.se>.\n"
#: elf/sprof.c:94
msgid "SHOBJ [PROFDATA]"
@@ -1212,7 +1215,7 @@ msgstr "visa alla kända teckenuppsättningar"
#: iconv/iconv_prog.c:64 locale/programs/localedef.c:126
msgid "Output control:"
-msgstr "Styr utdata:"
+msgstr "Val av utdata:"
#: iconv/iconv_prog.c:65
msgid "omit invalid characters from output"
@@ -1311,7 +1314,7 @@ msgstr ""
#: iconv/iconvconfig.c:109
msgid "Create fastloading iconv module configuration file."
-msgstr "Skapa en konfigurationsfil för snabbladdning av modul \"iconv\""
+msgstr "Skapa en snabbladdande modulkonfigurationsfil för iconv."
#: iconv/iconvconfig.c:113
msgid "[DIR...]"
@@ -2418,6 +2421,7 @@ msgid ""
msgstr ""
"Hämta lokalspecifik information. För felrapporteringsinstruktioner, se:\n"
"<http://www.gnu.org/software/libc/bugs.html>.\n"
+"Rapportera fel eller synpunkter på översättningen till <tp-sv@listor.tp-sv.se>.\n"
#: locale/programs/locale.c:91
msgid ""
@@ -2881,7 +2885,8 @@ msgstr ""
"motsvarande korta.\n"
"\n"
"För felrapporteringsinstruktioner, se:\n"
-"<http://www.gnu.org/software/libc/bugs.html>."
+"<http://www.gnu.org/software/libc/bugs.html>.\n"
+"Rapportera fel eller synpunkter på översättningen till <tp-sv@listor.tp-sv.se>."
#: malloc/memusage.sh:90
msgid ""
@@ -4212,6 +4217,7 @@ msgid ""
msgstr ""
"Hämta poster från den administrativa databasen För felrapporteringsinstruktioner, se:\n"
"<http://www.gnu.org/software/libc/bugs.html>.\n"
+"Rapportera fel eller synpunkter på översättningen till <tp-sv@listor.tp-sv.se>.\n"
#: nss/getent.c:145 nss/getent.c:394
#, c-format
diff --git a/libc/posix/unistd.h b/libc/posix/unistd.h
index b751928b1..c74190dfc 100644
--- a/libc/posix/unistd.h
+++ b/libc/posix/unistd.h
@@ -559,7 +559,7 @@ extern long int pathconf (__const char *__path, int __name)
extern long int fpathconf (int __fd, int __name) __THROW;
/* Get the value of the system variable NAME. */
-extern long int sysconf (int __name) __THROW __attribute__ ((__const__));
+extern long int sysconf (int __name) __THROW;
#ifdef __USE_POSIX2
/* Get the value of the string-valued system variable NAME. */
diff --git a/libc/string/Makefile b/libc/string/Makefile
index a84ebebca..3e79f4d90 100644
--- a/libc/string/Makefile
+++ b/libc/string/Makefile
@@ -54,7 +54,7 @@ tests := tester inl-tester noinl-tester testcopy test-ffs \
bug-strncat1 bug-strspn1 bug-strpbrk1 tst-bswap \
tst-strtok tst-strxfrm bug-strcoll1 tst-strfry \
bug-strtok1 $(addprefix test-,$(strop-tests)) \
- bug-envz1
+ bug-envz1 tst-strxfrm2
distribute := memcopy.h pagecopy.h tst-svc.expect test-string.h
diff --git a/libc/string/strxfrm_l.c b/libc/string/strxfrm_l.c
index 533560191..20f2f149b 100644
--- a/libc/string/strxfrm_l.c
+++ b/libc/string/strxfrm_l.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1995,96,97,2002, 2004, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1996, 1997, 2002, 2004, 2005, 2006
+ Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Ulrich Drepper <drepper@gnu.org>, 1995.
@@ -96,6 +97,7 @@ STRXFRM (STRING_TYPE *dest, const STRING_TYPE *src, size_t n, __locale_t l)
const int32_t *indirect;
uint_fast32_t pass;
size_t needed;
+ size_t last_needed;
const USTRING_TYPE *usrc;
size_t srclen = STRLEN (src);
int32_t *idxarr;
@@ -197,6 +199,7 @@ STRXFRM (STRING_TYPE *dest, const STRING_TYPE *src, size_t n, __locale_t l)
this is true for all of them. */
int position = rule & sort_position;
+ last_needed = needed;
if (position == 0)
{
for (idxcnt = 0; idxcnt < idxmax; ++idxcnt)
@@ -426,11 +429,11 @@ STRXFRM (STRING_TYPE *dest, const STRING_TYPE *src, size_t n, __locale_t l)
a `position' rule at the end and if no non-ignored character
is found the last \1 byte is immediately followed by a \0 byte
signalling this. We can avoid the \1 byte(s). */
- if (needed <= n && needed > 2 && dest[needed - 2] == L('\1'))
+ if (needed > 2 && needed == last_needed + 1)
{
/* Remove the \1 byte. */
- --needed;
- dest[needed - 1] = L('\0');
+ if (--needed <= n)
+ dest[needed - 1] = L('\0');
}
/* Free the memory if needed. */
diff --git a/libc/string/tst-strxfrm2.c b/libc/string/tst-strxfrm2.c
new file mode 100644
index 000000000..d5a111533
--- /dev/null
+++ b/libc/string/tst-strxfrm2.c
@@ -0,0 +1,83 @@
+#include <locale.h>
+#include <stdio.h>
+#include <string.h>
+
+static int
+do_test (void)
+{
+ int res = 0;
+
+ char buf[20];
+ size_t l1 = strxfrm (NULL, "ab", 0);
+ size_t l2 = strxfrm (buf, "ab", 1);
+ size_t l3 = strxfrm (buf, "ab", sizeof (buf));
+ if (l3 < sizeof (buf) && strlen (buf) != l3)
+ {
+ puts ("C locale l3 test failed");
+ res = 1;
+ }
+
+ size_t l4 = strxfrm (buf, "ab", l1 + 1);
+ if (l4 < l1 + 1 && strlen (buf) != l4)
+ {
+ puts ("C locale l4 test failed");
+ res = 1;
+ }
+
+ buf[l1] = 'Z';
+ size_t l5 = strxfrm (buf, "ab", l1);
+ if (buf[l1] != 'Z')
+ {
+ puts ("C locale l5 test failed");
+ res = 1;
+ }
+
+ if (l1 != l2 || l1 != l3 || l1 != l4 || l1 != l5)
+ {
+ puts ("C locale retval test failed");
+ res = 1;
+ }
+
+ if (setlocale (LC_ALL, "de_DE.UTF-8") == NULL)
+ {
+ puts ("setlocale failed");
+ res = 1;
+ }
+ else
+ {
+ l1 = strxfrm (NULL, "ab", 0);
+ l2 = strxfrm (buf, "ab", 1);
+ l3 = strxfrm (buf, "ab", sizeof (buf));
+ if (l3 < sizeof (buf) && strlen (buf) != l3)
+ {
+ puts ("UTF-8 locale l3 test failed");
+ res = 1;
+ }
+
+ l4 = strxfrm (buf, "ab", l1 + 1);
+ if (l4 < l1 + 1 && strlen (buf) != l4)
+ {
+ puts ("UTF-8 locale l4 test failed");
+ res = 1;
+ }
+
+ buf[l1] = 'Z';
+ l5 = strxfrm (buf, "ab", l1);
+ if (buf[l1] != 'Z')
+ {
+ puts ("UTF-8 locale l5 test failed");
+ res = 1;
+ }
+
+ if (l1 != l2 || l1 != l3 || l1 != l4 || l1 != l5)
+ {
+ puts ("UTF-8 locale retval test failed");
+ res = 1;
+ }
+ }
+
+ return res;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/libc/sunrpc/auth_unix.c b/libc/sunrpc/auth_unix.c
index 1740e58cd..3eaf0a25a 100644
--- a/libc/sunrpc/auth_unix.c
+++ b/libc/sunrpc/auth_unix.c
@@ -347,7 +347,7 @@ marshal_new_auth (AUTH *auth)
INTUSE(xdrmem_create) (xdrs, au->au_marshed, MAX_AUTH_BYTES, XDR_ENCODE);
if ((!INTUSE(xdr_opaque_auth) (xdrs, &(auth->ah_cred))) ||
(!INTUSE(xdr_opaque_auth) (xdrs, &(auth->ah_verf))))
- perror (_("auth_none.c - Fatal marshalling problem"));
+ perror (_("auth_unix.c: Fatal marshalling problem"));
else
au->au_mpos = XDR_GETPOS (xdrs);
diff --git a/libc/sunrpc/clnt_raw.c b/libc/sunrpc/clnt_raw.c
index 019f1bbae..44ea03efb 100644
--- a/libc/sunrpc/clnt_raw.c
+++ b/libc/sunrpc/clnt_raw.c
@@ -114,7 +114,7 @@ clntraw_create (u_long prog, u_long vers)
INTUSE(xdrmem_create) (xdrs, clp->mashl_callmsg, MCALL_MSG_SIZE, XDR_ENCODE);
if (!INTUSE(xdr_callhdr) (xdrs, &call_msg))
{
- perror (_ ("clnt_raw.c - Fatal header serialization error."));
+ perror (_ ("clnt_raw.c: fatal header serialization error"));
}
clp->mcnt = XDR_GETPOS (xdrs);
XDR_DESTROY (xdrs);
diff --git a/libc/sunrpc/pm_getmaps.c b/libc/sunrpc/pm_getmaps.c
index 2a6876d9d..b21e7ea85 100644
--- a/libc/sunrpc/pm_getmaps.c
+++ b/libc/sunrpc/pm_getmaps.c
@@ -80,7 +80,7 @@ pmap_getmaps (struct sockaddr_in *address)
(xdrproc_t)INTUSE(xdr_pmaplist), (caddr_t)&head,
minutetimeout) != RPC_SUCCESS)
{
- clnt_perror (client, _("pmap_getmaps rpc problem"));
+ clnt_perror (client, _("pmap_getmaps.c: rpc problem"));
}
CLNT_DESTROY (client);
}
diff --git a/libc/sunrpc/rpc_main.c b/libc/sunrpc/rpc_main.c
index 954657a7e..bda432d3c 100644
--- a/libc/sunrpc/rpc_main.c
+++ b/libc/sunrpc/rpc_main.c
@@ -457,7 +457,7 @@ check_nettype (const char *name, const char *list_to_check[])
return 1;
}
}
- fprintf (stderr, _ ("illegal nettype :`%s'\n"), name);
+ fprintf (stderr, _ ("illegal nettype: `%s'\n"), name);
return 0;
}
diff --git a/libc/sysdeps/gnu/errlist-compat.awk b/libc/sysdeps/gnu/errlist-compat.awk
index ab67a18f6..307c4d702 100644
--- a/libc/sysdeps/gnu/errlist-compat.awk
+++ b/libc/sysdeps/gnu/errlist-compat.awk
@@ -1,5 +1,5 @@
# awk script to generate errlist-compat.c
-# Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2004, 2006 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
# The GNU C Library is free software; you can redistribute it and/or
@@ -92,16 +92,18 @@ END {
printf "# include <bits/wordsize.h>\n";
printf "extern const char *const __sys_errlist_%s[NERR];\n", old;
printf "const int __sys_nerr_%s = %d;\n", old, n;
- printf "strong_alias (_sys_errlist_internal, __sys_errlist_%s)\n", old;
- printf "declare_symbol (__sys_errlist_%s, object, __WORDSIZE/8*%d)\n", \
- old, n;
+ printf "declare_symbol_alias (__sys_errlist_%s, _sys_errlist_internal,", \
+ old;
+ printf " object, __WORDSIZE/8*%d)\n", n;
printf "compat_symbol (libc, __sys_errlist_%s, sys_errlist, %s);\n", \
old, old;
printf "compat_symbol (libc, __sys_nerr_%s, sys_nerr, %s);\n", old, old;
printf "extern const char *const ___sys_errlist_%s[NERR];\n", old;
printf "extern const int __sys_nerr_%s;\n", old;
- printf "strong_alias (__sys_errlist_%s, ___sys_errlist_%s)\n", old, old;
+ printf "declare_symbol_alias (___sys_errlist_%s, _sys_errlist_internal,", \
+ old;
+ printf " object, __WORDSIZE/8*%d)\n", n;
printf "strong_alias (__sys_nerr_%s, ___sys_nerr_%s)\n", old, old;
printf "compat_symbol (libc, ___sys_errlist_%s, _sys_errlist, %s);\n", \
old, old;
diff --git a/libc/sysdeps/gnu/siglist.c b/libc/sysdeps/gnu/siglist.c
index cb1875f9e..3005f867f 100644
--- a/libc/sysdeps/gnu/siglist.c
+++ b/libc/sysdeps/gnu/siglist.c
@@ -1,5 +1,5 @@
/* Define list of all signal numbers and their names.
- Copyright (C) 1997-2000, 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1997-2000, 2002, 2003, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -40,27 +40,30 @@ const char *const __new_sys_sigabbrev[NSIG] =
strong_alias (__new_sys_sigabbrev, _sys_sigabbrev_internal)
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
-strong_alias (_sys_siglist_internal, __old_sys_siglist)
-declare_symbol (__old_sys_siglist, object, OLD_SIGLIST_SIZE * __WORDSIZE / 8)
+declare_symbol_alias (__old_sys_siglist, __new_sys_siglist, object,
+ OLD_SIGLIST_SIZE * __WORDSIZE / 8)
-strong_alias (_sys_sigabbrev_internal, __old_sys_sigabbrev)
-declare_symbol (__old_sys_sigabbrev, object, OLD_SIGLIST_SIZE * __WORDSIZE / 8)
+declare_symbol_alias (__old_sys_sigabbrev, __new_sys_sigabbrev, object,
+ OLD_SIGLIST_SIZE * __WORDSIZE / 8)
+
+declare_symbol_alias (_old_sys_siglist, __new_sys_siglist, object,
+ OLD_SIGLIST_SIZE * __WORDSIZE / 8)
-strong_alias (__old_sys_siglist, _old_sys_siglist)
compat_symbol (libc, __old_sys_siglist, _sys_siglist, GLIBC_2_0);
compat_symbol (libc, _old_sys_siglist, sys_siglist, GLIBC_2_0);
compat_symbol (libc, __old_sys_sigabbrev, sys_sigabbrev, GLIBC_2_0);
#endif
#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3_3) && defined OLD2_SIGLIST_SIZE
-strong_alias (_sys_siglist_internal, __old2_sys_siglist)
-declare_symbol (__old2_sys_siglist, object, OLD2_SIGLIST_SIZE * __WORDSIZE / 8)
+declare_symbol_alias (__old2_sys_siglist, __new_sys_siglist, object,
+ OLD2_SIGLIST_SIZE * __WORDSIZE / 8)
+
+declare_symbol_alias (__old2_sys_sigabbrev, __new_sys_sigabbrev, object,
+ OLD2_SIGLIST_SIZE * __WORDSIZE / 8)
-strong_alias (_sys_sigabbrev_internal, __old2_sys_sigabbrev)
-declare_symbol (__old2_sys_sigabbrev, object,
- OLD2_SIGLIST_SIZE * __WORDSIZE / 8)
+declare_symbol_alias (_old2_sys_siglist, __new_sys_siglist, object,
+ OLD2_SIGLIST_SIZE * __WORDSIZE / 8)
-strong_alias (__old2_sys_siglist, _old2_sys_siglist)
compat_symbol (libc, __old2_sys_siglist, _sys_siglist, GLIBC_2_1);
compat_symbol (libc, _old2_sys_siglist, sys_siglist, GLIBC_2_1);
compat_symbol (libc, __old2_sys_sigabbrev, sys_sigabbrev, GLIBC_2_1);
diff --git a/libc/sysdeps/i386/fpu/bits/mathinline.h b/libc/sysdeps/i386/fpu/bits/mathinline.h
index e04ce9509..28547d44b 100644
--- a/libc/sysdeps/i386/fpu/bits/mathinline.h
+++ b/libc/sysdeps/i386/fpu/bits/mathinline.h
@@ -1,5 +1,5 @@
/* Inline math functions for i387.
- Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004
+ Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2006
Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by John C. Bowman <bowman@math.ualberta.ca>, 1995.
@@ -529,24 +529,38 @@ __inline_mathcodeNP (tanh, __x, \
__inline_mathcodeNP (floor, __x, \
register long double __value; \
- __volatile unsigned short int __cw; \
- __volatile unsigned short int __cwtmp; \
- __asm __volatile ("fnstcw %0" : "=m" (__cw)); \
- __cwtmp = (__cw & 0xf3ff) | 0x0400; /* rounding down */ \
- __asm __volatile ("fldcw %0" : : "m" (__cwtmp)); \
- __asm __volatile ("frndint" : "=t" (__value) : "0" (__x)); \
- __asm __volatile ("fldcw %0" : : "m" (__cw)); \
+ register int __ignore; \
+ unsigned short int __cw; \
+ unsigned short int __cwtmp; \
+ __asm __volatile ("fnstcw %3\n\t" \
+ "movzwl %3, %1\n\t" \
+ "andl $0xf3ff, %1\n\t" \
+ "orl $0x0400, %1\n\t" /* rounding down */ \
+ "movw %w1, %2\n\t" \
+ "fldcw %2\n\t" \
+ "frndint\n\t" \
+ "fldcw %3" \
+ : "=t" (__value), "=&q" (__ignore), "=m" (__cwtmp), \
+ "=m" (__cw) \
+ : "0" (__x)); \
return __value)
__inline_mathcodeNP (ceil, __x, \
register long double __value; \
- __volatile unsigned short int __cw; \
- __volatile unsigned short int __cwtmp; \
- __asm __volatile ("fnstcw %0" : "=m" (__cw)); \
- __cwtmp = (__cw & 0xf3ff) | 0x0800; /* rounding up */ \
- __asm __volatile ("fldcw %0" : : "m" (__cwtmp)); \
- __asm __volatile ("frndint" : "=t" (__value) : "0" (__x)); \
- __asm __volatile ("fldcw %0" : : "m" (__cw)); \
+ register int __ignore; \
+ unsigned short int __cw; \
+ unsigned short int __cwtmp; \
+ __asm __volatile ("fnstcw %3\n\t" \
+ "movzwl %3, %1\n\t" \
+ "andl $0xf3ff, %1\n\t" \
+ "orl $0x0800, %1\n\t" /* rounding up */ \
+ "movw %w1, %2\n\t" \
+ "fldcw %2\n\t" \
+ "frndint\n\t" \
+ "fldcw %3" \
+ : "=t" (__value), "=&q" (__ignore), "=m" (__cwtmp), \
+ "=m" (__cw) \
+ : "0" (__x)); \
return __value)
#ifdef __FAST_MATH__
diff --git a/libc/sysdeps/posix/getaddrinfo.c b/libc/sysdeps/posix/getaddrinfo.c
index 84a629336..b4966852a 100644
--- a/libc/sysdeps/posix/getaddrinfo.c
+++ b/libc/sysdeps/posix/getaddrinfo.c
@@ -2085,10 +2085,12 @@ getaddrinfo (const char *name, const char *service,
if (q->ai_family == PF_INET6 && in6ai != NULL)
{
- /* See whether the address is the list of deprecated
- or temporary addresses. */
+ /* See whether the source address is the list of
+ deprecated or temporary addresses. */
struct in6addrinfo tmp;
- memcpy (tmp.addr, q->ai_addr, IN6ADDRSZ);
+ struct sockaddr_in6 *sin6p
+ = (struct sockaddr_in6 *) &results[i].source_addr;
+ memcpy (tmp.addr, &sin6p->sin6_addr, IN6ADDRSZ);
struct in6addrinfo *found
= bsearch (&tmp, in6ai, in6ailen, sizeof (*in6ai),
diff --git a/libc/sysdeps/unix/sysv/linux/i386/sysconf.c b/libc/sysdeps/unix/sysv/linux/i386/sysconf.c
index c9d7f77a0..2ffbd5227 100644
--- a/libc/sysdeps/unix/sysv/linux/i386/sysconf.c
+++ b/libc/sysdeps/unix/sysv/linux/i386/sysconf.c
@@ -140,6 +140,7 @@ intel_02_known_compare (const void *p1, const void *p2)
static long int
+__attribute__ ((noinline))
intel_check_word (int name, unsigned int value, bool *has_level_2,
bool *no_level_2_or_3)
{
diff --git a/libc/sysdeps/unix/sysv/linux/x86_64/sysconf.c b/libc/sysdeps/unix/sysv/linux/x86_64/sysconf.c
index 80c982aa3..5a898b785 100644
--- a/libc/sysdeps/unix/sysv/linux/x86_64/sysconf.c
+++ b/libc/sysdeps/unix/sysv/linux/x86_64/sysconf.c
@@ -101,6 +101,7 @@ intel_02_known_compare (const void *p1, const void *p2)
static long int
+__attribute__ ((noinline))
intel_check_word (int name, unsigned int value, bool *has_level_2,
bool *no_level_2_or_3)
{
diff --git a/libc/time/tzfile.c b/libc/time/tzfile.c
index e95fd55f3..ea2d7cae4 100644
--- a/libc/time/tzfile.c
+++ b/libc/time/tzfile.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1991-1993,1995-2001,2003,2004 Free Software Foundation, Inc.
+/* Copyright (C) 1991-1993,1995-2001,2003,2004,2006
+ Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -71,24 +72,34 @@ static inline int
__attribute ((always_inline))
decode (const void *ptr)
{
- if ((BYTE_ORDER == BIG_ENDIAN) && sizeof (int) == 4)
+ if (BYTE_ORDER == BIG_ENDIAN && sizeof (int) == 4)
return *(const int *) ptr;
- else if (BYTE_ORDER == LITTLE_ENDIAN && sizeof (int) == 4)
+ if (sizeof (int) == 4)
return bswap_32 (*(const int *) ptr);
- else
- {
- const unsigned char *p = ptr;
- int result = *p & (1 << (CHAR_BIT - 1)) ? ~0 : 0;
- result = (result << 8) | *p++;
- result = (result << 8) | *p++;
- result = (result << 8) | *p++;
- result = (result << 8) | *p++;
+ const unsigned char *p = ptr;
+ int result = *p & (1 << (CHAR_BIT - 1)) ? ~0 : 0;
- return result;
- }
+ result = (result << 8) | *p++;
+ result = (result << 8) | *p++;
+ result = (result << 8) | *p++;
+ result = (result << 8) | *p++;
+
+ return result;
}
+
+static inline int64_t
+__attribute ((always_inline))
+decode64 (const void *ptr)
+{
+ if ((BYTE_ORDER == BIG_ENDIAN))
+ return *(const int64_t *) ptr;
+
+ return bswap_64 (*(const int64_t *) ptr);
+}
+
+
void
__tzfile_read (const char *file, size_t extra, char **extrap)
{
@@ -102,6 +113,10 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
size_t types_idx;
size_t leaps_idx;
int was_using_tzfile = __use_tzfile;
+ int trans_width = 4;
+
+ if (sizeof (time_t) != 4 && sizeof (time_t) != 8)
+ abort ();
__use_tzfile = 0;
@@ -185,8 +200,10 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
/* No threads reading this stream. */
__fsetlocking (f, FSETLOCKING_BYCALLER);
+ read_again:
if (__builtin_expect (fread_unlocked ((void *) &tzhead, sizeof (tzhead),
- 1, f) != 1, 0))
+ 1, f) != 1, 0)
+ || memcmp (tzhead.tzh_magic, TZ_MAGIC, sizeof (tzhead.tzh_magic)) != 0)
goto lose;
num_transitions = (size_t) decode (tzhead.tzh_timecnt);
@@ -196,6 +213,26 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
num_isstd = (size_t) decode (tzhead.tzh_ttisstdcnt);
num_isgmt = (size_t) decode (tzhead.tzh_ttisgmtcnt);
+ /* For platforms with 64-bit time_t we use the new format if available. */
+ if (sizeof (time_t) == 8 && trans_width == 4
+ && tzhead.tzh_version[0] != '\0')
+ {
+ /* We use the 8-byte format. */
+ trans_width = 8;
+
+ /* Position the stream before the second header. */
+ size_t to_skip = (num_transitions * (4 + 1)
+ + num_types * 6
+ + chars
+ + num_leaps * 8
+ + num_isstd
+ + num_isgmt);
+ if (fseek (f, to_skip, SEEK_CUR) != 0)
+ goto lose;
+
+ goto read_again;
+ }
+
total_size = num_transitions * (sizeof (time_t) + 1);
total_size = ((total_size + __alignof__ (struct ttinfo) - 1)
& ~(__alignof__ (struct ttinfo) - 1));
@@ -205,10 +242,10 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
& ~(__alignof__ (struct leap) - 1));
leaps_idx = total_size;
total_size += num_leaps * sizeof (struct leap);
- /* This is for the extra memory required by the caller. */
- total_size += extra;
- transitions = (time_t *) malloc (total_size);
+ /* Allocate enough memory including the extra block requested by the
+ caller. */
+ transitions = (time_t *) malloc (total_size + extra);
if (transitions == NULL)
goto lose;
@@ -220,14 +257,11 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
if (extra > 0)
*extrap = (char *) &leaps[num_leaps];
- if (sizeof (time_t) < 4)
- abort ();
-
- if (sizeof (time_t) == 4)
+ if (sizeof (time_t) == 4 || trans_width == 8)
{
- if (__builtin_expect (fread_unlocked (transitions, 1,
- (4 + 1) * num_transitions, f)
- != (4 + 1) * num_transitions, 0))
+ if (__builtin_expect (fread_unlocked (transitions, trans_width + 1,
+ num_transitions, f)
+ != num_transitions, 0))
goto lose;
}
else
@@ -245,7 +279,9 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
if (__builtin_expect (type_idxs[i] >= num_types, 0))
goto lose;
- if (BYTE_ORDER != BIG_ENDIAN || sizeof (time_t) != 4)
+ if ((BYTE_ORDER != BIG_ENDIAN && (sizeof (time_t) == 4 || trans_width == 4))
+ || (BYTE_ORDER == BIG_ENDIAN && sizeof (time_t) == 8
+ && trans_width == 4))
{
/* Decode the transition times, stored as 4-byte integers in
network (big-endian) byte order. We work from the end of
@@ -255,6 +291,13 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
while (i-- > 0)
transitions[i] = decode ((char *) transitions + i * 4);
}
+ else if (BYTE_ORDER != BIG_ENDIAN && sizeof (time_t) == 8)
+ {
+ /* Decode the transition times, stored as 8-byte integers in
+ network (big-endian) byte order. */
+ for (i = 0; i < num_transitions; ++i)
+ transitions[i] = decode64 ((char *) transitions + i * 8);
+ }
for (i = 0; i < num_types; ++i)
{
@@ -280,13 +323,16 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
for (i = 0; i < num_leaps; ++i)
{
- unsigned char x[4];
- if (__builtin_expect (fread_unlocked (x, 1, sizeof (x), f) != sizeof (x),
- 0))
+ unsigned char x[8];
+ if (__builtin_expect (fread_unlocked (x, 1, trans_width, f)
+ != trans_width, 0))
goto lose;
- leaps[i].transition = (time_t) decode (x);
- if (__builtin_expect (fread_unlocked (x, 1, sizeof (x), f) != sizeof (x),
- 0))
+ if (sizeof (time_t) == 4 || trans_width == 4)
+ leaps[i].transition = (time_t) decode (x);
+ else
+ leaps[i].transition = (time_t) decode64 (x);
+
+ if (__builtin_expect (fread_unlocked (x, 1, 4, f) != 4, 0))
goto lose;
leaps[i].change = (long int) decode (x);
}
@@ -311,6 +357,12 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
while (i < num_types)
types[i++].isgmt = 0;
+ /* XXX When a version 2 file is available it can contain a POSIX TZ-style
+ formatted string which specifies how times past the last one specified
+ are supposed to be handled. We might want to handle this at some
+ point. But it might be overhead since most/all? files have an
+ open-ended last entry. */
+
fclose (f);
/* First "register" all timezone names. */
diff --git a/libc/timezone/africa b/libc/timezone/africa
index 29625df93..d73d34075 100644
--- a/libc/timezone/africa
+++ b/libc/timezone/africa
@@ -1,15 +1,15 @@
-# @(#)africa 8.1
+# @(#)africa 8.5
# <pre>
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert (1999-03-22):
+# From Paul Eggert (2006-03-22):
#
# A good source for time zone historical data outside the U.S. is
-# Thomas G. Shanks, The International Atlas (5th edition),
-# San Diego: ACS Publications, Inc. (1999).
+# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
+# San Diego: ACS Publications, Inc. (2003).
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
@@ -17,8 +17,8 @@
# published semiannually. Law sent in several helpful summaries
# of the IATA's data after 1990.
#
-# Except where otherwise noted, Shanks is the source for entries through 1990,
-# and IATA SSIM is the source for entries after 1990.
+# Except where otherwise noted, Shanks & Pottenger is the source for
+# entries through 1990, and IATA SSIM is the source for entries afterwards.
#
# Another source occasionally used is Edward W. Whitman, World Time Differences,
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
@@ -65,7 +65,7 @@
# Algeria
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Algeria 1916 only - Jun 14 23:00s 1:00 S
-Rule Algeria 1916 1919 - Oct Sun<=7 23:00s 0 -
+Rule Algeria 1916 1919 - Oct Sun>=1 23:00s 0 -
Rule Algeria 1917 only - Mar 24 23:00s 1:00 S
Rule Algeria 1918 only - Mar 9 23:00s 1:00 S
Rule Algeria 1919 only - Mar 1 23:00s 1:00 S
@@ -75,7 +75,7 @@ Rule Algeria 1921 only - Mar 14 23:00s 1:00 S
Rule Algeria 1921 only - Jun 21 23:00s 0 -
Rule Algeria 1939 only - Sep 11 23:00s 1:00 S
Rule Algeria 1939 only - Nov 19 1:00 0 -
-Rule Algeria 1944 1945 - Apr Mon<=7 2:00 1:00 S
+Rule Algeria 1944 1945 - Apr Mon>=1 2:00 1:00 S
Rule Algeria 1944 only - Oct 8 2:00 0 -
Rule Algeria 1945 only - Sep 16 1:00 0 -
Rule Algeria 1971 only - Apr 25 23:00s 1:00 S
@@ -86,7 +86,8 @@ Rule Algeria 1978 only - Mar 24 1:00 1:00 S
Rule Algeria 1978 only - Sep 22 3:00 0 -
Rule Algeria 1980 only - Apr 25 0:00 1:00 S
Rule Algeria 1980 only - Oct 31 2:00 0 -
-# Shanks gives 0:09 for Paris Mean Time; go with Howse's more precise 0:09:21.
+# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
+# more precise 0:09:21.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01
0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
@@ -106,7 +107,8 @@ Zone Africa/Luanda 0:52:56 - LMT 1892
1:00 - WAT
# Benin
-# Whitman says they switched to 1:00 in 1946, not 1934; go with Shanks.
+# Whitman says they switched to 1:00 in 1946, not 1934;
+# go with Shanks & Pottenger.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Porto-Novo 0:10:28 - LMT 1912
0:00 - GMT 1934 Feb 26
@@ -130,7 +132,7 @@ Zone Africa/Bujumbura 1:57:28 - LMT 1890
2:00 - CAT
# Cameroon
-# Whitman says they switched to 1:00 in 1920; go with Shanks.
+# Whitman says they switched to 1:00 in 1920; go with Shanks & Pottenger.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Douala 0:38:48 - LMT 1912
1:00 - WAT
@@ -209,7 +211,14 @@ Rule Egypt 1990 1994 - May 1 1:00 1:00 S
# IATA (after 1990) says transitions are at 0:00.
# Go with IATA starting in 1995, except correct 1995 entry from 09-30 to 09-29.
Rule Egypt 1995 max - Apr lastFri 0:00s 1:00 S
-Rule Egypt 1995 max - Sep lastThu 23:00s 0 -
+Rule Egypt 1995 2005 - Sep lastThu 23:00s 0 -
+# From Steffen Thorsen (2006-09-19):
+# The Egyptian Gazette, issue 41,090 (2006-09-18), page 1, reports:
+# Egypt will turn back clocks by one hour at the midnight of Thursday
+# after observing the daylight saving time since May.
+# http://news.gom.com.eg/gazette/pdf/2006/09/18/01.pdf
+Rule Egypt 2006 only - Sep 21 23:00s 0 -
+Rule Egypt 2007 max - Sep lastThu 23:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Cairo 2:05:00 - LMT 1900 Oct
@@ -229,9 +238,9 @@ Zone Africa/Asmera 2:35:32 - LMT 1870
3:00 - EAT
# Ethiopia
-# From Paul Eggert (1997-10-05):
-# Shanks writes that Ethiopia had six narrowly-spaced time zones between
-# 1870 and 1890, and that they merged to 38E50 (2:35:20) in 1890.
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger write that Ethiopia had six narrowly-spaced time zones
+# between 1870 and 1890, and that they merged to 38E50 (2:35:20) in 1890.
# We'll guess that 38E50 is for Adis Dera.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Addis_Ababa 2:34:48 - LMT 1870
@@ -252,7 +261,8 @@ Zone Africa/Banjul -1:06:36 - LMT 1912
# Ghana
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# Whitman says DST was observed from 1931 to ``the present''; go with Shanks.
+# Whitman says DST was observed from 1931 to ``the present'';
+# go with Shanks & Pottenger.
Rule Ghana 1936 1942 - Sep 1 0:00 0:20 GHST
Rule Ghana 1936 1942 - Dec 31 0:00 0 GMT
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -288,13 +298,14 @@ Zone Africa/Maseru 1:50:00 - LMT 1903 Mar
2:00 - SAST
# Liberia
-# From Paul Eggert (2001-07-17):
+# From Paul Eggert (2006-03-22):
# In 1972 Liberia was the last country to switch
# from a UTC offset that was not a multiple of 15 or 20 minutes.
# Howse reports that it was in honor of their president's birthday.
-# Shanks reports the date as May 1, whereas Howse reports Jan; go with Shanks.
-# For Liberia before 1972, Shanks reports -0:44, whereas Howse and Whitman
-# each report -0:44:30; go with the more precise figure.
+# Shank & Pottenger report the date as May 1, whereas Howse reports Jan;
+# go with Shanks & Pottenger.
+# For Liberia before 1972, Shanks & Pottenger report -0:44, whereas Howse and
+# Whitman each report -0:44:30; go with the more precise figure.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Monrovia -0:43:08 - LMT 1882
-0:43:08 - MMT 1919 Mar # Monrovia Mean Time
@@ -324,7 +335,7 @@ Zone Africa/Tripoli 0:52:44 - LMT 1920
1:00 Libya CE%sT 1959
2:00 - EET 1982
1:00 Libya CE%sT 1990 May 4
-# The following entries are all from Shanks;
+# The following entries are from Shanks & Pottenger;
# the IATA SSIM data contain some obvious errors.
2:00 - EET 1996 Sep 30
1:00 - CET 1997 Apr 4
@@ -403,8 +414,8 @@ Zone Africa/Maputo 2:10:20 - LMT 1903 Mar
2:00 - CAT
# Namibia
-# The 1994-04-03 transition is from Shanks.
-# Shanks reports no DST after 1998-04; go with IATA.
+# The 1994-04-03 transition is from Shanks & Pottenger.
+# Shanks & Pottenger report no DST after 1998-04; go with IATA.
# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Namibia 1994 max - Sep Sun>=1 2:00 1:00 S
Rule Namibia 1995 max - Apr Sun>=1 2:00 0 -
@@ -488,7 +499,7 @@ Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria
# Sierra Leone
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# Whitman gives Mar 31 - Aug 31 for 1931 on; go with Shanks.
+# Whitman gives Mar 31 - Aug 31 for 1931 on; go with Shanks & Pottenger.
Rule SL 1935 1942 - Jun 1 0:00 0:40 SLST
Rule SL 1935 1942 - Oct 1 0:00 0 WAT
Rule SL 1957 1962 - Jun 1 0:00 1:00 SLST
@@ -557,7 +568,6 @@ Zone Africa/Lome 0:04:52 - LMT 1893
# Tunisia
# From Gwillim Law (2005-04-30):
-#
# My correspondent, Risto Nykanen, has alerted me to another adoption of DST,
# this time in Tunisia. According to Yahoo France News
# <http://fr.news.yahoo.com/050426/5/4dumk.html>, in a story attributed to AP
@@ -571,6 +581,12 @@ Zone Africa/Lome 0:04:52 - LMT 1893
# <http://www.lapresse.tn/archives/archives280405/actualites/lheure.html>
# ... DST for 2005: on: Sun May 1 0h standard time, off: Fri Sept. 30,
# 1h standard time.
+#
+# From Atef Loukil (2006-03-28):
+# The daylight saving time will be the same each year:
+# Beginning : the last Sunday of March at 02:00
+# Ending : the last Sunday of October at 03:00 ...
+# http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=1188&Itemid=50
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Tunisia 1939 only - Apr 15 23:00s 1:00 S
@@ -596,8 +612,11 @@ Rule Tunisia 1989 only - Mar 26 0:00s 1:00 S
Rule Tunisia 1990 only - May 1 0:00s 1:00 S
Rule Tunisia 2005 only - May 1 0:00s 1:00 S
Rule Tunisia 2005 only - Sep 30 1:00s 0 -
-# Shanks gives 0:09 for Paris Mean Time; go with Howse's more precise 0:09:21.
-# Shanks says the 1911 switch occurred on Mar 9; go with Howse's Mar 11.
+Rule Tunisia 2006 max - Mar lastSun 2:00s 1:00 S
+Rule Tunisia 2006 max - Oct lastSun 2:00s 0 -
+# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
+# more precise 0:09:21.
+# Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Tunis 0:40:44 - LMT 1881 May 12
0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
diff --git a/libc/timezone/antarctica b/libc/timezone/antarctica
index 8a9ea939c..2584ae4f1 100644
--- a/libc/timezone/antarctica
+++ b/libc/timezone/antarctica
@@ -1,4 +1,4 @@
-# @(#)antarctica 8.1
+# @(#)antarctica 8.3
# <pre>
# From Paul Eggert (1999-11-15):
@@ -33,19 +33,27 @@ Rule RussAQ 1996 max - Oct lastSun 2:00s 0 -
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule ArgAQ 1964 1966 - Mar 1 0:00 0 -
Rule ArgAQ 1964 1966 - Oct 15 0:00 1:00 S
-Rule ArgAQ 1967 only - Apr 1 0:00 0 -
-Rule ArgAQ 1967 1968 - Oct Sun<=7 0:00 1:00 S
-Rule ArgAQ 1968 1969 - Apr Sun<=7 0:00 0 -
+Rule ArgAQ 1967 only - Apr 2 0:00 0 -
+Rule ArgAQ 1967 1968 - Oct Sun>=1 0:00 1:00 S
+Rule ArgAQ 1968 1969 - Apr Sun>=1 0:00 0 -
Rule ArgAQ 1974 only - Jan 23 0:00 1:00 S
Rule ArgAQ 1974 only - May 1 0:00 0 -
-Rule ArgAQ 1974 1976 - Oct Sun<=7 0:00 1:00 S
-Rule ArgAQ 1975 1977 - Apr Sun<=7 0:00 0 -
-Rule ChileAQ 1966 1997 - Oct Sun>=9 0:00 1:00 S
-Rule ChileAQ 1967 1998 - Mar Sun>=9 0:00 0 -
-Rule ChileAQ 1998 only - Sep 27 0:00 1:00 S
-Rule ChileAQ 1999 only - Apr 4 0:00 0 -
-Rule ChileAQ 1999 max - Oct Sun>=9 0:00 1:00 S
-Rule ChileAQ 2000 max - Mar Sun>=9 0:00 0 -
+Rule ChileAQ 1972 1986 - Mar Sun>=9 3:00u 0 -
+Rule ChileAQ 1974 1987 - Oct Sun>=9 4:00u 1:00 S
+Rule ChileAQ 1987 only - Apr 12 3:00u 0 -
+Rule ChileAQ 1988 1989 - Mar Sun>=9 3:00u 0 -
+Rule ChileAQ 1988 only - Oct Sun>=1 4:00u 1:00 S
+Rule ChileAQ 1989 only - Oct Sun>=9 4:00u 1:00 S
+Rule ChileAQ 1990 only - Mar 18 3:00u 0 -
+Rule ChileAQ 1990 only - Sep 16 4:00u 1:00 S
+Rule ChileAQ 1991 1996 - Mar Sun>=9 3:00u 0 -
+Rule ChileAQ 1991 1997 - Oct Sun>=9 4:00u 1:00 S
+Rule ChileAQ 1997 only - Mar 30 3:00u 0 -
+Rule ChileAQ 1998 only - Mar Sun>=9 3:00u 0 -
+Rule ChileAQ 1998 only - Sep 27 4:00u 1:00 S
+Rule ChileAQ 1999 only - Apr 4 3:00u 0 -
+Rule ChileAQ 1999 max - Oct Sun>=9 4:00u 1:00 S
+Rule ChileAQ 2000 max - Mar Sun>=9 3:00u 0 -
# Argentina - year-round bases
diff --git a/libc/timezone/asia b/libc/timezone/asia
index 446cc16e6..04ddc863e 100644
--- a/libc/timezone/asia
+++ b/libc/timezone/asia
@@ -1,15 +1,15 @@
-# @(#)asia 8.1
+# @(#)asia 8.8
# <pre>
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert (1999-03-22):
+# From Paul Eggert (2006-03-22):
#
# A good source for time zone historical data outside the U.S. is
-# Thomas G. Shanks, The International Atlas (5th edition),
-# San Diego: ACS Publications, Inc. (1999).
+# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
+# San Diego: ACS Publications, Inc. (2003).
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
@@ -17,8 +17,8 @@
# published semiannually. Law sent in several helpful summaries
# of the IATA's data after 1990.
#
-# Except where otherwise noted, Shanks is the source for entries through 1990,
-# and IATA SSIM is the source for entries after 1990.
+# Except where otherwise noted, Shanks & Pottenger is the source for
+# entries through 1990, and IATA SSIM is the source for entries afterwards.
#
# Another source occasionally used is Edward W. Whitman, World Time Differences,
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
@@ -61,6 +61,7 @@
# These rules are stolen from the `europe' file.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule EUAsia 1981 max - Mar lastSun 1:00u 1:00 S
+Rule EUAsia 1979 1995 - Sep lastSun 1:00u 0 -
Rule EUAsia 1996 max - Oct lastSun 1:00u 0 -
Rule E-EurAsia 1981 max - Mar lastSun 0:00 1:00 S
Rule E-EurAsia 1979 1995 - Sep lastSun 0:00 0 -
@@ -82,10 +83,11 @@ Zone Asia/Kabul 4:36:48 - LMT 1890
4:30 - AFT
# Armenia
-# From Paul Eggert (1999-10-29):
-# Shanks has Yerevan switching to 3:00 (with Russian DST) in spring 1991,
-# then to 4:00 with no DST in fall 1995, then readopting Russian DST in 1997.
-# Go with Shanks, even when he disagrees with others. Edgar Der-Danieliantz
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger have Yerevan switching to 3:00 (with Russian DST)
+# in spring 1991, then to 4:00 with no DST in fall 1995, then
+# readopting Russian DST in 1997. Go with Shanks & Pottenger, even
+# when they disagree with others. Edgar Der-Danieliantz
# reported (1996-05-04) that Yerevan probably wouldn't use DST
# in 1996, though it did use DST in 1995. IATA SSIM (1991/1998) reports that
# Armenia switched from 3:00 to 4:00 in 1998 and observed DST after 1991,
@@ -194,13 +196,15 @@ Zone Asia/Phnom_Penh 6:59:40 - LMT 1906 Jun 9
# CHINA 8 H AHEAD OF UTC ALL OF CHINA, INCL TAIWAN
# CHINA 9 H AHEAD OF UTC APR 17 - SEP 10
-# From Paul Eggert (1995-12-19):
-# Shanks writes that China has had a single time zone since 1980 May 1,
-# observing summer DST from 1986 through 1991; this contradicts Devine's
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger write that China (except for Hong Kong and Macau)
+# has had a single time zone since 1980 May 1, observing summer DST
+# from 1986 through 1991; this contradicts Devine's
# note about Time magazine, though apparently _something_ happened in 1986.
-# Go with Shanks for now. I made up names for the other pre-1980 time zones.
+# Go with Shanks & Pottenger for now. I made up names for the other
+# pre-1980 time zones.
-# From Shanks:
+# From Shanks & Pottenger:
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Shang 1940 only - Jun 3 0:00 1:00 D
Rule Shang 1940 1941 - Oct 1 0:00 0 S
@@ -208,14 +212,27 @@ Rule Shang 1941 only - Mar 16 0:00 1:00 D
Rule PRC 1986 only - May 4 0:00 1:00 D
Rule PRC 1986 1991 - Sep Sun>=11 0:00 0 S
Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D
-#
-# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-#
+
# From Anthony Fok (2001-12-20):
# BTW, I did some research on-line and found some info regarding these five
# historic timezones from some Taiwan websites. And yes, there are official
-# Chinese names for these locales (before 1949):
+# Chinese names for these locales (before 1949).
+#
+# From Jesper Norgaard Welen (2006-07-14):
+# I have investigated the timezones around 1970 on the
+# http://www.astro.com/atlas site [with provinces and county
+# boundaries summarized below].... A few other exceptions were two
+# counties on the Sichuan side of the Xizang-Sichuan border,
+# counties Dege and Baiyu which lies on the Sichuan side and are
+# therefore supposed to be GMT+7, Xizang region being GMT+6, but Dege
+# county is GMT+8 according to astro.com while Baiyu county is GMT+6
+# (could be true), for the moment I am assuming that those two
+# counties are mistakes in the astro.com data.
+
+
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
# Changbai Time ("Long-white Time", Long-white = Heilongjiang area)
+# Heilongjiang (except Mohe county), Jilin
Zone Asia/Harbin 8:26:44 - LMT 1928 # or Haerbin
8:30 - CHAT 1932 Mar # Changbai Time
8:00 - CST 1940
@@ -223,18 +240,35 @@ Zone Asia/Harbin 8:26:44 - LMT 1928 # or Haerbin
8:30 - CHAT 1980 May
8:00 PRC C%sT
# Zhongyuan Time ("Central plain Time")
+# most of China
Zone Asia/Shanghai 8:05:52 - LMT 1928
8:00 Shang C%sT 1949
8:00 PRC C%sT
# Long-shu Time (probably due to Long and Shu being two names of that area)
+# Guangxi, Guizhou, Hainan, Ningxia, Sichuan, Shaanxi, and Yunnan;
+# most of Gansu; west Inner Mongolia; west Qinghai; and the Guangdong
+# counties Deqing, Enping, Kaiping, Luoding, Taishan, Xinxing,
+# Yangchun, Yangjiang, Yu'nan, and Yunfu.
Zone Asia/Chongqing 7:06:20 - LMT 1928 # or Chungking
7:00 - LONT 1980 May # Long-shu Time
8:00 PRC C%sT
# Xin-zang Time ("Xinjiang-Tibet Time")
+# The Gansu counties Aksay, Anxi, Dunhuang, Subei; west Qinghai;
+# the Guangdong counties Xuwen, Haikang, Suixi, Lianjiang,
+# Zhanjiang, Wuchuan, Huazhou, Gaozhou, Maoming, Dianbai, and Xinyi;
+# east Tibet, including Lhasa, Chamdo, Shigaise, Jimsar, Shawan and Hutubi;
+# east Xinjiang, including Urumqi, Turpan, Karamay, Korla, Minfeng, Jinghe,
+# Wusu, Qiemo, Xinyan, Wulanwusu, Jinghe, Yumin, Tacheng, Tuoli, Emin,
+# Shihezi, Changji, Yanqi, Heshuo, Tuokexun, Tulufan, Shanshan, Hami,
+# Fukang, Kuitun, Kumukuli, Miquan, Qitai, and Turfan.
Zone Asia/Urumqi 5:50:20 - LMT 1928 # or Urumchi
6:00 - URUT 1980 May # Urumqi Time
8:00 PRC C%sT
# Kunlun Time
+# West Tibet, including Pulan, Aheqi, Shufu, Shule;
+# West Xinjiang, including Aksu, Atushi, Yining, Hetian, Cele, Luopu, Nileke,
+# Zhaosu, Tekesi, Gongliu, Chabuchaer, Huocheng, Bole, Pishan, Suiding,
+# and Yarkand.
Zone Asia/Kashgar 5:03:56 - LMT 1928 # or Kashi or Kaxgar
5:30 - KAST 1940 # Kashgar Time
5:00 - KAST 1980 May
@@ -266,7 +300,7 @@ Zone Asia/Hong_Kong 7:36:36 - LMT 1904 Oct 30
# Taiwan
-# Shanks writes that Taiwan observed DST during 1945, when it
+# Shanks & Pottenger write that Taiwan observed DST during 1945, when it
# was still controlled by Japan. This is hard to believe, but we don't
# have any other information.
@@ -423,7 +457,7 @@ Zone Asia/Calcutta 5:53:28 - LMT 1880 # Kolkata
# Indonesia
#
-# From Gwillim Law (2001-05-28), overriding Shanks:
+# From Gwillim Law (2001-05-28), overriding Shanks & Pottenger:
# <http://www.sumatera-inc.com/go_to_invest/about_indonesia.asp#standtime>
# says that Indonesia's time zones changed on 1988-01-01. Looking at some
# time zone maps, I think that must refer to Western Borneo (Kalimantan Barat
@@ -431,7 +465,7 @@ Zone Asia/Calcutta 5:53:28 - LMT 1880 # Kolkata
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Jakarta 7:07:12 - LMT 1867 Aug 10
-# Shanks says the next transition was at 1924 Jan 1 0:13,
+# Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,
# but this must be a typo.
7:07:12 - JMT 1923 Dec 31 23:47:12 # Jakarta
7:20 - JAVT 1932 Nov # Java Time
@@ -498,8 +532,8 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
# leap year calculation involved. There has never been any serious
# plan to change that law....
#
-# From Paul Eggert (2005-04-05):
-# Go with Shanks before September 1991, and with Pournader thereafter.
+# From Paul Eggert (2006-03-22):
+# Go with Shanks & Pottenger before Sept. 1991, and with Pournader thereafter.
# I used Ed Reingold's cal-persia in GNU Emacs 21.2 to check Persian dates,
# stopping after 2037 when 32-bit time_t's overflow.
# That cal-persia used Birashk's approximation, which disagrees with the solar
@@ -519,6 +553,14 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
# Reingold's/Dershowitz' calculator gives correctly the Gregorian date
# 2058-03-21 for 1 Farvardin 1437 (astronomical).
#
+# From Paul Eggert (2006-03-22):
+# The above comments about post-2006 transitions may become relevant again,
+# if Iran ever resuscitates DST, so we'll leave the comments in.
+#
+# From Steffen Thorsen (2006-03-22):
+# Several of my users have reported that Iran will not observe DST anymore:
+# http://www.irna.ir/en/news/view/line-17/0603193812164948.htm
+#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Iran 1978 1980 - Mar 21 0:00 1:00 D
Rule Iran 1978 only - Oct 21 0:00 0 S
@@ -537,38 +579,8 @@ Rule Iran 2001 2003 - Mar 22 0:00 1:00 D
Rule Iran 2001 2003 - Sep 22 0:00 0 S
Rule Iran 2004 only - Mar 21 0:00 1:00 D
Rule Iran 2004 only - Sep 21 0:00 0 S
-Rule Iran 2005 2007 - Mar 22 0:00 1:00 D
-Rule Iran 2005 2007 - Sep 22 0:00 0 S
-Rule Iran 2008 only - Mar 21 0:00 1:00 D
-Rule Iran 2008 only - Sep 21 0:00 0 S
-Rule Iran 2009 2011 - Mar 22 0:00 1:00 D
-Rule Iran 2009 2011 - Sep 22 0:00 0 S
-Rule Iran 2012 only - Mar 21 0:00 1:00 D
-Rule Iran 2012 only - Sep 21 0:00 0 S
-Rule Iran 2013 2015 - Mar 22 0:00 1:00 D
-Rule Iran 2013 2015 - Sep 22 0:00 0 S
-Rule Iran 2016 only - Mar 21 0:00 1:00 D
-Rule Iran 2016 only - Sep 21 0:00 0 S
-Rule Iran 2017 2019 - Mar 22 0:00 1:00 D
-Rule Iran 2017 2019 - Sep 22 0:00 0 S
-Rule Iran 2020 only - Mar 21 0:00 1:00 D
-Rule Iran 2020 only - Sep 21 0:00 0 S
-Rule Iran 2021 2023 - Mar 22 0:00 1:00 D
-Rule Iran 2021 2023 - Sep 22 0:00 0 S
-Rule Iran 2024 only - Mar 21 0:00 1:00 D
-Rule Iran 2024 only - Sep 21 0:00 0 S
-Rule Iran 2025 2027 - Mar 22 0:00 1:00 D
-Rule Iran 2025 2027 - Sep 22 0:00 0 S
-Rule Iran 2028 2029 - Mar 21 0:00 1:00 D
-Rule Iran 2028 2029 - Sep 21 0:00 0 S
-Rule Iran 2030 2031 - Mar 22 0:00 1:00 D
-Rule Iran 2030 2031 - Sep 22 0:00 0 S
-Rule Iran 2032 2033 - Mar 21 0:00 1:00 D
-Rule Iran 2032 2033 - Sep 21 0:00 0 S
-Rule Iran 2034 2035 - Mar 22 0:00 1:00 D
-Rule Iran 2034 2035 - Sep 22 0:00 0 S
-Rule Iran 2036 2037 - Mar 21 0:00 1:00 D
-Rule Iran 2036 2037 - Sep 21 0:00 0 S
+Rule Iran 2005 only - Mar 22 0:00 1:00 D
+Rule Iran 2005 only - Sep 22 0:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tehran 3:25:44 - LMT 1916
3:25:44 - TMT 1946 # Tehran Mean Time
@@ -601,7 +613,8 @@ Rule Iraq 1984 1985 - Apr 1 0:00 1:00 D
Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 S
Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 D
# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the `:01' is a typo.
-# Shanks says Iraq did not observe DST 1992/1997 or 1999 on; ignore this.
+# Shanks & Pottenger say Iraq did not observe DST 1992/1997; ignore this.
+#
Rule Iraq 1991 max - Apr 1 3:00s 1:00 D
Rule Iraq 1991 max - Oct 1 3:00s 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -635,7 +648,7 @@ Zone Asia/Baghdad 2:57:40 - LMT 1890
# high on my favorite-country list (and not only because my wife's
# family is from India).
-# From Shanks:
+# From Shanks & Pottenger:
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Zion 1940 only - Jun 1 0:00 1:00 D
Rule Zion 1942 1944 - Nov 1 0:00 0 S
@@ -874,14 +887,15 @@ Zone Asia/Jerusalem 2:20:56 - LMT 1880
# of the Japanese wanted to scrap daylight-saving time, as opposed to 30% who
# wanted to keep it.)
-# Shanks writes that daylight saving in Japan during those years was as follows:
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger write that DST in Japan during those years was as follows:
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Japan 1948 only - May Sun>=1 2:00 1:00 D
Rule Japan 1948 1951 - Sep Sat>=8 2:00 0 S
Rule Japan 1949 only - Apr Sun>=1 2:00 1:00 D
Rule Japan 1950 1951 - May Sun>=1 2:00 1:00 D
# but the only locations using it (for birth certificates, presumably, since
-# Shanks's audience is astrologers) were US military bases. For now, assume
+# their audience is astrologers) were US military bases. For now, assume
# that for most purposes daylight-saving time was observed; otherwise, what
# would have been the point of the 1951 poll?
@@ -906,8 +920,9 @@ Rule Japan 1950 1951 - May Sun>=1 2:00 1:00 D
# I wrote "ordinance" above, but I don't know how to translate.
# In Japanese it's "chokurei", which means ordinance from emperor.
-# Shanks claims JST in use since 1896, and that a few places (e.g. Ishigaki)
-# use +0800; go with Suzuki. Guess that all ordinances took effect on Jan 1.
+# Shanks & Pottenger claim JST in use since 1896, and that a few
+# places (e.g. Ishigaki) use +0800; go with Suzuki. Guess that all
+# ordinances took effect on Jan 1.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
@@ -938,6 +953,10 @@ Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
# For Jordan I have received multiple independent user reports every year
# about DST end dates, as the end-rule is different every year.
#
+# From Steffen Thorsen (2006-10-01), after a heads-up from Hilal Malawi:
+# http://www.petranews.gov.jo/nepras/2006/Sep/05/4000.htm
+# "Jordan will switch to winter time on Friday, October 27".
+#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Jordan 1973 only - Jun 6 0:00 1:00 S
Rule Jordan 1973 1975 - Oct 1 0:00 0 -
@@ -964,7 +983,8 @@ Rule Jordan 1999 2002 - Sep lastThu 0:00s 0 -
Rule Jordan 2000 max - Mar lastThu 0:00s 1:00 S
Rule Jordan 2003 only - Oct 24 0:00s 0 -
Rule Jordan 2004 only - Oct 15 0:00s 0 -
-Rule Jordan 2005 max - Sep lastFri 0:00s 0 -
+Rule Jordan 2005 only - Sep lastFri 0:00s 0 -
+Rule Jordan 2006 max - Oct lastFri 0:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Amman 2:23:44 - LMT 1931
2:00 Jordan EE%sT
@@ -979,11 +999,11 @@ Zone Asia/Amman 2:23:44 - LMT 1931
# Guess that Aqtau and Aqtobe diverged in 1995, since that's the first time
# IATA SSIM mentions a third time zone in Kazakhstan.
-# From Paul Eggert (2001-10-18):
+# From Paul Eggert (2006-03-22):
# German Iofis, ELSI, Almaty (2001-10-09) reports that Kazakhstan uses
# RussiaAsia rules, instead of switching at 00:00 as the IATA has it.
-# Go with Shanks, who has them always using RussiaAsia rules.
-# Also go with the following claims of Shanks:
+# Go with Shanks & Pottenger, who have them always using RussiaAsia rules.
+# Also go with the following claims of Shanks & Pottenger:
#
# - Kazakhstan did not observe DST in 1991.
# - Qyzylorda switched from +5:00 to +6:00 on 1992-01-19 02:00.
@@ -1063,7 +1083,7 @@ Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk
5:00 - ORAT
# Kyrgyzstan (Kirgizstan)
-# Transitions through 1991 are from Shanks.
+# Transitions through 1991 are from Shanks & Pottenger.
# From Paul Eggert (2005-08-15):
# According to an article dated today in the Kyrgyzstan Development Gateway
@@ -1091,17 +1111,19 @@ Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2
# Korea (North and South)
-# From Guy Harris:
-# According to someone at the Korean Times in San Francisco,
-# Daylight Savings Time was not observed until 1987. He did not know
-# at what time of day DST starts or ends.
+# From Annie I. Bang (2006-07-10) in
+# <http://www.koreaherald.co.kr/SITE/data/html_dir/2006/07/10/200607100012.asp>:
+# The Ministry of Commerce, Industry and Energy has already
+# commissioned a research project [to reintroduce DST] and has said
+# the system may begin as early as 2008.... Korea ran a daylight
+# saving program from 1949-61 but stopped it during the 1950-53 Korean War.
-# From Shanks:
+# From Shanks & Pottenger:
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule ROK 1960 only - May 15 0:00 1:00 D
Rule ROK 1960 only - Sep 13 0:00 0 S
-Rule ROK 1987 1988 - May Sun<=14 0:00 1:00 D
-Rule ROK 1987 1988 - Oct Sun<=14 0:00 0 S
+Rule ROK 1987 1988 - May Sun>=8 0:00 1:00 D
+Rule ROK 1987 1988 - Oct Sun>=8 0:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Seoul 8:27:52 - LMT 1890
@@ -1184,8 +1206,8 @@ Zone Asia/Kuala_Lumpur 6:46:46 - LMT 1901 Jan 1
7:30 - MALT 1982 Jan 1
8:00 - MYT # Malaysia Time
# Sabah & Sarawak
-# From Paul Eggert (2003-11-01):
-# The data here are mostly from Shanks, but the 1942, 1945 and 1982
+# From Paul Eggert (2006-03-22):
+# The data here are mostly from Shanks & Pottenger, but the 1942, 1945 and 1982
# transition dates are from Mok Ly Yng.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Kuching 7:21:20 - LMT 1926 Mar
@@ -1203,8 +1225,8 @@ Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
# Mongolia
-# Shanks says that Mongolia has three time zones, but usno1995 and the CIA map
-# Standard Time Zones of the World (1997-01)
+# Shanks & Pottenger say that Mongolia has three time zones, but
+# usno1995 and the CIA map Standard Time Zones of the World (2005-03)
# both say that it has just one.
# From Oscar van Vlijmen (1999-12-11):
@@ -1274,11 +1296,19 @@ Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Mongol 1983 1984 - Apr 1 0:00 1:00 S
Rule Mongol 1983 only - Oct 1 0:00 0 -
-# IATA SSIM says 1990s switches occurred at 00:00, but Shanks (1995) lists
-# them at 02:00s, and McDow says the 2001 switches also occurred at 02:00.
-# Also, IATA SSIM (1996-09) says 1996-10-25. Go with Shanks through 1998.
-Rule Mongol 1985 1998 - Mar lastSun 2:00s 1:00 S
-Rule Mongol 1984 1998 - Sep lastSun 2:00s 0 -
+# Shanks & Pottenger and IATA SSIM say 1990s switches occurred at 00:00,
+# but McDow says the 2001 switches occurred at 02:00. Also, IATA SSIM
+# (1996-09) says 1996-10-25. Go with Shanks & Pottenger through 1998.
+#
+# Shanks & Pottenger say that the Sept. 1984 through Sept. 1990 switches
+# in Choibalsan (more precisely, in Dornod and Sukhbaatar) took place
+# at 02:00 standard time, not at 00:00 local time as in the rest of
+# the country. That would be odd, and possibly is a result of their
+# correction of 02:00 (in the previous edition) not being done correctly
+# in the latest edition; so ignore it for now.
+
+Rule Mongol 1985 1998 - Mar lastSun 0:00 1:00 S
+Rule Mongol 1984 1998 - Sep lastSun 0:00 0 -
# IATA SSIM (1999-09) says Mongolia no longer observes DST.
Rule Mongol 2001 only - Apr lastSat 2:00 1:00 S
Rule Mongol 2001 max - Sep lastSat 2:00 0 -
@@ -1404,8 +1434,8 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# I guess more info may be available from the PA's web page (if/when they
# have one).
-# From Paul Eggert (1998-02-25):
-# Shanks writes that Gaza did not observe DST until 1957, but we'll go
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger write that Gaza did not observe DST until 1957, but go
# with Shapir and assume that it observed DST from 1940 through 1947,
# and that it used Jordanian rules starting in 1996.
# We don't yet need a separate entry for the West Bank, since
@@ -1443,6 +1473,23 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# there is a good chance next year's end date will be around two weeks
# earlier--the same goes for Jordan.
+# From Steffen Thorsen (2006-08-17):
+# I was informed by a user in Bethlehem that in Bethlehem it started the
+# same day as Israel, and after checking with other users in the area, I
+# was informed that they started DST one day after Israel. I was not
+# able to find any authoritative sources at the time, nor details if
+# Gaza changed as well, but presumed Gaza to follow the same rules as
+# the West Bank.
+
+# From Steffen Thorsen (2006-09-26):
+# according to the Palestine News Network (2006-09-19):
+# http://english.pnn.ps/index.php?option=com_content&task=view&id=596&Itemid=5
+# > The Council of Ministers announced that this year its winter schedule
+# > will begin early, as of midnight Thursday. It is also time to turn
+# > back the clocks for winter. Friday will begin an hour late this week.
+# I guess it is likely that next year's date will be moved as well,
+# because of the Ramadan.
+
# The rules for Egypt are stolen from the `africa' file.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule EgyptAsia 1957 only - May 10 0:00 1:00 S
@@ -1452,10 +1499,13 @@ Rule EgyptAsia 1959 1967 - May 1 1:00 1:00 S
Rule EgyptAsia 1959 1965 - Sep 30 3:00 0 -
Rule EgyptAsia 1966 only - Oct 1 3:00 0 -
-Rule Palestine 1999 max - Apr Fri>=15 0:00 1:00 S
+Rule Palestine 1999 2005 - Apr Fri>=15 0:00 1:00 S
Rule Palestine 1999 2003 - Oct Fri>=15 0:00 0 -
Rule Palestine 2004 only - Oct 1 1:00 0 -
-Rule Palestine 2005 max - Oct 4 2:00 0 -
+Rule Palestine 2005 only - Oct 4 2:00 0 -
+Rule Palestine 2006 max - Apr 1 0:00 1:00 S
+Rule Palestine 2006 only - Sep 22 0:00 0 -
+Rule Palestine 2007 max - Oct Fri>=15 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Gaza 2:17:52 - LMT 1900 Oct
@@ -1473,7 +1523,21 @@ Zone Asia/Gaza 2:17:52 - LMT 1900 Oct
# Philippines, issued a proclamation announcing that 1844-12-30 was to
# be immediately followed by 1845-01-01. Robert H. van Gent has a
# transcript of the decree in <http://www.phys.uu.nl/~vgent/idl/idl.htm>.
-# The rest of this data is from Shanks.
+# The rest of the data are from Shanks & Pottenger.
+
+# From Paul Eggert (2006-04-25):
+# Tomorrow's Manila Standard reports that the Philippines Department of
+# Trade and Industry is considering adopting DST this June when the
+# rainy season begins. See
+# <http://www.manilastandardtoday.com/?page=politics02_april26_2006>.
+# For now, we'll ignore this, since it's not definite and we lack details.
+#
+# From Jesper Norgaard Welen (2006-04-26):
+# ... claims that Philippines had DST last time in 1990:
+# http://story.philippinetimes.com/p.x/ct/9/id/145be20cc6b121c0/cid/3e5bbccc730d258c/
+# [a story dated 2006-04-25 by Cris Larano of Dow Jones Newswires,
+# but no details]
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Phil 1936 only - Nov 1 0:00 1:00 S
Rule Phil 1937 only - Feb 1 0:00 0 -
@@ -1533,6 +1597,49 @@ Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
# With effect from 12.30 a.m. on 26th October 1996
# Sri Lanka will be six (06) hours ahead of GMT.
+# From Jesper Norgaard Welen (2006-04-14), quoting Sri Lanka News Online
+# <http://news.sinhalaya.com/wmview.php?ArtID=11002> (2006-04-13):
+# 0030 hrs on April 15, 2006 (midnight of April 14, 2006 +30 minutes)
+# at present, become 2400 hours of April 14, 2006 (midnight of April 14, 2006).
+
+# From Peter Apps and Ranga Sirila of Reuters (2006-04-12) in:
+# <http://today.reuters.co.uk/news/newsArticle.aspx?type=scienceNews&storyID=2006-04-12T172228Z_01_COL295762_RTRIDST_0_SCIENCE-SRILANKA-TIME-DC.XML>
+# [The Tamil Tigers] never accepted the original 1996 time change and simply
+# kept their clocks set five and a half hours ahead of Greenwich Mean
+# Time (GMT), in line with neighbor India.
+# From Paul Eggert (2006-04-18):
+# People who live in regions under Tamil control can use TZ='Asia/Calcutta',
+# as that zone has agreed with the Tamil areas since our cutoff date of 1970.
+
+# From K Sethu (2006-04-25):
+# I think the abbreviation LKT originated from the world of computers at
+# the time of or subsequent to the time zone changes by SL Government
+# twice in 1996 and probably SL Government or its standardization
+# agencies never declared an abbreviation as a national standard.
+#
+# I recollect before the recent change the government annoucemments
+# mentioning it as simply changing Sri Lanka Standard Time or Sri Lanka
+# Time and no mention was made about the abbreviation.
+#
+# If we look at Sri Lanka Department of Government's "Official News
+# Website of Sri Lanka" ... http://www.news.lk/ we can see that they
+# use SLT as abbreviation in time stamp at the beginning of each news
+# item....
+#
+# Within Sri Lanka I think LKT is well known among computer users and
+# adminsitrators. In my opinion SLT may not be a good choice because the
+# nation's largest telcom / internet operator Sri Lanka Telcom is well
+# known by that abbreviation - simply as SLT (there IP domains are
+# slt.lk and sltnet.lk).
+#
+# But if indeed our government has adopted SLT as standard abbreviation
+# (that we have not known so far) then it is better that it be used for
+# all computers.
+
+# From Paul Eggert (2006-04-25):
+# One possibility is that we wait for a bit for the dust to settle down
+# and then see what people actually say in practice.
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Colombo 5:19:24 - LMT 1880
5:19:32 - MMT 1906 # Moratuwa Mean Time
@@ -1541,7 +1648,8 @@ Zone Asia/Colombo 5:19:24 - LMT 1880
5:30 1:00 IST 1945 Oct 16 2:00
5:30 - IST 1996 May 25 0:00
6:30 - LKT 1996 Oct 26 0:30
- 6:00 - LKT
+ 6:00 - LKT 2006 Apr 15 0:30
+ 5:30 - IST
# Syria
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -1576,17 +1684,24 @@ Rule Syria 1993 only - Sep 25 0:00 0 -
# IATA SSIM (1998-02) says 1998-04-02;
# (1998-09) says 1999-03-29 and 1999-09-29; (1999-02) says 1999-04-02,
# 2000-04-02, and 2001-04-02; (1999-09) says 2000-03-31 and 2001-03-31;
-# ignore all these claims and go with Shanks.
+# (2006) says 2006-03-31 and 2006-09-22;
+# for now ignore all these claims and go with Shanks & Pottenger,
+# except for the 2006-09-22 claim (which seems right for Ramadan).
Rule Syria 1994 1996 - Apr 1 0:00 1:00 S
-Rule Syria 1994 max - Oct 1 0:00 0 -
+Rule Syria 1994 2005 - Oct 1 0:00 0 -
Rule Syria 1997 1998 - Mar lastMon 0:00 1:00 S
Rule Syria 1999 max - Apr 1 0:00 1:00 S
+# From Stephen Colebourne (2006-09-18):
+# According to IATA data, Syria will change DST on 21st September [21:00 UTC]
+# this year [only].... This is probably related to Ramadan, like Egypt.
+Rule Syria 2006 only - Sep 22 0:00 0 -
+Rule Syria 2007 max - Oct 1 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq
2:00 Syria EE%sT
# Tajikistan
-# From Shanks.
+# From Shanks & Pottenger.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
5:00 - DUST 1930 Jun 21 # Dushanbe Time
@@ -1601,13 +1716,13 @@ Zone Asia/Bangkok 6:42:04 - LMT 1880
7:00 - ICT
# Turkmenistan
-# From Shanks.
+# From Shanks & Pottenger.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad
4:00 - ASHT 1930 Jun 21 # Ashkhabad Time
5:00 RussiaAsia ASH%sT 1991 Mar 31 2:00
4:00 RussiaAsia ASH%sT 1991 Oct 27 # independence
- 4:00 RussiaAsia TM%sT 1992 Jan 19 2:00
+ 4:00 RussiaAsia TM%sT 1992 Jan 19 2:00
5:00 - TMT
# United Arab Emirates
@@ -1621,24 +1736,24 @@ Zone Asia/Samarkand 4:27:12 - LMT 1924 May 2
4:00 - SAMT 1930 Jun 21 # Samarkand Time
5:00 - SAMT 1981 Apr 1
5:00 1:00 SAMST 1981 Oct 1
- 6:00 RussiaAsia TAS%sT 1991 Mar 31 2:00 # Tashkent Time
- 5:00 RussiaAsia TAS%sT 1991 Sep 1 # independence
+ 6:00 - TAST 1982 Apr 1 # Tashkent Time
+ 5:00 RussiaAsia SAM%sT 1991 Sep 1 # independence
5:00 RussiaAsia UZ%sT 1992
- 5:00 RussiaAsia UZ%sT 1993
5:00 - UZT
Zone Asia/Tashkent 4:37:12 - LMT 1924 May 2
5:00 - TAST 1930 Jun 21 # Tashkent Time
- 6:00 RussiaAsia TAS%sT 1991 Mar 31 2:00s
+ 6:00 RussiaAsia TAS%sT 1991 Mar 31 2:00
5:00 RussiaAsia TAS%sT 1991 Sep 1 # independence
5:00 RussiaAsia UZ%sT 1992
- 5:00 RussiaAsia UZ%sT 1993
5:00 - UZT
# Vietnam
+
# From Paul Eggert (1993-11-18):
# Saigon's official name is Thanh-Pho Ho Chi Minh, but it's too long.
# We'll stick with the traditional name for now.
-# From Shanks:
+
+# From Shanks & Pottenger:
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Saigon 7:06:40 - LMT 1906 Jun 9
7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
diff --git a/libc/timezone/australasia b/libc/timezone/australasia
index 70b845560..2e17bcc0c 100644
--- a/libc/timezone/australasia
+++ b/libc/timezone/australasia
@@ -1,4 +1,4 @@
-# @(#)australasia 8.1
+# @(#)australasia 8.3
# <pre>
# This file also includes Pacific islands.
@@ -210,7 +210,7 @@ Zone Indian/Christmas 7:02:52 - LMT 1895 Feb
7:00 - CXT # Christmas Island Time
# Cook Is
-# From Shanks:
+# From Shanks & Pottenger:
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Cook 1978 only - Nov 12 0:00 0:30 HS
Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 -
@@ -308,7 +308,7 @@ Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe
Rule NC 1977 1978 - Dec Sun>=1 0:00 1:00 S
Rule NC 1978 1979 - Feb 27 0:00 0 -
Rule NC 1996 only - Dec 1 2:00s 1:00 S
-# Shanks says the following was at 2:00; go with IATA.
+# Shanks & Pottenger say the following was at 2:00; go with IATA.
Rule NC 1997 only - Mar 2 2:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Noumea 11:05:48 - LMT 1912 Jan 13
@@ -507,10 +507,10 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert (1999-10-29):
+# From Paul Eggert (2006-03-22):
# A good source for time zone historical data outside the U.S. is
-# Thomas G. Shanks, The International Atlas (5th edition),
-# San Diego: ACS Publications, Inc. (1999).
+# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
+# San Diego: ACS Publications, Inc. (2003).
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
@@ -518,8 +518,8 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# published semiannually. Law sent in several helpful summaries
# of the IATA's data after 1990.
#
-# Except where otherwise noted, Shanks is the source for entries through 1990,
-# and IATA SSIM is the source for entries after 1990.
+# Except where otherwise noted, Shanks & Pottenger is the source for
+# entries through 1990, and IATA SSIM is the source for entries afterwards.
#
# Another source occasionally used is Edward W. Whitman, World Time Differences,
# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
@@ -587,6 +587,12 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# WST for any place operating at a GMTOFF of 8:00
# EST for any place operating at a GMTOFF of 10:00
+# From Chuck Soper (2006-06-01):
+# I recently found this Australian government web page on time zones:
+# <http://www.australia.gov.au/about-australia-13time>
+# And this government web page lists time zone names and abbreviations:
+# <http://www.bom.gov.au/climate/averages/tables/daysavtm.shtml>
+
# From Paul Eggert (2001-04-05), summarizing a long discussion about "EST"
# versus "AEST" etc.:
#
@@ -669,7 +675,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# understood in Australia.
# From Paul Eggert (1995-12-19):
-# Shanks reports 2:00 for all autumn changes in Australia and New Zealand.
+# Shanks & Pottenger report 2:00 for all autumn changes in Australia and NZ.
# Mark Prior writes that his newspaper
# reports that NSW's fall 1995 change will occur at 2:00,
# but Robert Elz says it's been 3:00 in Victoria since 1970
@@ -842,14 +848,14 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# current DST ending dates, no worries.
#
# Rule Oz 1971 1985 - Oct lastSun 2:00 1:00 -
-# Rule Oz 1986 max - Oct Sun<=24 2:00 1:00 -
+# Rule Oz 1986 max - Oct Sun>=18 2:00 1:00 -
# Rule Oz 1972 only - Feb 27 3:00 0 -
# Rule Oz 1973 1986 - Mar Sun>=1 3:00 0 -
-# Rule Oz 1987 max - Mar Sun<=21 3:00 0 -
+# Rule Oz 1987 max - Mar Sun>=15 3:00 0 -
# Zone Australia/Tasmania 10:00 Oz EST
# Zone Australia/South 9:30 Oz CST
# Zone Australia/Victoria 10:00 Oz EST 1985 Oct lastSun 2:00
-# 10:00 1:00 EST 1986 Mar Sun<=21 3:00
+# 10:00 1:00 EST 1986 Mar Sun>=15 3:00
# 10:00 Oz EST
# From Robert Elz (1991-03-06):
@@ -875,7 +881,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# ...
# Rule AS 1971 max - Oct lastSun 2:00 1:00 D
# Rule AS 1972 1985 - Mar Sun>=1 3:00 0 C
-# Rule AS 1986 1990 - Mar Sun<=21 3:00 0 C
+# Rule AS 1986 1990 - Mar Sun>=15 3:00 0 C
# Rule AS 1991 max - Mar Sun>=1 3:00 0 C
# From Bradley White (1992-03-11):
@@ -1068,9 +1074,9 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# shown on clocks on LHI. I guess this means that for 30 minutes at the start
# of DST, LHI is actually 1 hour ahead of the rest of NSW.
-# From Paul Eggert (2001-02-09):
-# For Lord Howe dates we use Shanks through 1989, and Lonergan thereafter.
-# For times we use Lonergan.
+# From Paul Eggert (2006-03-22):
+# For Lord Howe dates we use Shanks & Pottenger through 1989, and
+# Lonergan thereafter. For times we use Lonergan.
###############################################################################
@@ -1101,16 +1107,16 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# rather than the October 1 value.
# From Paul Eggert (1995-12-19);
-# Shanks reports 2:00 for all autumn changes in Australia and New Zealand.
+# Shank & Pottenger report 2:00 for all autumn changes in Australia and NZ.
# Robert Uzgalis writes that the New Zealand Daylight
# Savings Time Order in Council dated 1990-06-18 specifies 2:00 standard
# time on both the first Sunday in October and the third Sunday in March.
# As with Australia, we'll assume the tradition is 2:00s, not 2:00.
#
-# From Paul Eggert (2003-05-26):
+# From Paul Eggert (2006-03-22):
# The Department of Internal Affairs (DIA) maintains a brief history,
# as does Carol Squires; see tz-link.htm for the full references.
-# Use these sources in preference to Shanks.
+# Use these sources in preference to Shanks & Pottenger.
#
# For Chatham, IATA SSIM (1991/1999) gives the NZ rules but with
# transitions at 2:45 local standard time; this confirms that Chatham
@@ -1185,8 +1191,8 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# ``I am certain, having lived there for the past decade, that "Truk"
# (now properly known as Chuuk) ... is in the time zone GMT+10.''
#
-# Shanks writes that Truk switched from UTC+10 to UTC+11 on 1978-10-01;
-# ignore this for now.
+# Shanks & Pottenger write that Truk switched from UTC+10 to UTC+11
+# on 1978-10-01; ignore this for now.
# From Paul Eggert (1999-10-29):
# The Federated States of Micronesia Visitors Board writes in
@@ -1279,8 +1285,8 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# on the World Day of Prayer, you would be the first people on Earth
# to say your prayers in the morning."
-# From Paul Eggert (1999-08-12):
-# Shanks says the transition was on 1968-10-01; go with Mundell.
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger say the transition was on 1968-10-01; go with Mundell.
# From Eric Ulevik (1999-05-03):
# Tonga's director of tourism, who is also secretary of the National Millenium
diff --git a/libc/timezone/backward b/libc/timezone/backward
index 66fbf3061..00824407f 100644
--- a/libc/timezone/backward
+++ b/libc/timezone/backward
@@ -1,4 +1,4 @@
-# @(#)backward 8.1
+# @(#)backward 8.2
# This file provides links between current names for time zones
# and their old names. Many names changed in late 1993.
@@ -8,6 +8,7 @@ Link America/Argentina/Catamarca America/Argentina/ComodRivadavia
Link America/Adak America/Atka
Link America/Argentina/Buenos_Aires America/Buenos_Aires
Link America/Argentina/Catamarca America/Catamarca
+Link America/Atikokan America/Coral_Harbour
Link America/Argentina/Cordoba America/Cordoba
Link America/Tijuana America/Ensenada
Link America/Indiana/Indianapolis America/Fort_Wayne
diff --git a/libc/timezone/checktab.awk b/libc/timezone/checktab.awk
index 6d532141e..80ad7d570 100644
--- a/libc/timezone/checktab.awk
+++ b/libc/timezone/checktab.awk
@@ -1,6 +1,6 @@
# Check tz tables for consistency.
-# @(#)checktab.awk 1.7
+# @(#)checktab.awk 8.1
# Contributed by Paul Eggert.
diff --git a/libc/timezone/europe b/libc/timezone/europe
index 54146d740..b3a3b269d 100644
--- a/libc/timezone/europe
+++ b/libc/timezone/europe
@@ -1,14 +1,14 @@
-# @(#)europe 8.1
+# @(#)europe 8.6
# <pre>
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert (1999-10-29):
+# From Paul Eggert (2006-03-22):
# A good source for time zone historical data outside the U.S. is
-# Thomas G. Shanks, The International Atlas (5th edition),
-# San Diego: ACS Publications, Inc. (1999).
+# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
+# San Diego: ACS Publications, Inc. (2003).
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
@@ -16,8 +16,8 @@
# published semiannually. Law sent in several helpful summaries
# of the IATA's data after 1990.
#
-# Except where otherwise noted, Shanks is the source for entries through 1991,
-# and IATA SSIM is the source for entries afterwards.
+# Except where otherwise noted, Shanks & Pottenger is the source for
+# entries through 1991, and IATA SSIM is the source for entries afterwards.
#
# Other sources occasionally used include:
#
@@ -221,11 +221,12 @@
# (Lords Hansard 11 June 1997 columns 964 to 976)
# </a>.
-# From Paul Eggert (2001-07-18):
+# From Paul Eggert (2006-03-22):
#
-# For lack of other data, we'll follow Shanks for Eire in 1940-1948.
+# For lack of other data, follow Shanks & Pottenger for Eire in 1940-1948.
#
-# Given Ilieve and Myers's data, the following claims by Shanks are incorrect:
+# Given Ilieve and Myers's data, the following claims by Shanks & Pottenger
+# are incorrect:
# * Wales did not switch from GMT to daylight saving time until
# 1921 Apr 3, when they began to conform with the rest of Great Britain.
# Actually, Wales was identical after 1880.
@@ -237,18 +238,19 @@
# Actually, that date saw the usual switch to summer time.
# Standard time was not changed until 1968-10-27 (the clocks didn't change).
#
-# Here is another incorrect claim by Shanks:
+# Here is another incorrect claim by Shanks & Pottenger:
# * Jersey, Guernsey, and the Isle of Man did not switch from GMT
# to daylight saving time until 1921 Apr 3, when they began to
# conform with Great Britain.
# S.R.&O. 1916, No. 382 and HO 45/10811/312364 (quoted above) say otherwise.
#
-# The following claim by Shanks is possible though doubtful;
+# The following claim by Shanks & Pottenger is possible though doubtful;
# we'll ignore it for now.
# * 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.
+# Whitman says Dublin Mean Time was -0:25:21, which is more precise than
+# Shanks & Pottenger.
# Perhaps this was Dunsink Observatory Time, as Dunsink Observatory
# (8 km NW of Dublin's center) seemingly was to Dublin as Greenwich was
# to London. For example:
@@ -418,11 +420,14 @@ Rule GB-Eire 1990 1995 - Oct Sun>=22 1:00u 0 GMT
# See EU for rules starting in 1996.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/London -0:01:15 - LMT 1847 Dec 1
+Zone Europe/London -0:01:15 - LMT 1847 Dec 1 0:00s
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
+Link Europe/London Europe/Jersey
+Link Europe/London Europe/Guernsey
+Link Europe/London Europe/Isle_of_Man
Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2
-0:25:21 - DMT 1916 May 21 2:00
-0:25:21 1:00 IST 1916 Oct 1 2:00s
@@ -476,7 +481,7 @@ Rule C-Eur 1942 only - Nov 2 2:00s 0 -
Rule C-Eur 1943 only - Mar 29 2:00s 1:00 S
Rule C-Eur 1943 only - Oct 4 2:00s 0 -
Rule C-Eur 1944 only - Apr 3 2:00s 1:00 S
-# Whitman gives 1944 Oct 7; go with Shanks.
+# Whitman gives 1944 Oct 7; go with Shanks & Pottenger.
Rule C-Eur 1944 only - Oct 2 2:00s 0 -
Rule C-Eur 1977 1980 - Apr Sun>=1 2:00s 1:00 S
Rule C-Eur 1977 only - Sep lastSun 2:00s 0 -
@@ -596,12 +601,12 @@ Zone Europe/Andorra 0:06:04 - LMT 1901
# Austria
-# From Paul Eggert (2003-02-28): Shanks gives 1918-06-16 and
+# From Paul Eggert (2006-03-22): Shanks & Pottenger give 1918-06-16 and
# 1945-11-18, but the Austrian Federal Office of Metrology and
# Surveying (BEV) gives 1918-09-16 and for Vienna gives the "alleged"
# date of 1945-04-12 with no time. For the 1980-04-06 transition
-# Shanks gives 02:00, the BEV 00:00. Go with the BEV, and guess 02:00
-# for 1945-04-12.
+# Shanks & Pottenger give 02:00, the BEV 00:00. Go with the BEV,
+# and guess 02:00 for 1945-04-12.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Austria 1920 only - Apr 5 2:00s 1:00 S
@@ -701,7 +706,7 @@ Zone Europe/Brussels 0:17:30 - LMT 1880
1:00 EU CE%sT
# Bosnia and Herzegovina
-# see Serbia and Montenegro
+# see Serbia
# Bulgaria
#
@@ -713,7 +718,7 @@ Zone Europe/Brussels 0:17:30 - LMT 1880
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Bulg 1979 only - Mar 31 23:00 1:00 S
Rule Bulg 1979 only - Oct 1 1:00 0 -
-Rule Bulg 1980 1982 - Apr Sat<=7 23:00 1:00 S
+Rule Bulg 1980 1982 - Apr Sat>=1 23:00 1:00 S
Rule Bulg 1980 only - Sep 29 1:00 0 -
Rule Bulg 1981 only - Sep 27 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -728,7 +733,7 @@ Zone Europe/Sofia 1:33:16 - LMT 1880
2:00 EU EE%sT
# Croatia
-# see Serbia and Montenegro
+# see Serbia
# Cyprus
# Please see the `asia' file for Asia/Nicosia.
@@ -813,10 +818,10 @@ Zone Atlantic/Faeroe -0:27:04 - LMT 1908 Jan 11 # Torshavn
# East Greenland and Franz Josef Land, but we don't know their time zones.
# My source for this is Wilhelm Dege's book mentioned under Svalbard.
#
-# From Paul Eggert (1996-11-22):
+# From Paul Eggert (2006-03-22):
# Greenland joined the EU as part of Denmark, obtained home rule on 1979-05-01,
# and left the EU on 1985-02-01. It therefore should have been using EU
-# rules at least through 1984. Shanks says Scoresbysund and Godthab
+# rules at least through 1984. Shanks & Pottenger say Scoresbysund and Godthab
# used C-Eur rules after 1980, but IATA SSIM (1991/1996) says they use EU
# rules since at least 1991. Assume EU rules since 1980.
@@ -871,24 +876,28 @@ Zone Atlantic/Faeroe -0:27:04 - LMT 1908 Jan 11 # Torshavn
# I heard back from someone stationed at Thule; the time change took place
# there at 2:00 AM.
-# From Paul Eggert (2001-11-19):
-# The 1997 CIA map shows Danmarkshavn on GMT; the 1995 map as like Godthab.
+# From Paul Eggert (2006-03-22):
+# From 1997 on the CIA map shows Danmarkshavn on GMT;
+# the 1995 map as like Godthab.
# For lack of better info, assume they were like Godthab before 1996.
# startkart.no says Thule does not observe DST, but this is clearly an error,
-# so go with Shanks for all Thule transitions.
+# so go with Shanks & Pottenger for Thule transitions until this year.
+# For 2007 on assume Thule will stay in sync with US DST rules.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Thule 1991 1992 - Mar lastSun 2:00 1:00 D
Rule Thule 1991 1992 - Sep lastSun 2:00 0 S
-Rule Thule 1993 max - Apr Sun>=1 2:00 1:00 D
-Rule Thule 1993 max - Oct lastSun 2:00 0 S
+Rule Thule 1993 2006 - Apr Sun>=1 2:00 1:00 D
+Rule Thule 1993 2006 - Oct lastSun 2:00 0 S
+Rule Thule 2007 max - Mar Sun>=8 2:00 1:00 D
+Rule Thule 2007 max - Nov Sun>=1 2:00 0 S
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28
-3:00 - WGT 1980 Apr 6 2:00
-3:00 EU WG%sT 1996
0:00 - GMT
-Zone America/Scoresbysund -1:29:00 - LMT 1916 Jul 28 # Ittoqqortoormiit
+Zone America/Scoresbysund -1:27:52 - LMT 1916 Jul 28 # Ittoqqortoormiit
-2:00 - CGT 1980 Apr 6 2:00
-2:00 C-Eur CG%sT 1981 Mar 29
-1:00 EU EG%sT
@@ -963,13 +972,13 @@ Zone Europe/Tallinn 1:39:00 - LMT 1880
# Finland
#
-# From Hannu Strang (25 Sep 1994 06:03:37 UTC):
+# From Hannu Strang (1994-09-25 06:03:37 UTC):
# Well, here in Helsinki we're just changing from summer time to regular one,
# and it's supposed to change at 4am...
#
-# From Paul Eggert (25 Sep 1994):
-# Shanks says Finland has switched at 02:00 standard time since 1981.
-# Go with Strang instead.
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger say Finland has switched at 02:00 standard time
+# since 1981. Go with Strang instead.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Finland 1942 only - Apr 3 0:00 1:00 S
@@ -999,7 +1008,7 @@ Link Europe/Helsinki Europe/Mariehamn
#
-# Shanks seems to use `24:00' ambiguously; we resolve it with Whitman.
+# Shank & Pottenger seem to use `24:00' ambiguously; resolve it with Whitman.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule France 1916 only - Jun 14 23:00s 1:00 S
Rule France 1916 1919 - Oct Sun>=1 23:00s 0 -
@@ -1013,7 +1022,7 @@ Rule France 1921 only - Oct 25 23:00s 0 -
Rule France 1922 only - Mar 25 23:00s 1:00 S
# DSH writes that a law of 1923-05-24 specified 3rd Sat in Apr at 23:00 to 1st
# Sat in Oct at 24:00; and that in 1930, because of Easter, the transitions
-# were Apr 12 and Oct 5. Go with Shanks.
+# were Apr 12 and Oct 5. Go with Shanks & Pottenger.
Rule France 1922 1938 - Oct Sat>=1 23:00s 0 -
Rule France 1923 only - May 26 23:00s 1:00 S
Rule France 1924 only - Mar 29 23:00s 1:00 S
@@ -1034,8 +1043,8 @@ Rule France 1938 only - Mar 26 23:00s 1:00 S
Rule France 1939 only - Apr 15 23:00s 1:00 S
Rule France 1939 only - Nov 18 23:00s 0 -
Rule France 1940 only - Feb 25 2:00 1:00 S
-# The French rules for 1941-1944 were not used in Paris, but Shanks writes
-# that they were used in Monaco and in many French locations.
+# The French rules for 1941-1944 were not used in Paris, but Shanks & Pottenger
+# write that they were used in Monaco and in many French locations.
# Le Corre writes that the upper limit of the free zone was Arneguy, Orthez,
# Mont-de-Marsan, Bazas, Langon, Lamotte-Montravel, Marouil, La
# Rochefoucault, Champagne-Mouton, La Roche-Posay, La Haye-Decartes,
@@ -1043,7 +1052,7 @@ Rule France 1940 only - Feb 25 2:00 1:00 S
# Paray-le-Monial, Montceau-les-Mines, Chalons-sur-Saone, Arbois,
# Dole, Morez, St-Claude, and Collognes (Haute-Savioe).
Rule France 1941 only - May 5 0:00 2:00 M # Midsummer
-# Shanks says this transition occurred at Oct 6 1:00,
+# Shanks & Pottenger say this transition occurred at Oct 6 1:00,
# but go with Denis Excoffier (1997-12-12),
# who quotes the Ephemerides Astronomiques for 1998 from Bureau des Longitudes
# as saying 5/10/41 22hUT.
@@ -1056,21 +1065,21 @@ Rule France 1944 only - Apr 3 2:00 2:00 M
Rule France 1944 only - Oct 8 1:00 1:00 S
Rule France 1945 only - Apr 2 2:00 2:00 M
Rule France 1945 only - Sep 16 3:00 0 -
-# Shanks gives Mar 28 2:00 and Sep 26 3:00;
+# Shanks & Pottenger give Mar 28 2:00 and Sep 26 3:00;
# go with Excoffier's 28/3/76 0hUT and 25/9/76 23hUT.
Rule France 1976 only - Mar 28 1:00 1:00 S
Rule France 1976 only - Sep 26 1:00 0 -
-# Shanks gives 0:09 for Paris Mean Time, and Whitman gives 0:09:05,
+# Shanks & Pottenger give 0:09:20 for Paris Mean Time, and Whitman 0:09:05,
# but Howse quotes the actual French legislation as saying 0:09:21.
# Go with Howse. Howse writes that the time in France was officially based
# on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01
0:09:21 - PMT 1911 Mar 11 0:01 # Paris MT
-# Shanks gives 1940 Jun 14 0:00; go with Excoffier and Le Corre.
+# Shanks & Pottenger give 1940 Jun 14 0:00; go with Excoffier and Le Corre.
0:00 France WE%sT 1940 Jun 14 23:00
# Le Corre says Paris stuck with occupied-France time after the liberation;
-# go with Shanks.
+# go with Shanks & Pottenger.
1:00 C-Eur CE%sT 1944 Aug 25
0:00 France WE%sT 1945 Sep 16 3:00
1:00 France CE%sT 1977
@@ -1121,23 +1130,23 @@ Zone Europe/Berlin 0:53:28 - LMT 1893 Apr
# Gibraltar
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Gibraltar -0:21:24 - LMT 1880 Aug 2
+Zone Europe/Gibraltar -0:21:24 - LMT 1880 Aug 2 0:00s
0:00 GB-Eire %s 1957 Apr 14 2:00
1:00 - CET 1982
1:00 EU CE%sT
# Greece
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# Whitman gives 1932 Jul 5 - Nov 1; go with Shanks.
+# Whitman gives 1932 Jul 5 - Nov 1; go with Shanks & Pottenger.
Rule Greece 1932 only - Jul 7 0:00 1:00 S
Rule Greece 1932 only - Sep 1 0:00 0 -
-# Whitman gives 1941 Apr 25 - ?; go with Shanks.
+# Whitman gives 1941 Apr 25 - ?; go with Shanks & Pottenger.
Rule Greece 1941 only - Apr 7 0:00 1:00 S
-# Whitman gives 1942 Feb 2 - ?; go with Shanks.
+# Whitman gives 1942 Feb 2 - ?; go with Shanks & Pottenger.
Rule Greece 1942 only - Nov 2 3:00 0 -
Rule Greece 1943 only - Mar 30 0:00 1:00 S
Rule Greece 1943 only - Oct 4 0:00 0 -
-# Whitman gives 1944 Oct 3 - Oct 31; go with Shanks.
+# Whitman gives 1944 Oct 3 - Oct 31; go with Shanks & Pottenger.
Rule Greece 1952 only - Jul 1 0:00 1:00 S
Rule Greece 1952 only - Nov 2 0:00 0 -
Rule Greece 1975 only - Apr 12 0:00s 1:00 S
@@ -1157,7 +1166,7 @@ Zone Europe/Athens 1:34:52 - LMT 1895 Sep 14
2:00 Greece EE%sT 1941 Apr 30
1:00 Greece CE%sT 1944 Apr 4
2:00 Greece EE%sT 1981
- # Shanks says they switched to C-Eur in 1981;
+ # Shanks & Pottenger say it switched to C-Eur in 1981;
# go with EU instead, since Greece joined it on Jan 1.
2:00 EU EE%sT
@@ -1220,10 +1229,10 @@ Zone Europe/Budapest 1:16:20 - LMT 1890 Oct
# might be a reference to the Julian calendar as opposed to Gregorian, or it
# might mean something else (???).
#
-# From Paul Eggert (1999-10-29):
-# The Iceland Almanak, Shanks and Whitman disagree on many points.
-# We go with the Almanak, except for one claim from Shanks, namely that
-# Reykavik was 21W57 from 1837 to 1908, local mean time before that.
+# From Paul Eggert (2006-03-22):
+# The Iceland Almanak, Shanks & Pottenger, and Whitman disagree on many points.
+# We go with the Almanak, except for one claim from Shanks & Pottenger, namely
+# that Reykavik was 21W57 from 1837 to 1908, local mean time before that.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Iceland 1917 1918 - Feb 19 23:00 1:00 S
@@ -1261,15 +1270,16 @@ Zone Atlantic/Reykjavik -1:27:24 - LMT 1837
# But these events all occurred before the 1970 cutoff,
# so record only the time in Rome.
#
-# From Paul Eggert (1996-05-06):
-# For Italian DST we have three sources: Shanks, Whitman, and F. Pollastri
+# From Paul Eggert (2006-03-22):
+# For Italian DST we have three sources: Shanks & Pottenger, Whitman, and
+# F. Pollastri
# <a href="http://toi.iriti.cnr.it/uk/ienitlt.html">
-# Day-light Saving Time in Italy (1996-03-14)
+# Day-light Saving Time in Italy (2006-02-03)
# </a>
# (`FP' below), taken from an Italian National Electrotechnical Institute
# publication. When the three sources disagree, guess who's right, as follows:
#
-# year FP Shanks (S) Whitman (W) Go with:
+# year FP Shanks&P. (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
@@ -1325,7 +1335,7 @@ Rule Italy 1978 only - Oct 1 0:00s 0 -
Rule Italy 1979 only - Sep 30 0:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Rome 0:49:56 - LMT 1866 Sep 22
- 0:49:56 - RMT 1893 Nov # Rome Mean Time
+ 0:49:56 - RMT 1893 Nov 1 0:00s # Rome Mean
1:00 Italy CE%sT 1942 Nov 2 2:00s
1:00 C-Eur CE%sT 1944 Jul
1:00 Italy CE%sT 1980
@@ -1467,7 +1477,8 @@ Zone Europe/Vilnius 1:41:16 - LMT 1880
2:00 EU EE%sT
# Luxembourg
-# Whitman disagrees with most of these dates in minor ways; go with Shanks.
+# Whitman disagrees with most of these dates in minor ways;
+# go with Shanks & Pottenger.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Lux 1916 only - May 14 23:00 1:00 S
Rule Lux 1916 only - Oct 1 1:00 0 -
@@ -1502,7 +1513,7 @@ Zone Europe/Luxembourg 0:24:36 - LMT 1904 Jun
1:00 EU CE%sT
# Macedonia
-# see Serbia and Montenegro
+# see Serbia
# Malta
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -1514,7 +1525,7 @@ Rule Malta 1975 1979 - Apr Sun>=15 2:00 1:00 S
Rule Malta 1975 1980 - Sep Sun>=15 2:00 0 -
Rule Malta 1980 only - Mar 31 2:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 # Valletta
+Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta
1:00 Italy CE%sT 1942 Nov 2 2:00s
1:00 C-Eur CE%sT 1945 Apr 2 2:00s
1:00 Italy CE%sT 1973 Mar 31
@@ -1523,9 +1534,9 @@ Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 # Valletta
# Moldova
-# From Paul Eggert (2001-02-11):
-# A previous version of this database followed Shanks, who writes that
-# Tiraspol switched to Moscow time on 1992-01-19 at 02:00.
+# From Paul Eggert (2006-03-22):
+# A previous version of this database followed Shanks & Pottenger, who write
+# that Tiraspol switched to Moscow time on 1992-01-19 at 02:00.
# However, this is most likely an error, as Moldova declared independence
# on 1991-08-27 (the 1992-01-19 date is that of a Russian decree).
# In early 1992 there was large-scale interethnic violence in the area
@@ -1550,7 +1561,8 @@ Zone Europe/Chisinau 1:55:20 - LMT 1880
2:00 EU EE%sT
# Monaco
-# Shanks gives 0:09 for Paris Mean Time; go with Howse's more precise 0:09:21.
+# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
+# more precise 0:09:21.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
@@ -1558,6 +1570,9 @@ Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
1:00 France CE%sT 1977
1:00 EU CE%sT
+# Montenegro
+# see Serbia
+
# Netherlands
# Howse writes that the Netherlands' railways used GMT between 1892 and 1940,
@@ -1633,7 +1648,8 @@ Zone Europe/Amsterdam 0:19:32 - LMT 1835
1:00 EU CE%sT
# Norway
-# http://met.no/met/met_lex/q_u/sommertid.html (2004-01) agrees with Shanks.
+# http://met.no/met/met_lex/q_u/sommertid.html (2004-01) agrees with Shanks &
+# Pottenger.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Norway 1916 only - May 22 1:00 1:00 S
Rule Norway 1916 only - Sep 30 0:00 0 -
@@ -1704,9 +1720,10 @@ Link Europe/Oslo Atlantic/Jan_Mayen
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Poland 1918 1919 - Sep 16 2:00s 0 -
Rule Poland 1919 only - Apr 15 2:00s 1:00 S
-# Whitman gives 1944 Nov 30; go with Shanks.
+Rule Poland 1944 only - Apr 3 2:00s 1:00 S
+# Whitman gives 1944 Nov 30; go with Shanks & Pottenger.
Rule Poland 1944 only - Oct 4 2:00 0 -
-# For 1944-1948 Whitman gives the previous day; go with Shanks.
+# For 1944-1948 Whitman gives the previous day; go with Shanks & Pottenger.
Rule Poland 1945 only - Apr 29 0:00 1:00 S
Rule Poland 1945 only - Nov 1 0:00 0 -
# For 1946 on the source is Kazimierz Borkowski,
@@ -1762,9 +1779,9 @@ Zone Europe/Warsaw 1:24:00 - LMT 1880
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
# DSH writes that despite Decree 1,469 (1915), the change to the clocks was not
# done every year, depending on what Spain did, because of railroad schedules.
-# Go with Shanks.
+# Go with Shanks & Pottenger.
Rule Port 1916 only - Jun 17 23:00 1:00 S
-# Whitman gives 1916 Oct 31; go with Shanks.
+# Whitman gives 1916 Oct 31; go with Shanks & Pottenger.
Rule Port 1916 only - Nov 1 1:00 0 -
Rule Port 1917 only - Feb 28 23:00s 1:00 S
Rule Port 1917 1921 - Oct 14 23:00s 0 -
@@ -1780,24 +1797,23 @@ Rule Port 1927 only - Apr 9 23:00s 1:00 S
Rule Port 1928 only - Apr 14 23:00s 1:00 S
Rule Port 1929 only - Apr 20 23:00s 1:00 S
Rule Port 1931 only - Apr 18 23:00s 1:00 S
-# Whitman gives 1931 Oct 8; go with Shanks.
+# Whitman gives 1931 Oct 8; go with Shanks & Pottenger.
Rule Port 1931 1932 - Oct Sat>=1 23:00s 0 -
Rule Port 1932 only - Apr 2 23:00s 1:00 S
-# Shanks gives 1934 Apr 4; go with Whitman.
Rule Port 1934 only - Apr 7 23:00s 1:00 S
-# Whitman gives 1934 Oct 5; go with Shanks.
+# Whitman gives 1934 Oct 5; go with Shanks & Pottenger.
Rule Port 1934 1938 - Oct Sat>=1 23:00s 0 -
-# Shanks gives 1935 Apr 30; go with Whitman.
+# Shanks & Pottenger give 1935 Apr 30; go with Whitman.
Rule Port 1935 only - Mar 30 23:00s 1:00 S
Rule Port 1936 only - Apr 18 23:00s 1:00 S
-# Whitman gives 1937 Apr 2; go with Shanks.
+# Whitman gives 1937 Apr 2; go with Shanks & Pottenger.
Rule Port 1937 only - Apr 3 23:00s 1:00 S
Rule Port 1938 only - Mar 26 23:00s 1:00 S
Rule Port 1939 only - Apr 15 23:00s 1:00 S
-# Whitman gives 1939 Oct 7; go with Shanks.
+# Whitman gives 1939 Oct 7; go with Shanks & Pottenger.
Rule Port 1939 only - Nov 18 23:00s 0 -
Rule Port 1940 only - Feb 24 23:00s 1:00 S
-# Shanks gives 1940 Oct 7; go with Whitman.
+# Shanks & Pottenger give 1940 Oct 7; go with Whitman.
Rule Port 1940 1941 - Oct 5 23:00s 0 -
Rule Port 1941 only - Apr 5 23:00s 1:00 S
Rule Port 1942 1945 - Mar Sat>=8 23:00s 1:00 S
@@ -1811,8 +1827,8 @@ Rule Port 1946 only - Apr Sat>=1 23:00s 1:00 S
Rule Port 1946 only - Oct Sat>=1 23:00s 0 -
Rule Port 1947 1949 - Apr Sun>=1 2:00s 1:00 S
Rule Port 1947 1949 - Oct Sun>=1 2:00s 0 -
-# Shanks says DST was observed in 1950; go with Whitman.
-# Whitman gives Oct lastSun for 1952 on; go with Shanks.
+# Shanks & Pottenger say DST was observed in 1950; go with Whitman.
+# Whitman gives Oct lastSun for 1952 on; go with Shanks & Pottenger.
Rule Port 1951 1965 - Apr Sun>=1 2:00s 1:00 S
Rule Port 1951 1965 - Oct Sun>=1 2:00s 0 -
Rule Port 1977 only - Mar 27 0:00s 1:00 S
@@ -1824,7 +1840,7 @@ Rule Port 1980 only - Mar lastSun 0:00s 1:00 S
Rule Port 1981 1982 - Mar lastSun 1:00s 1:00 S
Rule Port 1983 only - Mar lastSun 2:00s 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-# Shanks says that the transition from LMT to WET occurred 1911-05-24;
+# Shanks & Pottenger say the transition from LMT to WET occurred 1911-05-24;
# Willett says 1912-01-01. Go with Willett.
Zone Europe/Lisbon -0:36:32 - LMT 1884
-0:36:32 - LMT 1912 Jan 1 # Lisbon Mean Time
@@ -1877,11 +1893,12 @@ Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct
# Russia
-# From Paul Eggert (1999-11-12):
+# From Paul Eggert (2006-03-22):
# Except for Moscow after 1919-07-01, I invented the time zone abbreviations.
# Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991,
-# are from Andrey A. Chernov. The rest is from Shanks, except we follow
-# Chernov's report that 1992 DST transitions were Sat 23:00, not Sun 02:00s.
+# are from Andrey A. Chernov. The rest is from Shanks & Pottenger,
+# except we follow Chernov's report that 1992 DST transitions were Sat
+# 23:00, not Sun 02:00s.
#
# From Stanislaw A. Kuzikowski (1994-06-29):
# But now it is some months since Novosibirsk is 3 hours ahead of Moscow!
@@ -1926,20 +1943,20 @@ Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr
2:00 Russia EE%sT
#
# From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Respublika Adygeya, Arkhangel'skaya oblast', Astrakhanskaya oblast',
+# Respublika Adygeya, Arkhangel'skaya oblast',
# Belgorodskaya oblast', Bryanskaya oblast', Vladimirskaya oblast',
-# Volgogradskaya oblast', Vologodskaya oblast', Voronezhskaya oblast',
+# Vologodskaya oblast', Voronezhskaya oblast',
# Respublika Dagestan, Ivanovskaya oblast', Respublika Ingushetiya,
# Kabarbino-Balkarskaya Respublika, Respublika Kalmykiya,
# Kalyzhskaya oblast', Respublika Karachaevo-Cherkessiya,
-# Respublika Kareliya, Kirovskaya oblast', Respublika Komi,
+# Respublika Kareliya, Respublika Komi,
# Kostromskaya oblast', Krasnodarskij kraj, Kurskaya oblast',
# Leningradskaya oblast', Lipetskaya oblast', Respublika Marij El,
# Respublika Mordoviya, Moskva, Moskovskaya oblast',
# Murmanskaya oblast', Nenetskij avtonomnyj okrug,
# Nizhegorodskaya oblast', Novgorodskaya oblast', Orlovskaya oblast',
# Penzenskaya oblast', Pskovskaya oblast', Rostovskaya oblast',
-# Ryazanskaya oblast', Sankt-Peterburg, Saratovskaya oblast',
+# Ryazanskaya oblast', Sankt-Peterburg,
# Respublika Severnaya Osetiya, Smolenskaya oblast',
# Stavropol'skij kraj, Tambovskaya oblast', Respublika Tatarstan,
# Tverskaya oblast', Tyl'skaya oblast', Ul'yanovskaya oblast',
@@ -1954,11 +1971,25 @@ Zone Europe/Moscow 2:30:20 - LMT 1880
2:00 Russia EE%sT 1992 Jan 19 2:00s
3:00 Russia MSK/MSD
#
+# Astrakhanskaya oblast', Kirovskaya oblast', Saratovskaya oblast',
+# Volgogradskaya oblast'. Shanks & Pottenger say Kirov is still at +0400
+# but Wikipedia (2006-05-09) says +0300. Perhaps it switched after the
+# others? But we have no data.
+Zone Europe/Volgograd 2:57:40 - LMT 1920 Jan 3
+ 3:00 - TSAT 1925 Apr 6 # Tsaritsyn Time
+ 3:00 - STAT 1930 Jun 21 # Stalingrad Time
+ 4:00 - STAT 1961 Nov 11
+ 4:00 Russia VOL%sT 1989 Mar 26 2:00s # Volgograd T
+ 3:00 Russia VOL%sT 1991 Mar 31 2:00s
+ 4:00 - VOLT 1992 Mar 29 2:00s
+ 3:00 Russia VOL%sT
+#
# From Oscar van Vlijmen (2001-08-25): [This region consists of]
# Samarskaya oblast', Udmyrtskaya respublika
Zone Europe/Samara 3:20:36 - LMT 1919 Jul 1 2:00
- 3:00 - KUYT 1930 Jun 21 # Kuybyshev
- 4:00 Russia KUY%sT 1989 Mar 26 2:00s
+ 3:00 - SAMT 1930 Jun 21
+ 4:00 - SAMT 1935 Jan 27
+ 4:00 Russia KUY%sT 1989 Mar 26 2:00s # Kuybyshev
3:00 Russia KUY%sT 1991 Mar 31 2:00s
2:00 Russia KUY%sT 1991 Sep 29 2:00s
3:00 - KUYT 1991 Oct 20 3:00
@@ -1984,17 +2015,19 @@ Zone Asia/Omsk 4:53:36 - LMT 1919 Nov 14
5:00 Russia OMS%sT 1992 Jan 19 2:00s
6:00 Russia OMS%sT
#
-# Novosibirskaya oblast'.
+# From Paul Eggert (2006-08-19): I'm guessing about Tomsk here; it's
+# not clear when it switched from +7 to +6.
+# Novosibirskaya oblast', Tomskaya oblast'.
Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
6:00 - NOVT 1930 Jun 21 # Novosibirsk Time
7:00 Russia NOV%sT 1991 Mar 31 2:00s
6:00 Russia NOV%sT 1992 Jan 19 2:00s
- 7:00 Russia NOV%sT 1993 May 23 # says Shanks
+ 7:00 Russia NOV%sT 1993 May 23 # say Shanks & P.
6:00 Russia NOV%sT
#
# From Oscar van Vlijmen (2001-08-25): [This region consists of]
# Kemerovskaya oblast', Krasnoyarskij kraj,
-# Tajmyrskij (Dolgano-Nenetskij) avtonomnyj okrug, Tomskaya oblast',
+# Tajmyrskij (Dolgano-Nenetskij) avtonomnyj okrug,
# Respublika Tuva, Respublika Khakasiya, Evenkijskij avtonomnyj okrug.
Zone Asia/Krasnoyarsk 6:11:20 - LMT 1920 Jan 6
6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time
@@ -2077,7 +2110,7 @@ Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2
11:00 Russia ANA%sT 1992 Jan 19 2:00s
12:00 Russia ANA%sT
-# Serbia and Montenegro
+# Serbia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Belgrade 1:22:00 - LMT 1884
1:00 - CET 1941 Apr 18 23:00
@@ -2085,10 +2118,11 @@ Zone Europe/Belgrade 1:22:00 - LMT 1884
1:00 1:00 CEST 1945 Sep 16 2:00s
# Metod Kozelj reports that the legal date of
# transition to EU rules was 1982-11-27, for all of Yugoslavia at the time.
-# Shanks doesn't give as much detail, so go with Kozelj.
+# Shanks & Pottenger don't give as much detail, so go with Kozelj.
1:00 - CET 1982 Nov 27
1:00 EU CE%sT
Link Europe/Belgrade Europe/Ljubljana # Slovenia
+Link Europe/Belgrade Europe/Podgorica # Montenegro
Link Europe/Belgrade Europe/Sarajevo # Bosnia and Herzegovina
Link Europe/Belgrade Europe/Skopje # Macedonia
Link Europe/Belgrade Europe/Zagreb # Croatia
@@ -2097,32 +2131,34 @@ Link Europe/Belgrade Europe/Zagreb # Croatia
Link Europe/Prague Europe/Bratislava
# Slovenia
-# see Serbia and Montenegro
+# see Serbia
# Spain
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# For 1917-1919 Whitman gives Apr Sat>=1 - Oct Sat>=1; go with Shanks.
+# For 1917-1919 Whitman gives Apr Sat>=1 - Oct Sat>=1;
+# go with Shanks & Pottenger.
Rule Spain 1917 only - May 5 23:00s 1:00 S
Rule Spain 1917 1919 - Oct 6 23:00s 0 -
Rule Spain 1918 only - Apr 15 23:00s 1:00 S
Rule Spain 1919 only - Apr 5 23:00s 1:00 S
-# Whitman gives 1921 Feb 28 - Oct 14; go with Shanks.
+# Whitman gives 1921 Feb 28 - Oct 14; go with Shanks & Pottenger.
Rule Spain 1924 only - Apr 16 23:00s 1:00 S
-# Whitman gives 1924 Oct 14; go with Shanks.
+# Whitman gives 1924 Oct 14; go with Shanks & Pottenger.
Rule Spain 1924 only - Oct 4 23:00s 0 -
Rule Spain 1926 only - Apr 17 23:00s 1:00 S
-# Whitman says no DST in 1929; go with Shanks.
+# Whitman says no DST in 1929; go with Shanks & Pottenger.
Rule Spain 1926 1929 - Oct Sat>=1 23:00s 0 -
Rule Spain 1927 only - Apr 9 23:00s 1:00 S
Rule Spain 1928 only - Apr 14 23:00s 1:00 S
Rule Spain 1929 only - Apr 20 23:00s 1:00 S
-# Whitman gives 1937 Jun 16, 1938 Apr 16, 1940 Apr 13; go with Shanks.
+# Whitman gives 1937 Jun 16, 1938 Apr 16, 1940 Apr 13;
+# go with Shanks & Pottenger.
Rule Spain 1937 only - May 22 23:00s 1:00 S
Rule Spain 1937 1939 - Oct Sat>=1 23:00s 0 -
Rule Spain 1938 only - Mar 22 23:00s 1:00 S
Rule Spain 1939 only - Apr 15 23:00s 1:00 S
Rule Spain 1940 only - Mar 16 23:00s 1:00 S
-# Whitman says no DST 1942-1945; go with Shanks.
+# Whitman says no DST 1942-1945; go with Shanks & Pottenger.
Rule Spain 1942 only - May 2 22:00s 2:00 M # Midsummer
Rule Spain 1942 only - Sep 1 22:00s 1:00 S
Rule Spain 1943 1946 - Apr Sat>=13 22:00s 2:00 M
@@ -2149,7 +2185,7 @@ Rule SpainAfrica 1977 only - Sep 28 0:00 0 -
Rule SpainAfrica 1978 only - Jun 1 0:00 1:00 S
Rule SpainAfrica 1978 only - Aug 4 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Europe/Madrid -0:14:44 - LMT 1901
+Zone Europe/Madrid -0:14:44 - LMT 1901 Jan 1 0:00s
0:00 Spain WE%sT 1946 Sep 30
1:00 Spain CE%sT 1979
1:00 EU CE%sT
@@ -2171,7 +2207,7 @@ Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
# Sweden
-# From Ivan Nilsson (2001-04-13), superseding Shanks:
+# From Ivan Nilsson (2001-04-13), superseding Shanks & Pottenger:
#
# The law "Svensk forfattningssamling 1878, no 14" about standard time in 1879:
# From the beginning of 1879 (that is 01-01 00:00) the time for all
@@ -2232,7 +2268,7 @@ Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1
# From Whitman (who writes ``Midnight?''):
Rule Swiss 1940 only - Nov 2 0:00 1:00 S
Rule Swiss 1940 only - Dec 31 0:00 0 -
-# From Shanks:
+# From Shanks & Pottenger:
Rule Swiss 1941 1942 - May Sun>=1 2:00 1:00 S
Rule Swiss 1941 1942 - Oct Sun>=1 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -2251,7 +2287,8 @@ Rule Turkey 1921 only - Apr 3 0:00 1:00 S
Rule Turkey 1921 only - Oct 3 0:00 0 -
Rule Turkey 1922 only - Mar 26 0:00 1:00 S
Rule Turkey 1922 only - Oct 8 0:00 0 -
-# Whitman gives 1923 Apr 28 - Sep 16 and no DST in 1924-1925; go with Shanks.
+# Whitman gives 1923 Apr 28 - Sep 16 and no DST in 1924-1925;
+# go with Shanks & Pottenger.
Rule Turkey 1924 only - May 13 0:00 1:00 S
Rule Turkey 1924 1925 - Oct 1 0:00 0 -
Rule Turkey 1925 only - May 1 0:00 1:00 S
@@ -2260,7 +2297,8 @@ Rule Turkey 1940 only - Oct 5 0:00 0 -
Rule Turkey 1940 only - Dec 1 0:00 1:00 S
Rule Turkey 1941 only - Sep 21 0:00 0 -
Rule Turkey 1942 only - Apr 1 0:00 1:00 S
-# Whitman omits the next two transition and gives 1945 Oct 1; go with Shanks.
+# Whitman omits the next two transition and gives 1945 Oct 1;
+# go with Shanks & Pottenger.
Rule Turkey 1942 only - Nov 1 0:00 0 -
Rule Turkey 1945 only - Apr 2 0:00 1:00 S
Rule Turkey 1945 only - Oct 8 0:00 0 -
@@ -2357,11 +2395,13 @@ Zone Europe/Simferopol 2:16:24 - LMT 1880
3:00 Russia MSK/MSD 1990
3:00 - MSK 1990 Jul 1 2:00
2:00 - EET 1992
-# From Paul Eggert (1999-11-12):
+# From Paul Eggert (2006-03-22):
# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
# from Kiev to Moscow time sometime after the January 1994 elections.
-# Shanks says ``date of change uncertain'', but implies that it happened
-# sometime between the 1994 DST switches. For now, guess it changed in May.
+# Shanks (1999) says ``date of change uncertain'', but implies that it happened
+# sometime between the 1994 DST switches. Shanks & Pottenger simply say
+# 1994-09-25 03:00, but that can't be right. For now, guess it
+# changed in May.
2:00 E-Eur EE%sT 1994 May
# From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev.
3:00 E-Eur MSK/MSD 1996 Mar 31 3:00s
diff --git a/libc/timezone/ialloc.c b/libc/timezone/ialloc.c
index 8a0c70157..1fc2035f4 100644
--- a/libc/timezone/ialloc.c
+++ b/libc/timezone/ialloc.c
@@ -1,6 +1,11 @@
+/*
+** This file is in the public domain, so clarified as of
+** 2006-07-17 by Arthur David Olson.
+*/
+
#ifndef lint
#ifndef NOID
-static char elsieid[] = "@(#)ialloc.c 8.29";
+static char elsieid[] = "@(#)ialloc.c 8.30";
#endif /* !defined NOID */
#endif /* !defined lint */
diff --git a/libc/timezone/iso3166.tab b/libc/timezone/iso3166.tab
index 1cfaf265c..8bb823105 100644
--- a/libc/timezone/iso3166.tab
+++ b/libc/timezone/iso3166.tab
@@ -1,12 +1,12 @@
# ISO 3166 alpha-2 country codes
#
-# @(#)iso3166.tab 8.1
+# @(#)iso3166.tab 8.3
#
-# From Paul Eggert (2004-06-14):
+# From Paul Eggert (2006-09-27):
#
# This file contains a table with the following columns:
# 1. ISO 3166-1 alpha-2 country code, current as of
-# ISO 3166-1 Newsletter No. V-10 (2004-04-26). See:
+# ISO 3166-1 Newsletter No. V-12 (2006-09-26). See:
# <a href="http://www.iso.org/iso/en/prods-services/iso3166ma/index.html">
# ISO 3166 Maintenance agency (ISO 3166/MA)
# </a>.
@@ -70,7 +70,6 @@ CM Cameroon
CN China
CO Colombia
CR Costa Rica
-CS Serbia and Montenegro
CU Cuba
CV Cape Verde
CX Christmas Island
@@ -100,6 +99,7 @@ GB Britain (UK)
GD Grenada
GE Georgia
GF French Guiana
+GG Guernsey
GH Ghana
GI Gibraltar
GL Greenland
@@ -122,12 +122,14 @@ HU Hungary
ID Indonesia
IE Ireland
IL Israel
+IM Isle of Man
IN India
IO British Indian Ocean Territory
IQ Iraq
IR Iran
IS Iceland
IT Italy
+JE Jersey
JM Jamaica
JO Jordan
JP Japan
@@ -156,6 +158,7 @@ LY Libya
MA Morocco
MC Monaco
MD Moldova
+ME Montenegro
MG Madagascar
MH Marshall Islands
MK Macedonia
@@ -204,6 +207,7 @@ PY Paraguay
QA Qatar
RE Reunion
RO Romania
+RS Serbia
RU Russia
RW Rwanda
SA Saudi Arabia
diff --git a/libc/timezone/northamerica b/libc/timezone/northamerica
index 73e2470e0..3d80c5e3c 100644
--- a/libc/timezone/northamerica
+++ b/libc/timezone/northamerica
@@ -1,4 +1,4 @@
-# @(#)northamerica 8.1
+# @(#)northamerica 8.10
# <pre>
# also includes Central America and the Caribbean
@@ -30,12 +30,12 @@
# That 1883 transition occurred at 12:00 new time, not at 12:00 old time.
# See p 46 of David Prerau, Seize the daylight, Thunder's Mouth Press (2005).
-# From Paul Eggert (1995-12-19):
+# From Paul Eggert (2006-03-22):
# A good source for time zone historical data in the US is
# Thomas G. Shanks, The American Atlas (5th edition),
# San Diego: ACS Publications, Inc. (1991).
# Make sure you have the errata sheet; the book is somewhat useless without it.
-# It is the source for most of the pre-1991 US and Puerto Rico entries below.
+# It is the source for most of the pre-1991 US entries below.
# From Paul Eggert (2001-03-06):
# Daylight Saving Time was first suggested as a joke by Benjamin Franklin
@@ -229,7 +229,7 @@ Zone PST8PDT -8:00 US P%sT
# Public law 106-564 (2000-12-23) introduced the abbreviation
# "Chamorro Standard Time" for time in Guam and the Northern Marianas.
# See the file "australasia".
-
+
# From Arthur David Olson, 2005-08-09
# The following was signed into law on 2005-08-08.
#
@@ -274,7 +274,7 @@ Zone PST8PDT -8:00 US P%sT
# set their watches and clocks on Eastern time." It quotes H.H. "Bubba"
# Roberts, city administrator in Phenix City. as saying "We are in the Central
# time zone, but we do go by the Eastern time zone because so many people work
-# in Columbus."
+# in Columbus."
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
Rule NYC 1920 only - Mar lastSun 2:00 1:00 D
@@ -301,6 +301,13 @@ Zone America/New_York -4:56:02 - LMT 1883 Nov 18 12:03:58
# Nebraska, eastern North Dakota, Oklahoma, eastern South Dakota,
# western Tennessee, most of Texas, Wisconsin
+# From Larry M. Smith (2006-04-26) re Wisconsin:
+# http://www.legis.state.wi.us/statutes/Stat0175.pdf ...
+# is currently enforced at the 01:00 time of change. Because the local
+# "bar time" in the state corresponds to 02:00, a number of citations
+# are issued for the "sale of class 'B' alcohol after prohibited
+# hours" within the deviated hour of this change every year....
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
Rule Chicago 1920 only - Jun 13 2:00 1:00 D
Rule Chicago 1920 1921 - Oct lastSun 2:00 0 S
@@ -321,14 +328,16 @@ Zone America/Chicago -5:50:36 - LMT 1883 Nov 18 12:09:24
Zone America/North_Dakota/Center -6:45:12 - LMT 1883 Nov 18 12:14:48
-7:00 US M%sT 1992 Oct 25 02:00
-6:00 US C%sT
-# From Paul Eggert (2006-01-20):
-# The following is not implemented yet.
-# What is the most populous city in that area?
-# From http://www.statoids.com/tus.html (2006-01-20):
-# 2003-10-26 02:00: All of Morton County, ND, and the part of Sioux
-# County, ND east of ND route 31 moved from MT to CT. (The area
-# around Fort Yates in Sioux County and the area around Mandan in
-# Morton County were already in CT.)
+# Morton County, ND, switched from mountain to central time on
+# 2003-10-26, except for the area around Mandan which was already central time.
+# See <http://dmses.dot.gov/docimages/p63/135818.pdf>.
+# Officially this switch also included part of Sioux County, and
+# Jones, Mellette, and Todd Counties in South Dakota;
+# but in practice these other counties were already observing central time.
+# See <http://www.epa.gov/fedrgstr/EPA-IMPACT/2003/October/Day-28/i27056.htm>.
+Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21
+ -7:00 US M%sT 2003 Oct 26 02:00
+ -6:00 US C%sT
# US mountain time, represented by Denver
#
@@ -407,7 +416,8 @@ Zone America/Yakutat 14:41:05 - LMT 1867 Oct 18
Zone America/Anchorage 14:00:24 - LMT 1867 Oct 18
-9:59:36 - LMT 1900 Aug 20 12:00
-10:00 - CAT 1942
- -10:00 US CAT/CAWT 1946
+ -10:00 US CAT/CAWT 1945 Aug 14 23:00u
+ -10:00 US CAT/CAPT 1946 # Peace
-10:00 - CAT 1967 Apr
-10:00 - AHST 1969
-10:00 US AH%sT 1983 Oct 30 2:00
@@ -527,9 +537,9 @@ Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11
# For a map of Indiana's time zone regions, see:
# <a href="http://www.mccsc.edu/time.html">
# What time is it in Indiana?
-# </a> (2005-10-30)
+# </a> (2006-03-01)
#
-# From Paul Eggert (2006-01-20):
+# From Paul Eggert (2006-03-22):
# Since 1970, most of Indiana has been like America/Indiana/Indianapolis,
# with the following exceptions:
#
@@ -549,6 +559,7 @@ Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11
#
# Shanks partitioned Indiana into 345 regions, each with its own time history,
# and wrote ``Even newspaper reports present contradictory information.''
+# Those Hoosiers! Such a flighty and changeable people!
# Fortunately, most of the complexity occurred before our cutoff date of 1970.
#
# Other than Indianapolis, the Indiana place names are so nondescript
@@ -558,8 +569,10 @@ Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11
# From Paul Eggert (2005-08-16):
# http://www.mccsc.edu/time.html says that Indiana will use DST starting 2006.
+# From Nathan Stratton Treadway (2006-03-30):
+# http://www.dot.gov/affairs/dot0406.htm [3705 B]
# From Deborah Goldsmith (2006-01-18):
-# http://dmses.dot.gov/docimages/pdf95/382329_web.pdf
+# http://dmses.dot.gov/docimages/pdf95/382329_web.pdf [2.9 MB]
# From Paul Eggert (2006-01-20):
# It says "DOT is relocating the time zone boundary in Indiana to move Starke,
# Pulaski, Knox, Daviess, Martin, Pike, Dubois, and Perry Counties from the
@@ -625,7 +638,7 @@ Zone America/Indiana/Vincennes -5:50:07 - LMT 1883 Nov 18 12:09:53
-5:00 US E%sT 1971
-5:00 - EST 2006 Apr 2 2:00
-6:00 US C%sT
-#
+#
# Pike County, Indiana moved from central to eastern time in 1977,
# then switched back in 2006.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
@@ -818,10 +831,10 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
################################################################################
-# From Paul Eggert (1999-10-29):
-# A good source for time zone historical data outside the US is
-# Thomas G. Shanks, The International Atlas (5th edition),
-# San Diego: ACS Publications, Inc. (1999).
+# From Paul Eggert (2006-03-22):
+# A good source for time zone historical data outside the U.S. is
+# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
+# San Diego: ACS Publications, Inc. (2003).
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
@@ -829,8 +842,8 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
# published semiannually. Law sent in several helpful summaries
# of the IATA's data after 1990.
#
-# Except where otherwise noted, Shanks is the source for entries through 1990,
-# and IATA SSIM is the source for entries after 1990.
+# Except where otherwise noted, Shanks & Pottenger is the source for
+# entries through 1990, and IATA SSIM is the source for entries afterwards.
#
# Other sources occasionally used include:
#
@@ -878,9 +891,51 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
# From Paul Eggert (1994-11-22):
# Alas, this sort of thing must be handled by localization software.
-# Unless otherwise specified, the data for Canada are all from Shanks.
-
-# From Paul Eggert (2005-12-21):
+# Unless otherwise specified, the data for Canada are all from Shanks
+# & Pottenger.
+
+# From Chris Walton (2006-04-01):
+# The British Columbia government announced yesterday that it will
+# adjust daylight savings next year to align with changes in the
+# U.S. and the rest of Canada....
+# http://www2.news.gov.bc.ca/news_releases_2005-2009/2006AG0014-000330.htm
+
+# From Chris Walton (2006-04-25):
+# Daylight saving time will be extended by four weeks starting in 2007....
+# Here is a news release which was issued today by the Nova Scotia government:
+# http://www.gov.ns.ca/news/details.asp?id=20060425004
+
+# From Chris Walton (2006-06-26):
+# [For New Brunswick] the new legislation dictates that the time change is to
+# be done at 02:00 instead of 00:01.
+# http://www.gnb.ca/0062/acts/BBA-2006/Chap-19.pdf
+# ...
+# Manitoba has traditionally changed the clock every fall at 03:00.
+# As of 2006, the transition is to take place one hour earlier at 02:00.
+# http://web2.gov.mb.ca/laws/statutes/ccsm/o030e.php
+# ...
+# [Alberta, Ontario, Quebec] will follow US rules.
+# http://www.qp.gov.ab.ca/documents/Acts/2006CH03_UNPR.cfm?frm_isbn=0779744934
+# http://www.e-laws.gov.on.ca/DBLaws/Source/Regs/English/2006/R06111_e.htm
+# http://www.assnat.qc.ca/eng/37legislature2/Projets-loi/Publics/06-a002.htm
+# ...
+# P.E.I. will follow US rules. The new legislation is not law yet.
+# It passed first reading on April 20....
+# http://www.assembly.pe.ca/bills/pdf_first/62/3/bill-101.pdf
+# ...
+# Province of Newfoundland and Labrador.... The change is being considered.
+# http://www.releases.gov.nl.ca/releases/2006/mpa/0331n01.htm
+# ...
+# N.W.T. will follow US rules. Whoever maintains the government web site
+# does not seem to believe in bookmarks. To see the news release, click the
+# following link and search for "Daylight Savings Time Change". Press the
+# "Daylight Savings Time Change" link; it will fire off a popup using
+# JavaScript.
+# http://www.exec.gov.nt.ca/currentnews/currentPR.asp?mode=archive
+
+
+
+# From Paul Eggert (2006-04-25):
# H. David Matthews and Mary Vincent's map
# <a href="http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp">
# "It's about TIME", _Canadian Geographic_ (September-October 1998)
@@ -892,25 +947,10 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
# information about standard and daylight saving time zones in Canada.
# </a> (updated periodically).
# Its unofficial information is often taken from Matthews and Vincent.
-#
-# CBC News reported that Ontario and Manitoba have announced plans to
-# follow the US change, and that Nova Scotia is considering it; see
-# <http://www.cbc.ca/news/background/daylightsavingtime/> (2005-10-21).
-# CBC news also reported that Prince Edward Island is the first
-# province in Atlantic Canada to follow the US change, and that Quebec
-# had agreed; see <http://www.cbc.ca/pei/story/pe_daylight_20051207.html>
-# (2005-12-07).
-#
-# To reflect all this, the Canada and Winn rules have been adjusted to
-# agree with the 2007 US change. This means we assume most of Canada
-# will fall into line. However, Alberta, British Columbia,
-# Newfoundland, Northwest Territories, and Yukon already have separate
-# rules in our database, so for now we'll leave them alone, which
-# means that we currently assume these regions will not change their
-# rules and will disagree with the US starting in 2007. This
-# assumption is probably incorrect, with the possible exception of
-# Newfoundland. We plan to adjust the Edm, Vanc, StJohns, and NT_YK
-# rules as the corresponding provinces make their announcements.
+
+# From Paul Eggert (2006-06-27):
+# For now, assume all of DST-observing Canada will fall into line with the
+# new US DST rules,
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Canada 1918 only - Apr 14 2:00 1:00 D
@@ -925,7 +965,7 @@ Rule Canada 2007 max - Mar Sun>=8 2:00 1:00 D
Rule Canada 2007 max - Nov Sun>=1 2:00 0 S
-# Newfoundland (and far southeast Labrador)
+# Newfoundland and Labrador
# From Paul Eggert (2000-10-02):
# Matthews and Vincent (1998) write that Labrador should use NST/NDT,
@@ -936,20 +976,21 @@ Rule Canada 2007 max - Nov Sun>=1 2:00 0 S
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule StJohns 1917 only - Apr 8 2:00 1:00 D
Rule StJohns 1917 only - Sep 17 2:00 0 S
-# Whitman gives 1919 Apr 5 and 1920 Apr 5; go with Shanks.
+# Whitman gives 1919 Apr 5 and 1920 Apr 5; go with Shanks & Pottenger.
Rule StJohns 1919 only - May 5 23:00 1:00 D
Rule StJohns 1919 only - Aug 12 23:00 0 S
-# For 1931-1935 Whitman gives Apr same date; go with Shanks.
+# For 1931-1935 Whitman gives Apr same date; go with Shanks & Pottenger.
Rule StJohns 1920 1935 - May Sun>=1 23:00 1:00 D
Rule StJohns 1920 1935 - Oct lastSun 23:00 0 S
-# For 1936-1941 Whitman gives May Sun>=8 and Oct Sun>=1; go with Shanks.
+# For 1936-1941 Whitman gives May Sun>=8 and Oct Sun>=1; go with Shanks &
+# Pottenger.
Rule StJohns 1936 1941 - May Mon>=9 0:00 1:00 D
Rule StJohns 1936 1941 - Oct Mon>=2 0:00 0 S
# Whitman gives the following transitions:
# 1942 03-01/12-31, 1943 05-30/09-05, 1944 07-10/09-02, 1945 01-01/10-07
-# but go with Shanks and assume they used Canadian rules.
+# but go with Shanks & Pottenger and assume they used Canadian rules.
# For 1946-9 Whitman gives May 5,4,9,1 - Oct 1,5,3,2, and for 1950 he gives
-# Apr 30 - Sep 24; go with Shanks.
+# Apr 30 - Sep 24; go with Shanks & Pottenger.
Rule StJohns 1946 1950 - May Sun>=8 2:00 1:00 D
Rule StJohns 1946 1950 - Oct Sun>=2 2:00 0 S
Rule StJohns 1951 1986 - Apr lastSun 2:00 1:00 D
@@ -959,9 +1000,12 @@ Rule StJohns 1960 1986 - Oct lastSun 2:00 0 S
# INMS (2000-09-12) says that, since 1988 at least, Newfoundland switches
# at 00:01 local time. For now, assume it started in 1987.
Rule StJohns 1987 only - Apr Sun>=1 0:01 1:00 D
-Rule StJohns 1987 max - Oct lastSun 0:01 0 S
+Rule StJohns 1987 2006 - Oct lastSun 0:01 0 S
Rule StJohns 1988 only - Apr Sun>=1 0:01 2:00 DD
-Rule StJohns 1989 max - Apr Sun>=1 0:01 1:00 D
+Rule StJohns 1989 2006 - Apr Sun>=1 0:01 1:00 D
+Rule StJohns 2007 max - Mar Sun>=8 0:01 1:00 D
+Rule StJohns 2007 max - Nov Sun>=1 0:01 0 S
+#
# St John's has an apostrophe, but Posix file names can't have apostrophes.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/St_Johns -3:30:52 - LMT 1884
@@ -989,12 +1033,13 @@ Zone America/Goose_Bay -4:01:40 - LMT 1884 # Happy Valley-Goose Bay
# west Labrador, 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;
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger write 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.
+# Shanks & Pottenger also write 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
@@ -1060,10 +1105,7 @@ Zone America/Glace_Bay -3:59:48 - LMT 1902 Jun 15
# <http://www.gnb.ca/0062/PDF-acts/t-06.pdf> says they change at 00:01, and
# <http://www.canlii.org/nb/laws/sta/t-6/20030127/whole.html> makes it
# clear that this has been the case since at least 1993.
-# For now, assume it started in 1993. The Office of the Premier announced
-# <http://www.gnb.ca/cnb/news/pre/2005e1737pr.htm> (2005-12-23)
-# that they will bring forward proposed amendments to harmonize with the US;
-# for now assume that this will happen, but they'll still switch at 00:01.
+# For now, assume it started in 1993.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Moncton 1933 1935 - Jun Sun>=8 1:00 1:00 D
@@ -1076,11 +1118,9 @@ Rule Moncton 1940 only - May 19 1:00 1:00 D
Rule Moncton 1941 only - May 4 1:00 1:00 D
Rule Moncton 1946 1972 - Apr lastSun 2:00 1:00 D
Rule Moncton 1946 1956 - Sep lastSun 2:00 0 S
-Rule Moncton 1956 1972 - Oct lastSun 2:00 0 S
+Rule Moncton 1957 1972 - Oct lastSun 2:00 0 S
Rule Moncton 1993 2006 - Apr Sun>=1 0:01 1:00 D
Rule Moncton 1993 2006 - Oct lastSun 0:01 0 S
-Rule Moncton 2007 max - Mar Sun>=8 0:01 1:00 D
-Rule Moncton 2007 max - Nov Sun>=1 0:01 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
-5:00 - EST 1902 Jun 15
@@ -1089,13 +1129,79 @@ Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
-4:00 Canada A%sT 1946
-4:00 Moncton A%sT 1973
-4:00 Canada A%sT 1993
- -4:00 Moncton A%sT
+ -4:00 Moncton A%sT 2007
+ -4:00 Canada A%sT
-# Ontario, Quebec
+# Quebec
+
+# From Paul Eggert (2006-07-09):
+# Shanks & Pottenger write that since 1970 most of Quebec has been
+# like Montreal.
+
+# From Paul Eggert (2006-06-27):
+# Matthews and Vincent (1998) also write that Quebec east of the -63
+# meridian is supposed to observe AST, but residents as far east as
+# Natashquan use EST/EDT, and residents east of Natashquan use AST.
+# In "Official time in Quebec" the Quebec department of justice writes in
+# http://www.justice.gouv.qc.ca/english/publications/generale/temps-regl-1-a.htm
+# that "The residents of the Municipality of the
+# Cote-Nord-du-Golfe-Saint-Laurent and the municipalities of Saint-Augustin,
+# Bonne-Esperance and Blanc-Sablon apply the Official Time Act as it is
+# written and use Atlantic standard time all year round. The same applies to
+# the residents of the Native facilities along the lower North Shore."
+# <http://www.assnat.qc.ca/eng/37legislature2/Projets-loi/Publics/06-a002.htm>
+# says this common practice was codified into law as of 2007.
+# For lack of better info, guess this practice began around 1970, contra to
+# Shanks & Pottenger who have this region observing AST/ADT.
-# From Paul Eggert (1996-06-12):
-# Shanks writes that since 1970 most of Ontario has been like Toronto,
-# and most of Quebec has been like Montreal.
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Mont 1917 only - Mar 25 2:00 1:00 D
+Rule Mont 1917 only - Apr 24 0:00 0 S
+Rule Mont 1919 only - Mar 31 2:30 1:00 D
+Rule Mont 1919 only - Oct 25 2:30 0 S
+Rule Mont 1920 only - May 2 2:30 1:00 D
+Rule Mont 1920 1922 - Oct Sun>=1 2:30 0 S
+Rule Mont 1921 only - May 1 2:00 1:00 D
+Rule Mont 1922 only - Apr 30 2:00 1:00 D
+Rule Mont 1924 only - May 17 2:00 1:00 D
+Rule Mont 1924 1926 - Sep lastSun 2:30 0 S
+Rule Mont 1925 1926 - May Sun>=1 2:00 1:00 D
+# The 1927-to-1937 rules can be expressed more simply as
+# Rule Mont 1927 1937 - Apr lastSat 24:00 1:00 D
+# Rule Mont 1927 1937 - Sep lastSat 24:00 0 S
+# The rules below avoid use of 24:00
+# (which pre-1998 versions of zic cannot handle).
+Rule Mont 1927 only - May 1 0:00 1:00 D
+Rule Mont 1927 1932 - Sep lastSun 0:00 0 S
+Rule Mont 1928 1931 - Apr lastSun 0:00 1:00 D
+Rule Mont 1932 only - May 1 0:00 1:00 D
+Rule Mont 1933 1940 - Apr lastSun 0:00 1:00 D
+Rule Mont 1933 only - Oct 1 0:00 0 S
+Rule Mont 1934 1939 - Sep lastSun 0:00 0 S
+Rule Mont 1946 1973 - Apr lastSun 2:00 1:00 D
+Rule Mont 1945 1948 - Sep lastSun 2:00 0 S
+Rule Mont 1949 1950 - Oct lastSun 2:00 0 S
+Rule Mont 1951 1956 - Sep lastSun 2:00 0 S
+Rule Mont 1957 1973 - Oct lastSun 2:00 0 S
+
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+Zone America/Blanc-Sablon -3:48:28 - LMT 1884
+ -4:00 Canada A%sT 1970
+ -4:00 - AST
+Zone America/Montreal -4:54:16 - LMT 1884
+ -5:00 Mont E%sT 1918
+ -5:00 Canada E%sT 1919
+ -5:00 Mont E%sT 1942 Feb 9 2:00s
+ -5:00 Canada E%sT 1946
+ -5:00 Mont E%sT 1974
+ -5:00 Canada E%sT
+
+
+# Ontario
+
+# From Paul Eggert (2006-07-09):
+# Shanks & Pottenger write that since 1970 most of Ontario has been like
+# Toronto.
# 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.
@@ -1125,50 +1231,46 @@ Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
# says that Ontario east of 90W uses EST/EDT, and west of 90W uses CST/CDT.
# Officially Atikokan is therefore on CST/CDT, and most likely this report
# concerns a non-official time observed as a matter of local practice.
-# For what it's worth, Shanks says that Atikokan has agreed with
-# Rainy River ever since standard time was introduced.
-
+#
# From Paul Eggert (2000-10-02):
# Matthews and Vincent (1998) write that Atikokan, Pickle Lake, and
# New Osnaburgh observe CST all year, that Big Trout Lake observes
# CST/CDT, and that Upsala and Shebandowan observe EST/EDT, all in
# violation of the official Ontario rules.
-# They also write that Quebec east of the -63 meridian is supposed to
-# observe AST, but residents as far east as Natashquan use EST/EDT,
-# and residents east of Natashquan use AST.
-# We probably need Zones for far east Quebec and for Atikokan,
-# but we don't know when their practices started.
+#
+# From Paul Eggert (2006-07-09):
+# Chris Walton (2006-07-06) mentioned an article by Stephanie MacLellan in the
+# 2005-07-21 Chronicle-Journal, which said:
+#
+# The clocks in Atikokan stay set on standard time year-round.
+# This means they spend about half the time on central time and
+# the other half on eastern time.
+#
+# For the most part, the system works, Mayor Dennis Brown said.
+#
+# "The majority of businesses in Atikokan deal more with Eastern
+# Canada, but there are some that deal with Western Canada," he
+# said. "I don't see any changes happening here."
+#
+# Walton also writes "Supposedly Pickle Lake and Mishkeegogamang
+# [New Osnaburgh] follow the same practice."
-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Mont 1917 only - Mar 25 2:00 1:00 D
-Rule Mont 1917 only - Apr 24 0:00 0 S
-Rule Mont 1919 only - Mar 31 2:30 1:00 D
-Rule Mont 1919 only - Oct 25 2:30 0 S
-Rule Mont 1920 only - May 2 2:30 1:00 D
-Rule Mont 1920 1922 - Oct Sun>=1 2:30 0 S
-Rule Mont 1921 only - May 1 2:00 1:00 D
-Rule Mont 1922 only - Apr 30 2:00 1:00 D
-Rule Mont 1924 only - May 17 2:00 1:00 D
-Rule Mont 1924 1926 - Sep lastSun 2:30 0 S
-Rule Mont 1925 1926 - May Sun>=1 2:00 1:00 D
-# The 1927-to-1937 rules can be expressed more simply as
-# Rule Mont 1927 1937 - Apr lastSat 24:00 1:00 D
-# Rule Mont 1927 1937 - Sep lastSat 24:00 0 S
-# The rules below avoid use of 24:00
-# (which pre-1998 versions of zic cannot handle).
-Rule Mont 1927 only - May 1 0:00 1:00 D
-Rule Mont 1927 1932 - Sep lastSun 0:00 0 S
-Rule Mont 1928 1931 - Apr lastSun 0:00 1:00 D
-Rule Mont 1932 only - May 1 0:00 1:00 D
-Rule Mont 1933 1940 - Apr lastSun 0:00 1:00 D
-Rule Mont 1933 only - Oct 1 0:00 0 S
-Rule Mont 1934 1939 - Sep lastSun 0:00 0 S
-Rule Mont 1946 1973 - Apr lastSun 2:00 1:00 D
-Rule Mont 1945 1948 - Sep lastSun 2:00 0 S
-Rule Mont 1949 1950 - Oct lastSun 2:00 0 S
-Rule Mont 1951 1956 - Sep lastSun 2:00 0 S
-Rule Mont 1957 1973 - Oct lastSun 2:00 0 S
+# From Garry McKinnon (2006-07-14) via Chris Walton:
+# I chatted with a member of my board who has an outstanding memory
+# and a long history in Atikokan (and in the telecom industry) and he
+# can say for certain that Atikokan has been practicing the current
+# time keeping since 1952, at least.
+# From Paul Eggert (2006-07-17):
+# Shanks & Pottenger say that Atikokan has agreed with Rainy River
+# ever since standard time was introduced, but the information from
+# McKinnon sounds more authoritative. For now, assume that Atikokan
+# switched to EST immediately after WWII era daylight saving time
+# ended. This matches the old (less-populous) America/Coral_Harbour
+# entry since our cutoff date of 1970, so we can move
+# America/Coral_Harbour to the 'backward' file.
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Toronto 1919 only - Mar 30 23:30 1:00 D
Rule Toronto 1919 only - Oct 26 0:00 0 S
Rule Toronto 1920 only - May 2 2:00 1:00 D
@@ -1176,7 +1278,8 @@ Rule Toronto 1920 only - Sep 26 0:00 0 S
Rule Toronto 1921 only - May 15 2:00 1:00 D
Rule Toronto 1921 only - Sep 15 2:00 0 S
Rule Toronto 1922 1923 - May Sun>=8 2:00 1:00 D
-# Shanks says 1923-09-19; assume it's a typo and that "-16" was meant.
+# Shanks & Pottenger say 1923-09-19; assume it's a typo and that "-16"
+# was meant.
Rule Toronto 1922 1926 - Sep Sun>=15 2:00 0 S
Rule Toronto 1924 1927 - May Sun>=1 2:00 1:00 D
# The 1927-to-1939 rules can be expressed more simply as
@@ -1200,9 +1303,10 @@ Rule Toronto 1949 only - Nov lastSun 0:00 0 S
Rule Toronto 1950 1973 - Apr lastSun 2:00 1:00 D
Rule Toronto 1950 only - Nov lastSun 2:00 0 S
Rule Toronto 1951 1956 - Sep lastSun 2:00 0 S
-# Shanks says Toronto ended DST a week early in 1971, namely on 1971-10-24,
-# but Mark Brader wrote (2003-05-31) that he checked the 1971-10-30 issue
-# of the Toronto Star, and it said that DST ended 1971-10-31 as usual.
+# Shanks & Pottenger say Toronto ended DST a week early in 1971,
+# namely on 1971-10-24, but Mark Brader wrote (2003-05-31) that this
+# is wrong, and that he had confirmed it by checking the 1971-10-30
+# Toronto Star, which said that DST was ending 1971-10-31 as usual.
Rule Toronto 1957 1973 - Oct lastSun 2:00 0 S
# From Paul Eggert (2003-07-27):
@@ -1224,13 +1328,6 @@ Rule Toronto 1957 1973 - Oct lastSun 2:00 0 S
# months for the remainder of the war years.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Montreal -4:54:16 - LMT 1884
- -5:00 Mont E%sT 1918
- -5:00 Canada E%sT 1919
- -5:00 Mont E%sT 1942 Feb 9 2:00s
- -5:00 Canada E%sT 1946
- -5:00 Mont E%sT 1974
- -5:00 Canada E%sT
Zone America/Toronto -5:17:32 - LMT 1895
-5:00 Canada E%sT 1919
-5:00 Toronto E%sT 1942 Feb 9 2:00s
@@ -1248,14 +1345,38 @@ Zone America/Nipigon -5:53:04 - LMT 1895
-5:00 Canada E%sT 1940 Sep 29
-5:00 1:00 EDT 1942 Feb 9 2:00s
-5:00 Canada E%sT
-Zone America/Rainy_River -6:17:56 - LMT 1895
+Zone America/Rainy_River -6:18:16 - LMT 1895
-6:00 Canada C%sT 1940 Sep 29
-6:00 1:00 CDT 1942 Feb 9 2:00s
-6:00 Canada C%sT
+Zone America/Atikokan -6:06:28 - LMT 1895
+ -6:00 Canada C%sT 1940 Sep 29
+ -6:00 1:00 CDT 1942 Feb 9 2:00s
+ -6:00 Canada C%sT 1945 Sep 30 2:00
+ -5:00 - EST
# Manitoba
+# From Rob Douglas (2006-04-06):
+# the old Manitoba Time Act - as amended by Bill 2, assented to
+# March 27, 1987 ... said ...
+# "between two o'clock Central Standard Time in the morning of
+# the first Sunday of April of each year and two o'clock Central
+# Standard Time in the morning of the last Sunday of October next
+# following, one hour in advance of Central Standard Time."...
+# I believe that the English legislation [of the old time act] had =
+# been assented to (March 22, 1967)....
+# Also, as far as I can tell, there was no order-in-council varying
+# the time of Daylight Saving Time for 2005 and so the provisions of
+# the 1987 version would apply - the changeover was at 2:00 Central
+# Standard Time (i.e. not until 3:00 Central Daylight Time).
+
+# From Paul Eggert (2006-04-10):
+# Shanks & Pottenger say Manitoba switched at 02:00 (not 02:00s)
+# starting 1966. Since 02:00s is clearly correct for 1967 on, assume
+# it was also 02:00s in 1966.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Winn 1916 only - Apr 23 0:00 1:00 D
Rule Winn 1916 only - Sep 17 0:00 0 S
@@ -1278,18 +1399,13 @@ Rule Winn 1959 only - Oct lastSun 2:00 0 S
Rule Winn 1960 only - Sep lastSun 2:00 0 S
Rule Winn 1963 only - Apr lastSun 2:00 1:00 D
Rule Winn 1963 only - Sep 22 2:00 0 S
-Rule Winn 1966 1986 - Apr lastSun 2:00 1:00 D
-Rule Winn 1966 1986 - Oct lastSun 2:00 0 S
-Rule Winn 1987 2006 - Apr Sun>=1 2:00s 1:00 D
-# From Paul Eggert (2000-10-02):
-# INMS (2000-09-12) says that, since 1988 at least, Manitoba switches from
-# DST at 03:00 local time. For now, assume it started in 1987.
-Rule Winn 1987 2006 - Oct lastSun 2:00s 0 S
-Rule Winn 2007 max - Mar Sun>=8 2:00s 1:00 D
-Rule Winn 2007 max - Nov Sun>=1 2:00s 0 S
+Rule Winn 1966 1986 - Apr lastSun 2:00s 1:00 D
+Rule Winn 1966 2005 - Oct lastSun 2:00s 0 S
+Rule Winn 1987 2005 - Apr Sun>=1 2:00s 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Winnipeg -6:28:36 - LMT 1887 Jul 16
- -6:00 Winn C%sT
+ -6:00 Winn C%sT 2006
+ -6:00 Canada C%sT
# Saskatchewan
@@ -1308,8 +1424,8 @@ Zone America/Winnipeg -6:28:36 - LMT 1887 Jul 16
# Willett (1914-03) notes that DST "has been in operation ... in the
# City of Moose Jaw, Saskatchewan, for one year."
-# From Paul Eggert (2000-10-02):
-# Shanks writes that since 1970 most of this region has been like Regina.
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger say that since 1970 this region has mostly been as 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.
# Matthews and Vincent (1998) write that Denare Beach and Creighton
@@ -1341,6 +1457,11 @@ Zone America/Winnipeg -6:28:36 - LMT 1887 Jul 16
# rules any more; all other districts appear to have used CST year round
# since sometime in the 1960s.
+# From Chris Walton (2006-06-26):
+# The Saskatchewan time act which was last updated in 1996 is about 30 pages
+# long and rather painful to read.
+# http://www.qp.gov.sk.ca/documents/English/Statutes/Statutes/T14.pdf
+
# 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
@@ -1395,17 +1516,18 @@ Rule Edm 1967 only - Oct lastSun 2:00 0 S
Rule Edm 1969 only - Apr lastSun 2:00 1:00 D
Rule Edm 1969 only - Oct lastSun 2:00 0 S
Rule Edm 1972 1986 - Apr lastSun 2:00 1:00 D
-Rule Edm 1972 max - Oct lastSun 2:00 0 S
-Rule Edm 1987 max - Apr Sun>=1 2:00 1:00 D
+Rule Edm 1972 2006 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Edmonton -7:33:52 - LMT 1906 Sep
- -7:00 Edm M%sT
+ -7:00 Edm M%sT 1987
+ -7:00 Canada M%sT
# British Columbia
-# From Paul Eggert (2000-10-02):
-# Shanks writes that since 1970 most of this region has been like Vancouver.
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger write that since 1970 most of this region has
+# been like Vancouver.
# Dawson Creek uses MST. Much of east BC is like Edmonton.
# Matthews and Vincent (1998) write that Creston is like Dawson Creek.
@@ -1418,11 +1540,11 @@ Rule Vanc 1945 only - Sep 30 2:00 0 S
Rule Vanc 1946 1986 - Apr lastSun 2:00 1:00 D
Rule Vanc 1946 only - Oct 13 2:00 0 S
Rule Vanc 1947 1961 - Sep lastSun 2:00 0 S
-Rule Vanc 1962 max - Oct lastSun 2:00 0 S
-Rule Vanc 1987 max - Apr Sun>=1 2:00 1:00 D
+Rule Vanc 1962 2006 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Vancouver -8:12:28 - LMT 1884
- -8:00 Vanc P%sT
+ -8:00 Vanc P%sT 1987
+ -8:00 Canada 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
@@ -1431,7 +1553,7 @@ Zone America/Dawson_Creek -8:00:56 - LMT 1884
# Northwest Territories, Nunavut, Yukon
-# From Paul Eggert (1999-10-29):
+# From Paul Eggert (2006-03-22):
# Dawson switched to PST in 1973. Inuvik switched to MST in 1979.
# Mathew Englander (1996-10-07) gives the following refs:
# * 1967. Paragraph 28(34)(g) of the Interpretation Act, S.C. 1967-68,
@@ -1440,7 +1562,12 @@ Zone America/Dawson_Creek -8:00:56 - LMT 1884
# * C.O. 1973/214 switched Yukon to PST on 1973-10-28 00:00.
# * O.I.C. 1980/02 established DST.
# * O.I.C. 1987/056 changed DST to Apr firstSun 2:00 to Oct lastSun 2:00.
-# Shanks says Yukon's 1973-10-28 switch was at 2:00; go with Englander.
+# Shanks & Pottenger say Yukon's 1973-10-28 switch was at 2:00; go
+# with Englander.
+# From Chris Walton (2006-06-26):
+# Here is a link to the old daylight saving portion of the interpretation
+# act which was last updated in 1987:
+# http://www.gov.yk.ca/legislation/regs/oic1987_056.pdf
# From Rives McDow (1999-09-04):
# Nunavut ... moved ... to incorporate the whole territory into one time zone.
@@ -1549,6 +1676,10 @@ Zone America/Dawson_Creek -8:00:56 - LMT 1884
# For lack of better information, assume that Southampton Island observed
# daylight saving only during wartime.
+# From Chris Walton (2006-07-19):
+# The government of Yukon Territory ... recently announced it will extend
+# daylight saving in 2007.... http://www.gov.yk.ca/news/2006/06-164.html
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule NT_YK 1918 only - Apr 14 2:00 1:00 D
Rule NT_YK 1918 only - Oct 27 2:00 0 S
@@ -1560,8 +1691,8 @@ Rule NT_YK 1945 only - Sep 30 2:00 0 S
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
+Rule NT_YK 1980 2006 - Oct lastSun 2:00 0 S
+Rule NT_YK 1987 2006 - 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 1995 Apr Sun>=1 2:00
@@ -1572,10 +1703,11 @@ Zone America/Iqaluit -4:33:52 - LMT 1884 # Frobisher Bay before 1987
-5:00 NT_YK E%sT 1999 Oct 31 2:00
-6:00 Canada C%sT 2000 Oct 29 2:00
-5:00 Canada E%sT
-Zone America/Coral_Harbour -5:32:40 - LMT 1884
- -5:00 NT_YK E%sT 1946
- -5:00 - EST
-Zone America/Rankin_Inlet -6:08:40 - LMT 1884
+# Now subsumed by America/Atikokan.
+#Zone America/Coral_Harbour -5:32:40 - LMT 1884
+# -5:00 NT_YK E%sT 1946
+# -5:00 - EST
+Zone America/Rankin_Inlet -6:08:20 - LMT 1884
-6:00 NT_YK C%sT 2000 Oct 29 2:00
-5:00 - EST 2001 Apr 1 3:00
-6:00 Canada C%sT
@@ -1586,16 +1718,20 @@ Zone America/Cambridge_Bay -7:00:20 - LMT 1884
-6:00 - CST 2001 Apr 1 3:00
-7:00 Canada M%sT
Zone America/Yellowknife -7:37:24 - LMT 1884
- -7:00 NT_YK M%sT
-Zone America/Inuvik -8:54:00 - LMT 1884
+ -7:00 NT_YK M%sT 1980
+ -7:00 Canada M%sT
+Zone America/Inuvik -8:54:52 - LMT 1884
-8:00 NT_YK P%sT 1979 Apr lastSun 2:00
- -7:00 NT_YK M%sT
+ -7:00 NT_YK M%sT 1980
+ -7:00 Canada M%sT
Zone America/Whitehorse -9:00:12 - LMT 1900 Aug 20
-9:00 NT_YK Y%sT 1966 Jul 1 2:00
- -8:00 NT_YK P%sT
+ -8:00 NT_YK P%sT 1980
+ -8:00 Canada P%sT
Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
-9:00 NT_YK Y%sT 1973 Oct 28 0:00
- -8:00 NT_YK P%sT
+ -8:00 NT_YK P%sT 1980
+ -8:00 Canada P%sT
###############################################################################
@@ -1609,16 +1745,12 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
# history of Mexican local time (in Spanish)
# </a>.
#
-# Here are the discrepancies between Shanks and the MLoC.
+# Here are the discrepancies between Shanks & Pottenger (S&P) and the MLoC.
# (In all cases we go with the MLoC.)
-# Shanks reports that Baja was at -8:00 in 1922/1923.
-# Shanks says the 1930 transition in Baja was 1930-11-16.
-# Shanks reports no DST during summer 1931.
-# Shanks reports a transition at 1932-03-30 23:00, not 1932-04-01.
-# Shanks does not report transitions for Baja in 1945 or 1948.
-# Shanks reports southern Mexico transitions on 1981-12-01, not 12-23.
-# Shanks says Quintana Roo switched to -6:00 on 1982-12-02, and to -5:00
-# on 1997-10-26 at 02:00.
+# S&P report that Baja was at -8:00 in 1922/1923.
+# S&P say the 1930 transition in Baja was 1930-11-16.
+# S&P report no DST during summer 1931.
+# S&P report a transition at 1932-03-30 23:00, not 1932-04-01.
# From Gwillim Law (2001-02-20):
# There are some other discrepancies between the Decrees page and the
@@ -1626,10 +1758,6 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
# the researchers who prepared the Decrees page failed to find some of
# the relevant documents.
-# From Paul Eggert (2000-07-26):
-# Shanks gives 1942-04-01 instead of 1942-04-24, and omits the 1981
-# and 1988 DST experiments. Go with spin.com.mx.
-
# From Alan Perry (1996-02-15):
# A guy from our Mexico subsidiary finally found the Presidential Decree
# outlining the timezone changes in Mexico.
@@ -1829,7 +1957,8 @@ Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56
-8:00 - PST 1931 Apr 1
-8:00 1:00 PDT 1931 Sep 30
-8:00 - PST 1942 Apr 24
- -8:00 1:00 PWT 1945 Nov 12
+ -8:00 1:00 PWT 1945 Aug 14 23:00u
+ -8:00 1:00 PPT 1945 Nov 12 # Peace
-8:00 - PST 1948 Apr 5
-8:00 1:00 PDT 1949 Jan 14
-8:00 - PST 1954
@@ -1839,12 +1968,13 @@ Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56
-8:00 Mexico P%sT 2001
-8:00 US P%sT 2002 Feb 20
-8:00 Mexico P%sT
-# From Paul Eggert (2001-03-05):
+# From Paul Eggert (2006-03-22):
# Formerly there was an America/Ensenada zone, which differed from
# America/Tijuana only in that it did not observe DST from 1976
-# through 1995. This was as per Shanks. However, Guy Harris reports
+# through 1995. This was as per Shanks (1999). But Shanks & Pottenger say
+# Ensenada did not observe DST from 1948 through 1975. Guy Harris reports
# that the 1987 OAG says "Only Ensenada, Mexicale, San Felipe and
-# Tijuana observe DST," which contradicts Shanks but does imply that
+# Tijuana observe DST," which agrees with Shanks & Pottenger but implies that
# DST-observance was a town-by-town matter back then. This concerns
# data after 1970 so most likely there should be at least one Zone
# other than America/Tijuana for Baja, but it's not clear yet what its
@@ -1888,7 +2018,7 @@ Zone America/Barbados -3:58:28 - LMT 1924 # Bridgetown
-4:00 Barb A%sT
# Belize
-# Whitman entirely disagrees with Shanks; go with Shanks.
+# Whitman entirely disagrees with Shanks; go with Shanks & Pottenger.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Belize 1918 1942 - Oct Sun>=2 0:00 0:30 HD
Rule Belize 1919 1943 - Feb Sun>=9 0:00 0 S
@@ -1901,10 +2031,20 @@ Zone America/Belize -5:52:48 - LMT 1912 Apr
-6:00 Belize C%sT
# Bermuda
+
+# From Dan Jones, reporting in The Royal Gazette (2006-06-26):
+
+# Next year, however, clocks in the US will go forward on the second Sunday
+# in March, until the first Sunday in November. And, after the Time Zone
+# (Seasonal Variation) Bill 2006 was passed in the House of Assembly on
+# Friday, the same thing will happen in Bermuda.
+# http://www.theroyalgazette.com/apps/pbcs.dll/article?AID=/20060529/NEWS/105290135
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Atlantic/Bermuda -4:19:04 - LMT 1930 Jan 1 2:00 # Hamilton
-4:00 - AST 1974 Apr 28 2:00
- -4:00 Bahamas A%sT
+ -4:00 Bahamas A%sT 1976
+ -4:00 US A%sT
# Cayman Is
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1917,7 +2057,8 @@ Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown
Rule CR 1979 1980 - Feb lastSun 0:00 1:00 D
Rule CR 1979 1980 - Jun Sun>=1 0:00 0 S
Rule CR 1991 1992 - Jan Sat>=15 0:00 1:00 D
-# IATA SSIM (1991-09) says the following was at 1:00; go with Shanks.
+# IATA SSIM (1991-09) says the following was at 1:00;
+# go with Shanks & Pottenger.
Rule CR 1991 only - Jul 1 0:00 0 S
Rule CR 1992 only - Mar 15 0:00 0 S
# There are too many San Joses elsewhere, so we'll use `Costa Rica'.
@@ -1943,18 +2084,26 @@ Zone America/Costa_Rica -5:36:20 - LMT 1890 # San Jose
# From Evert van der Veer via Steffen Thorsen (2004-10-28):
# Cuba is not going back to standard time this year.
-# From Paul Eggert (2004-10-28):
+# From Paul Eggert (2006-03-22):
# http://www.granma.cu/ingles/2004/septiembre/juev30/41medid-i.html
# says that it's due to a problem at the Antonio Guiteras
# thermoelectric plant, and says "This October there will be no return
# to normal hours (after daylight saving time)".
-# For now, let's assume that it's a one-year temporary measure.
+# For now, let's assume that it's a temporary measure.
# From Carlos A. Carnero Delgado (2005-11-12):
# This year (just like in 2004-2005) there's no change in time zone
# adjustment in Cuba. We will stay in daylight saving time:
# http://www.granma.cu/espanol/2005/noviembre/mier9/horario.html
+# From Jesper Norgaard Welen (2006-10-21):
+# An article in GRANMA INTERNACIONAL claims that Cuba will end
+# the 3 years of permanent DST next weekend, see
+# http://www.granma.cu/ingles/2006/octubre/lun16/43horario.html
+# "On Saturday night, October 28 going into Sunday, October 29, at 01:00,
+# watches should be set back one hour -- going back to 00:00 hours -- returning
+# to the normal schedule....
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Cuba 1928 only - Jun 10 0:00 1:00 D
Rule Cuba 1928 only - Oct 10 0:00 0 S
@@ -2033,6 +2182,7 @@ Zone America/Santo_Domingo -4:39:36 - LMT 1890
-4:00 - AST
# El Salvador
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Salv 1987 1988 - May Sun>=1 0:00 1:00 D
Rule Salv 1987 1988 - Sep lastSun 0:00 0 S
@@ -2053,6 +2203,19 @@ Zone America/Guadeloupe -4:06:08 - LMT 1911 Jun 8 # Pointe a Pitre
-4:00 - AST
# Guatemala
+#
+# From Gwillim Law (2006-04-22), after a heads-up from Oscar van Vlijmen:
+# Diario Co Latino, at
+# http://www.diariocolatino.com/internacionales/detalles.asp?NewsID=8079,
+# says in an article dated 2006-04-19 that the Guatemalan government had
+# decided on that date to advance official time by 60 minutes, to lessen the
+# impact of the elevated cost of oil.... Daylight saving time will last from
+# 2006-04-29 24:00 (Guatemalan standard time) to 2006-09-30 (time unspecified).
+# From Paul Eggert (2006-06-22):
+# The Ministry of Energy and Mines, press release CP-15/2006
+# (2006-04-19), says DST ends at 24:00. See
+# <http://www.sieca.org.gt/Sitio_publico/Energeticos/Doc/Medidas/Cambio_Horario_Nac_190406.pdf>.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Guat 1973 only - Nov 25 0:00 1:00 D
Rule Guat 1974 only - Feb 24 0:00 0 S
@@ -2060,6 +2223,8 @@ Rule Guat 1983 only - May 21 0:00 1:00 D
Rule Guat 1983 only - Sep 22 0:00 0 S
Rule Guat 1991 only - Mar 23 0:00 1:00 D
Rule Guat 1991 only - Sep 7 0:00 0 S
+Rule Guat 2006 only - Apr 30 0:00 1:00 D
+Rule Guat 2006 only - Oct 1 0:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Guatemala -6:02:04 - LMT 1918 Oct 5
-6:00 Guat C%sT
@@ -2084,26 +2249,67 @@ Zone America/Guatemala -6:02:04 - LMT 1918 Oct 5
# October 2005.
#
# "Port-au-Prince, March 31, 2005"
+#
+# From Steffen Thorsen (2006-04-04):
+# I have been informed by users that Haiti observes DST this year like
+# last year, so the current "only" rule for 2005 might be changed to a
+# "max" rule or to last until 2006. (Who knows if they will observe DST
+# next year or if they will extend their DST like US/Canada next year).
+#
+# I have found this article about it (in French):
+# http://www.haitipressnetwork.com/news.cfm?articleID=7612
+#
+# The reason seems to be an energy crisis.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Haiti 1983 only - May 8 0:00 1:00 D
Rule Haiti 1984 1987 - Apr lastSun 0:00 1:00 D
Rule Haiti 1983 1987 - Oct lastSun 0:00 0 S
-# Shanks says AT is 2:00, but IATA SSIM (1991/1997) says 1:00s. Go with IATA.
+# Shanks & Pottenger say AT is 2:00, but IATA SSIM (1991/1997) says 1:00s.
+# Go with IATA.
Rule Haiti 1988 1997 - Apr Sun>=1 1:00s 1:00 D
Rule Haiti 1988 1997 - Oct lastSun 1:00s 0 S
-Rule Haiti 2005 only - Apr Sun>=1 0:00 1:00 D
-Rule Haiti 2005 only - Oct lastSun 0:00 0 S
+Rule Haiti 2005 max - Apr Sun>=1 0:00 1:00 D
+Rule Haiti 2005 max - Oct lastSun 0:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Port-au-Prince -4:49:20 - LMT 1890
-4:49 - PPMT 1917 Jan 24 12:00 # P-a-P MT
-5:00 Haiti E%sT
# Honduras
-# Shanks says 1921 Jan 1; go with Whitman's more precise Apr 1.
+# Shanks & Pottenger say 1921 Jan 1; go with Whitman's more precise Apr 1.
+
+# From Paul Eggert (2006-05-05):
+# worldtimezone.com reports a 2006-05-02 Spanish-language AP article
+# saying Honduras will start using DST midnight Saturday, effective 4
+# months until September. La Tribuna reported today
+# <http://www.latribuna.hn/99299.html> that Manuel Zelaya, the president
+# of Honduras, refused to back down on this.
+
+# From Jesper Norgaard Welen (2006-08-08):
+# It seems that Honduras has returned from DST to standard time this Monday at
+# 00:00 hours (prolonging Sunday to 25 hours duration).
+# http://www.worldtimezone.com/dst_news/dst_news_honduras04.html
+
+# From Paul Eggert (2006-08-08):
+# Also see Diario El Heraldo, The country returns to standard time (2006-08-08)
+# <http://www.elheraldo.hn/nota.php?nid=54941&sec=12>.
+# It mentions executive decree 18-2006.
+
+# From Steffen Thorsen (2006-08-17):
+# Honduras will observe DST from 2007 to 2009, exact dates are not
+# published, I have located this authoritative source:
+# http://www.presidencia.gob.hn/noticia.aspx?nId=47
+
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Hond 1987 1988 - May Sun>=1 0:00 1:00 D
+Rule Hond 1987 1988 - Sep lastSun 0:00 0 S
+Rule Hond 2006 2009 - May Sun>=1 0:00 1:00 D
+Rule Hond 2006 2009 - Aug Mon>=1 0:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Tegucigalpa -5:48:52 - LMT 1921 Apr
- -6:00 Salv C%sT
+ -6:00 Hond C%sT
#
# Great Swan I ceded by US to Honduras in 1972
@@ -2115,7 +2321,7 @@ Zone America/Tegucigalpa -5:48:52 - LMT 1921 Apr
# From U. S. Naval Observatory (1989-01-19):
# JAMAICA 5 H BEHIND UTC
-# From Shanks:
+# From Shanks & Pottenger:
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Jamaica -5:07:12 - LMT 1890 # Kingston
-5:07:12 - KMT 1912 Feb # Kingston Mean Time
@@ -2132,18 +2338,16 @@ Zone America/Martinique -4:04:20 - LMT 1890 # Fort-de-France
-4:00 - AST
# Montserrat
-# From Paul Eggert (1997-08-31):
-# Recent volcanic eruptions have forced evacuation of Plymouth, the capital.
-# Luckily, Olveston, the current de facto capital, has the same longitude.
+# From Paul Eggert (2006-03-22):
+# In 1995 volcanic eruptions forced evacuation of Plymouth, the capital.
+# world.gazetteer.com says Cork Hill is the most populous location now.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Montserrat -4:08:52 - LMT 1911 Jul 1 0:01 # Olveston
+Zone America/Montserrat -4:08:52 - LMT 1911 Jul 1 0:01 # Cork Hill
-4:00 - AST
# Nicaragua
#
-# From Steffen Thorsen (1998-12-29):
-# Nicaragua seems to be back at -6:00 but I have not been able to find when
-# they changed from -5:00.
+# This uses Shanks & Pottenger for times before 2005.
#
# From Steffen Thorsen (2005-04-12):
# I've got reports from 8 different people that Nicaragua just started
@@ -2157,8 +2361,7 @@ Zone America/Montserrat -4:08:52 - LMT 1911 Jul 1 0:01 # Olveston
#
# From Paul Eggert (2005-05-01):
# The decree doesn't say anything about daylight saving, but for now let's
-# assume that it is daylight saving and that they'll switch back on the
-# 3rd Sunday in September.
+# assume that it is daylight saving....
#
# From Gwillim Law (2005-04-21):
# The Associated Press story on the time change, which can be found at
@@ -2176,20 +2379,35 @@ Zone America/Montserrat -4:08:52 - LMT 1911 Jul 1 0:01 # Olveston
# http://www.presidencia.gob.ni/presidencia/files_index/secretaria/comunicados/2005/septiembre/26septiembre-cambio-hora.htm
# (2005-09-26)
#
+# From Jesper Norgaard Welen (2006-05-05):
+# http://www.elnuevodiario.com.ni/2006/05/01/nacionales/18410
+# (my informal translation)
+# By order of the president of the republic, Enrique Bolanos, Nicaragua
+# advanced by sixty minutes their official time, yesterday at 2 in the
+# morning, and will stay that way until 30.th. of september.
+#
+# From Jesper Norgaard Welen (2006-09-30):
+# http://www.presidencia.gob.ni/buscador_gaceta/BD/DECRETOS/2006/D-063-2006P-PRN-Cambio-Hora.pdf
+# My informal translation runs:
+# The natural sun time is restored in all the national territory, in that the
+# time is returned one hour at 01:00 am of October 1 of 2006.
+#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Nic 1979 1980 - Mar Sun>=16 0:00 1:00 D
Rule Nic 1979 1980 - Jun Mon>=23 0:00 0 S
-Rule Nic 1992 only - Jan 1 4:00 1:00 D
-Rule Nic 1992 only - Sep 24 0:00 0 S
Rule Nic 2005 only - Apr 10 0:00 1:00 D
-Rule Nic 2005 only - Oct 2 0:00 0 S
+Rule Nic 2005 only - Oct Sun>=1 0:00 0 S
+Rule Nic 2006 only - Apr 30 2:00 1:00 D
+Rule Nic 2006 only - Oct Sun>=1 1:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Managua -5:45:08 - LMT 1890
-5:45:12 - MMT 1934 Jun 23 # Managua Mean Time?
-6:00 - CST 1973 May
-5:00 - EST 1975 Feb 16
- -6:00 Nic C%sT 1993 Jan 1 4:00
- -5:00 - EST 1998 Dec
+ -6:00 Nic C%sT 1992 Jan 1 4:00
+ -5:00 - EST 1992 Sep 24
+ -6:00 - CST 1993
+ -5:00 - EST 1997
-6:00 Nic C%sT
# Panama
@@ -2203,7 +2421,7 @@ Zone America/Panama -5:18:08 - LMT 1890
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan
-4:00 - AST 1942 May 3
- -4:00 1:00 AWT 1945 Sep 30 2:00
+ -4:00 US A%sT 1946
-4:00 - AST
# St Kitts-Nevis
@@ -2232,8 +2450,8 @@ Zone America/St_Vincent -4:04:56 - LMT 1890 # Kingstown
-4:00 - AST
# Turks and Caicos
-# From Paul Eggert (1998-08-06):
-# Shanks says they use US DST rules, but IATA SSIM (1991/1998)
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger say they use US DST rules, but IATA SSIM (1991/1998)
# says they switch at midnight. Go with IATA SSIM.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule TC 1979 1986 - Apr lastSun 0:00 1:00 D
diff --git a/libc/timezone/private.h b/libc/timezone/private.h
index d9f232c8e..2837b70c1 100644
--- a/libc/timezone/private.h
+++ b/libc/timezone/private.h
@@ -21,7 +21,7 @@
#ifndef lint
#ifndef NOID
-static char privatehid[] = "@(#)private.h 7.55";
+static char privatehid[] = "@(#)private.h 8.2";
#endif /* !defined NOID */
#endif /* !defined lint */
@@ -89,7 +89,7 @@ static char privatehid[] = "@(#)private.h 7.55";
#include "stdio.h"
#include "errno.h"
#include "string.h"
-#include "limits.h" /* for CHAR_BIT */
+#include "limits.h" /* for CHAR_BIT et al. */
#include "time.h"
#include "stdlib.h"
@@ -125,20 +125,51 @@ static char privatehid[] = "@(#)private.h 7.55";
#define is_digit(c) ((unsigned)(c) - '0' <= 9)
/*
+** Define HAVE_STDINT_H's default value here, rather than at the
+** start, since __GLIBC__'s value depends on previously-included
+** files.
+** (glibc 2.1 and later have stdint.h, even with pre-C99 compilers.)
+*/
+#ifndef HAVE_STDINT_H
+#define HAVE_STDINT_H \
+ (199901 <= __STDC_VERSION__ || \
+ 2 < (__GLIBC__ + (0 < __GLIBC_MINOR__)))
+#endif /* !defined HAVE_STDINT_H */
+
+#if HAVE_STDINT_H
+#include "stdint.h"
+#endif /* !HAVE_STDINT_H */
+
+#ifndef INT_FAST64_MAX
+/* Pre-C99 GCC compilers define __LONG_LONG_MAX__ instead of LLONG_MAX. */
+#if defined LLONG_MAX || defined __LONG_LONG_MAX__
+typedef long long int_fast64_t;
+#else /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
+#if (LONG_MAX >> 31) < 0xffffffff
+Please use a compiler that supports a 64-bit integer type (or wider);
+you may need to compile with "-DHAVE_STDINT_H".
+#endif /* (LONG_MAX >> 31) < 0xffffffff */
+typedef long int_fast64_t;
+#endif /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
+#endif /* !defined INT_FAST64_MAX */
+
+#ifndef INT32_MAX
+#define INT32_MAX 0x7fffffff
+#endif /* !defined INT32_MAX */
+#ifndef INT32_MIN
+#define INT32_MIN (-1 - INT32_MAX)
+#endif /* !defined INT32_MIN */
+
+/*
** Workarounds for compilers/systems.
*/
/*
-** SunOS 4.1.1 cc lacks prototypes.
+** If your compiler lacks prototypes, "#define P(x) ()".
*/
#ifndef P
-#ifdef __STDC__
#define P(x) x
-#endif /* defined __STDC__ */
-#ifndef __STDC__
-#define P(x) ()
-#endif /* !defined __STDC__ */
#endif /* !defined P */
/*
@@ -211,14 +242,14 @@ extern char * asctime_r();
** Private function declarations.
*/
-char * icalloc P((int nelem, int elsize));
-char * icatalloc P((char * old, const char * new));
-char * icpyalloc P((const char * string));
-char * imalloc P((int n));
-void * irealloc P((void * pointer, int size));
-void icfree P((char * pointer));
-void ifree P((char * pointer));
-const char *scheck P((const char *string, const char *format));
+char * icalloc P((int nelem, int elsize));
+char * icatalloc P((char * old, const char * new));
+char * icpyalloc P((const char * string));
+char * imalloc P((int n));
+void * irealloc P((void * pointer, int size));
+void icfree P((char * pointer));
+void ifree P((char * pointer));
+const char * scheck P((const char * string, const char * format));
/*
** Finally, some convenience items.
@@ -310,6 +341,26 @@ char *asctime_r P((struct tm const *, char *));
char *ctime_r P((time_t const *, char *));
#endif /* HAVE_INCOMPATIBLE_CTIME_R */
+#ifndef YEARSPERREPEAT
+#define YEARSPERREPEAT 400 /* years before a Gregorian repeat */
+#endif /* !defined YEARSPERREPEAT */
+
+/*
+** The Gregorian year averages 365.2425 days, which is 31556952 seconds.
+*/
+
+#ifndef AVGSECSPERYEAR
+#define AVGSECSPERYEAR 31556952L
+#endif /* !defined AVGSECSPERYEAR */
+
+#ifndef SECSPERREPEAT
+#define SECSPERREPEAT ((int_fast64_t) YEARSPERREPEAT * (int_fast64_t) AVGSECSPERYEAR)
+#endif /* !defined SECSPERREPEAT */
+
+#ifndef SECSPERREPEAT_BITS
+#define SECSPERREPEAT_BITS 34 /* ceil(log2(SECSPERREPEAT)) */
+#endif /* !defined SECSPERREPEAT_BITS */
+
/*
** UNIX was a registered trademark of The Open Group in 2003.
*/
diff --git a/libc/timezone/scheck.c b/libc/timezone/scheck.c
index bc156379a..74d9b07c1 100644
--- a/libc/timezone/scheck.c
+++ b/libc/timezone/scheck.c
@@ -1,6 +1,11 @@
+/*
+** This file is in the public domain, so clarified as of
+** 2006-07-17 by Arthur David Olson.
+*/
+
#ifndef lint
#ifndef NOID
-static char elsieid[] = "@(#)scheck.c 8.17";
+static char elsieid[] = "@(#)scheck.c 8.19";
#endif /* !defined lint */
#endif /* !defined NOID */
diff --git a/libc/timezone/southamerica b/libc/timezone/southamerica
index 3a61cd717..ca6c492f3 100644
--- a/libc/timezone/southamerica
+++ b/libc/timezone/southamerica
@@ -1,14 +1,14 @@
-# @(#)southamerica 8.1
+# @(#)southamerica 8.6
# <pre>
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert (1999-07-07):
+# From Paul Eggert (2006-03-22):
# A good source for time zone historical data outside the U.S. is
-# Thomas G. Shanks, The International Atlas (5th edition),
-# San Diego: ACS Publications, Inc. (1999).
+# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
+# San Diego: ACS Publications, Inc. (2003).
#
# Gwillim Law writes that a good source
# for recent time zone data is the International Air Transport
@@ -16,8 +16,8 @@
# published semiannually. Law sent in several helpful summaries
# of the IATA's data after 1990.
#
-# Except where otherwise noted, Shanks is the source for entries through 1990,
-# and IATA SSIM is the source for entries after 1990.
+# Except where otherwise noted, Shanks & Pottenger is the source for
+# entries through 1990, and IATA SSIM is the source for entries afterwards.
#
# Earlier editions of these tables used the North American style (e.g. ARST and
# ARDT for Argentine Standard and Daylight Time), but the following quote
@@ -92,8 +92,6 @@ Rule Arg 1988 only - Dec 1 0:00 1:00 S
# obtaining the data from the:
# Talleres de Hidrografia Naval Argentina
# (Argentine Naval Hydrography Institute)
-#
-# Shanks stops after 1992-03-01; go with Otero.
Rule Arg 1989 1993 - Mar Sun>=1 0:00 0 -
Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 S
#
@@ -150,12 +148,12 @@ Rule Arg 2000 only - Mar Sun>=1 0:00 0 -
# It's Law No. 7,210. This change is due to a public power emergency, so for
# now we'll assume it's for this year only.
#
-# From Paul Eggert (2002-01-22):
+# From Paul Eggert (2006-03-22):
# <a href="http://www.spicasc.net/horvera.html">
-# Hora de verano para la Republica Argentina (2000-10-01)
+# Hora de verano para la Republica Argentina (2003-06-08)
# </a> says that standard time in Argentina from 1894-10-31
# to 1920-05-01 was -4:16:48.25. Go with this more-precise value
-# over Shanks.
+# over Shanks & Pottenger.
#
# From Mariano Absatz (2004-06-05):
# These media articles from a major newspaper mostly cover the current state:
@@ -202,8 +200,8 @@ Rule Arg 2000 only - Mar Sun>=1 0:00 0 -
# http://www.sanjuan.gov.ar/prensa/archivo/000426.html
# http://www.sanjuan.gov.ar/prensa/archivo/000441.html
-# Unless otherwise specified, data are from Shanks through 1992, from
-# the IATA otherwise. As noted below, Shanks says that
+# Unless otherwise specified, data are from Shanks & Pottenger through 1992,
+# from the IATA otherwise. As noted below, Shanks & Pottenger say that
# America/Cordoba split into 6 subregions during 1991/1992, but we
# haven't verified this yet so for now we'll keep it a single region.
#
@@ -222,7 +220,7 @@ Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
# Formosa (FM), Salta (SA), Santiago del Estero (SE), Cordoba (CB),
# San Luis (SL), La Pampa (LP), Neuquen (NQ), Rio Negro (RN)
#
-# Shanks also makes the following claims, which we haven't verified:
+# Shanks & Pottenger also make the following claims, which we haven't verified:
# - Formosa switched to -3:00 on 1991-01-07.
# - Misiones switched to -3:00 on 1990-12-29.
# - Chaco switched to -3:00 on 1991-01-04.
@@ -430,11 +428,7 @@ Zone America/La_Paz -4:32:36 - LMT 1890
# The official decrees referenced below are mostly taken from
# <a href="http://pcdsh01.on.br/DecHV.html">
# Decretos sobre o Horario de Verao no Brasil
-# </a> (2001-09-20, in Portuguese).
-# The official site for all decrees, including those not related to time, is
-# <a href="http://www.presidencia.gov.br/CCIVIL/decreto/principal_ano.htm">
-# Presidencia da Republica, Subchefia para Assuntos Juridicos, Decretos
-# </a> (in Portuguese).
+# </a>.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
# Decree <a href="http://pcdsh01.on.br/HV20466.htm">20,466</a> (1931-10-01)
@@ -550,7 +544,7 @@ Rule Brazil 2000 only - Feb 27 0:00 0 -
# Decree <a href="http://pcdsh01.on.br/figuras/HV3916.gif">3,916</a>
# (2001-09-13) reestablishes DST in AL, CE, MA, PB, PE, PI, RN, SE.
Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 S
-Rule Brazil 2001 max - Feb Sun>=15 0:00 0 -
+Rule Brazil 2001 2006 - Feb Sun>=15 0:00 0 -
# Decree 4,399 (2002-10-01) repeals DST in AL, CE, MA, PB, PE, PI, RN, SE.
# <a href="http://www.presidencia.gov.br/CCIVIL/decreto/2002/D4399.htm"></a>
Rule Brazil 2002 only - Nov 3 0:00 1:00 S
@@ -562,10 +556,14 @@ Rule Brazil 2003 only - Oct 19 0:00 1:00 S
Rule Brazil 2004 only - Nov 2 0:00 1:00 S
# Decree <a href="http://pcdsh01.on.br/DecHV5539.gif">5,539</a> (2005-09-19),
# adopted by the same states as before.
-Rule Brazil 2005 max - Oct Sun>=15 0:00 1:00 S
+Rule Brazil 2005 only - Oct 16 0:00 1:00 S
+# Decree <a href="http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2006/Decreto/D5920.htm">5,920</a>
+# (2006-10-03), adopted by the same states as before.
+Rule Brazil 2006 max - Nov Sun>=1 0:00 1:00 S
+Rule Brazil 2007 max - Feb lastSun 0:00 0 -
# The latest ruleset listed above says that the following states observe DST:
# DF, ES, GO, MG, MS, MT, PR, RJ, RS, SC, SP.
-# For dates after mid-2006, the above rules with TO="max" are guesses
+# For dates after mid-2007, the above rules with TO="max" are guesses
# and are quite possibly wrong, but are more likely than no DST at all.
@@ -706,53 +704,64 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
# Because of the same drought, the government decided to end DST later,
# on April 3, (one-time change).
-# From Gwillim Law (2001-05-04):
-# I came across another article in "La Tercera" about Chilean DST.
-# <http://www.tercera.cl/diario/2000/10/13/t-extras.html>
-# It clearly confirms my earlier suggestion, that DST begins at 22:00
-# on Easter Island.... But it also seems to be saying that the
-# observance of DST in Chile began in 1966, rather than 1969 as
-# ... [Shanks] has it....
-#
-# My translation:
-#
-# "The Chilean Army has announced that summer time will begin tomorrow,
-# Saturday, October 14 in continental Chile, insular Chile, and
-# Antarctica, as provided by Supreme Decree 25 of January 11, 1966.
-# By the preceding, official time in continental Chile and Chilean
-# Antarctic, and official time in Western Insular Chile, which applies
-# to Easter Island and Sala y Gomez Island, will be set forward at
-# midnight and at 22:00, respectively, by 20 minutes."
+# From Oscar van Vlijmen (2006-10-08):
+# http://www.horaoficial.cl/cambio.htm
-# From Paul Eggert (2001-05-04):
-# Go with this article in preference to Shanks's 1969 date for modern DST.
-# Assume this rule has been used since DST was introduced in the islands.
+# From Jesper Norgaard Welen (2006-10-08):
+# I think that there are some obvious mistakes in the suggested link
+# from Oscar van Vlijmen,... for instance entry 66 says that GMT-4
+# ended 1990-09-12 while entry 67 only begins GMT-3 at 1990-09-15
+# (they should have been 1990-09-15 and 1990-09-16 respectively), but
+# anyhow it clears up some doubts too.
-# From Paul Eggert (2002-10-24):
-# <http://www.shoa.cl/shoa/faqhoraoficial.htm> gives many details that
-# disagree with the following table, but we haven't had time to compare them.
+# The following data are from <http://www.horaoficial.cl/horaof.htm>
+# (2006-09-20), transcribed by Jesper Norgaard Welen.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Chile 1918 only - Sep 1 0:00 1:00 S
-Rule Chile 1919 only - Jul 2 0:00 0 -
-Rule Chile 1927 1931 - Sep 1 0:00 1:00 S
+Rule Chile 1927 1932 - Sep 1 0:00 1:00 S
Rule Chile 1928 1932 - Apr 1 0:00 0 -
-Rule Chile 1966 1997 - Oct Sun>=9 4:00u 1:00 S
-Rule Chile 1967 1998 - Mar Sun>=9 3:00u 0 -
+Rule Chile 1942 only - Jun 1 4:00u 0 -
+Rule Chile 1942 only - Aug 1 5:00u 1:00 S
+Rule Chile 1946 only - Jul 15 4:00u 1:00 S
+Rule Chile 1946 only - Sep 1 3:00u 0:00 -
+Rule Chile 1947 only - Apr 1 4:00u 0 -
+Rule Chile 1968 only - Nov 3 4:00u 1:00 S
+Rule Chile 1969 only - Mar 30 3:00u 0 -
+Rule Chile 1969 only - Nov 23 4:00u 1:00 S
+Rule Chile 1970 only - Mar 29 3:00u 0 -
+Rule Chile 1971 only - Mar 14 3:00u 0 -
+Rule Chile 1970 1972 - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1972 1986 - Mar Sun>=9 3:00u 0 -
+Rule Chile 1973 only - Sep 30 4:00u 1:00 S
+Rule Chile 1974 1987 - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1987 only - Apr 12 3:00u 0 -
+Rule Chile 1988 1989 - Mar Sun>=9 3:00u 0 -
+Rule Chile 1988 only - Oct Sun>=1 4:00u 1:00 S
+Rule Chile 1989 only - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1990 only - Mar 18 3:00u 0 -
+Rule Chile 1990 only - Sep 16 4:00u 1:00 S
+Rule Chile 1991 1996 - Mar Sun>=9 3:00u 0 -
+Rule Chile 1991 1997 - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1997 only - Mar 30 3:00u 0 -
+Rule Chile 1998 only - Mar Sun>=9 3:00u 0 -
Rule Chile 1998 only - Sep 27 4:00u 1:00 S
Rule Chile 1999 only - Apr 4 3:00u 0 -
Rule Chile 1999 max - Oct Sun>=9 4:00u 1:00 S
Rule Chile 2000 max - Mar Sun>=9 3:00u 0 -
-# IATA SSIM anomalies: (1990-09) says 1990-09-16; (1992-02) says 1992-03-14;
+# IATA SSIM anomalies: (1992-02) says 1992-03-14;
# (1996-09) says 1998-03-08. Ignore these.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone America/Santiago -4:42:40 - LMT 1890
- -4:42:40 - SMT 1910 # Santiago Mean Time
- -5:00 Chile CL%sT 1932 Sep # Chile Time
+Zone America/Santiago -4:42:46 - LMT 1890
+ -4:42:46 - SMT 1910 # Santiago Mean Time
+ -5:00 - CLT 1916 Jul 1 # Chile Time
+ -4:42:46 - SMT 1918 Sep 1 # Santiago Mean Time
+ -4:00 - CLT 1919 Jul 1 # Chile Time
+ -4:42:46 - SMT 1927 Sep 1 # Santiago Mean Time
+ -5:00 Chile CL%sT 1947 May 22 # Chile Time
-4:00 Chile CL%sT
Zone Pacific/Easter -7:17:28 - LMT 1890 # Mataveri
-7:17:28 - MMT 1932 Sep # Mataveri Mean Time
- -7:00 Chile EAS%sT 1982 Mar 14 # Easter I Time
+ -7:00 Chile EAS%sT 1982 Jan 18 21:00 # Easter I Time
-6:00 Chile EAS%sT
#
# Sala y Gomez Island is like Pacific/Easter.
@@ -760,11 +769,9 @@ Zone Pacific/Easter -7:17:28 - LMT 1890 # Mataveri
# San Felix, and Antarctic bases, are like America/Santiago.
# Colombia
-# Shanks specifies 24:00 for 1992 transition times; go with IATA,
-# as it seems implausible to change clocks at midnight New Year's Eve.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule CO 1992 only - May 2 0:00 1:00 S
-Rule CO 1992 only - Dec 31 0:00 0 -
+Rule CO 1992 only - May 3 0:00 1:00 S
+Rule CO 1993 only - Apr 4 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Bogota -4:56:20 - LMT 1884 Mar 13
-4:56:20 - BMT 1914 Nov 23 # Bogota Mean Time
@@ -773,10 +780,21 @@ Zone America/Bogota -4:56:20 - LMT 1884 Mar 13
# no information; probably like America/Bogota
# Curacao
-# Shanks says that Bottom and Oranjestad have been at -4:00 since
-# standard time was introduced on 1912-03-02; and that Kralendijk and Rincon
-# used Kralendijk Mean Time (-4:33:08) from 1912-02-02 to 1965-01-01.
-# This all predates our 1970 cutoff, though.
+#
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger say that The Bottom and Philipsburg have been at
+# -4:00 since standard time was introduced on 1912-03-02; and that
+# Kralendijk and Rincon used Kralendijk Mean Time (-4:33:08) from
+# 1912-02-02 to 1965-01-01. The former is dubious, since S&P also say
+# Saba Island has been like Curacao.
+# This all predates our 1970 cutoff, though.
+#
+# By July 2007 Curacao and St Maarten are planned to become
+# associated states within the Netherlands, much like Aruba;
+# Bonaire, Saba and St Eustatius would become directly part of the
+# Netherlands as Kingdom Islands. This won't affect their time zones
+# though, as far as we know.
+#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Curacao -4:35:44 - LMT 1912 Feb 12 # Willemstad
-4:30 - ANT 1965 # Netherlands Antilles Time
@@ -793,9 +811,9 @@ Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno
# Falklands
-# From Paul Eggert (2001-03-05):
-# Between 1990 and 2000 inclusive, Shanks and the IATA agree except
-# the IATA gives 1996-09-08. Go with Shanks.
+# From Paul Eggert (2006-03-22):
+# Between 1990 and 2000 inclusive, Shanks & Pottenger and the IATA agree except
+# the IATA gives 1996-09-08. Go with Shanks & Pottenger.
# From Falkland Islands Government Office, London (2001-01-22)
# via Jesper Norgaard:
@@ -878,9 +896,9 @@ Zone America/Guyana -3:52:40 - LMT 1915 Mar # Georgetown
-4:00 - GYT
# Paraguay
-# From Paul Eggert (1999-10-29):
-# Shanks (1999) says that spring transitions are from 01:00 -> 02:00,
-# and autumn transitions are from 00:00 -> 23:00. Go with earlier
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger say that spring transitions are from 01:00 -> 02:00,
+# and autumn transitions are from 00:00 -> 23:00. Go with pre-1999
# editions of Shanks, and with the IATA, who say transitions occur at 00:00.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Para 1975 1988 - Oct 1 0:00 1:00 S
@@ -911,13 +929,10 @@ Rule Para 1996 only - Mar 1 0:00 0 -
# year, the time will change on the first Sunday of October; likewise, the
# clock will be set back on the first Sunday of March.
#
-# From Jesper Norgaard (2001-03-06) [an official URL saying similar things]:
-# http://gateway.abc.com.py:8000/pub/pag04.mbr/artic?FHA=2001-03-03-02.24.52.900592
-#
Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 S
-# IATA SSIM (1997-09) says Mar 1; go with Shanks.
+# IATA SSIM (1997-09) says Mar 1; go with Shanks & Pottenger.
Rule Para 1997 only - Feb lastSun 0:00 0 -
-# Shanks says 1999-02-28; IATA SSIM (1999-02) says 1999-02-27, but
+# Shanks & Pottenger say 1999-02-28; IATA SSIM (1999-02) says 1999-02-27, but
# (1999-09) reports no date; go with above sources and Gerd Knops (2001-02-27).
Rule Para 1998 2001 - Mar Sun>=1 0:00 0 -
# From Rives McDow (2002-02-28):
@@ -931,7 +946,9 @@ Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 S
# There are several sources that claim that Paraguay made
# a timezone rule change in autumn 2004.
# From Steffen Thorsen (2005-01-05):
-# Decree 1,867 (2004-03-05) <http://www.labor.com.py/noticias.asp?id=27>
+# Decree 1,867 (2004-03-05)
+# From Carlos Raul Perasso via Jesper Norgaard Welen (2006-10-13)
+# <http://www.presidencia.gov.py/decretos/D1867.pdf>
Rule Para 2004 max - Oct Sun>=15 0:00 1:00 S
Rule Para 2005 max - Mar Sun>=8 0:00 0 -
@@ -949,8 +966,8 @@ Zone America/Asuncion -3:50:40 - LMT 1890
# When we were in Peru in 1985-1986, they apparently switched over
# sometime between December 29 and January 3 while we were on the Amazon.
#
-# From Paul Eggert (2003-11-02):
-# Shanks doesn't have this transition. Assume 1986 was like 1987.
+# From Paul Eggert (2006-03-22):
+# Shanks & Pottenger don't have this transition. Assume 1986 was like 1987.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Peru 1938 only - Jan 1 0:00 1:00 S
@@ -961,7 +978,7 @@ Rule Peru 1986 1987 - Jan 1 0:00 1:00 S
Rule Peru 1986 1987 - Apr 1 0:00 0 -
Rule Peru 1990 only - Jan 1 0:00 1:00 S
Rule Peru 1990 only - Apr 1 0:00 0 -
-# IATA is ambiguous for 1993/1995; go with Shanks.
+# IATA is ambiguous for 1993/1995; go with Shanks & Pottenger.
Rule Peru 1994 only - Jan 1 0:00 1:00 S
Rule Peru 1994 only - Apr 1 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -994,23 +1011,23 @@ Zone America/Port_of_Spain -4:06:04 - LMT 1912 Mar 2
# Uruguay
# From Paul Eggert (1993-11-18):
# Uruguay wins the prize for the strangest peacetime manipulation of the rules.
-# From Shanks:
+# From Shanks & Pottenger:
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-# Whitman gives 1923 Oct 1; go with Shanks.
+# Whitman gives 1923 Oct 1; go with Shanks & Pottenger.
Rule Uruguay 1923 only - Oct 2 0:00 0:30 HS
Rule Uruguay 1924 1926 - Apr 1 0:00 0 -
Rule Uruguay 1924 1925 - Oct 1 0:00 0:30 HS
Rule Uruguay 1933 1935 - Oct lastSun 0:00 0:30 HS
-# Shanks gives 1935 Apr 1 0:00 and 1936 Mar 30 0:00; go with Whitman.
+# Shanks & Pottenger give 1935 Apr 1 0:00 & 1936 Mar 30 0:00; go with Whitman.
Rule Uruguay 1934 1936 - Mar Sat>=25 23:30s 0 -
Rule Uruguay 1936 only - Nov 1 0:00 0:30 HS
Rule Uruguay 1937 1941 - Mar lastSun 0:00 0 -
-# Whitman gives 1937 Oct 3; go with Shanks.
+# Whitman gives 1937 Oct 3; go with Shanks & Pottenger.
Rule Uruguay 1937 1940 - Oct lastSun 0:00 0:30 HS
# Whitman gives 1941 Oct 24 - 1942 Mar 27, 1942 Dec 14 - 1943 Apr 13,
-# and 1943 Apr 13 ``to present time''; go with Shanks.
-Rule Uruguay 1941 only - Aug 1 0:00 0 -
-Rule Uruguay 1942 only - Jan 1 0:00 0:30 HS
+# and 1943 Apr 13 ``to present time''; go with Shanks & Pottenger.
+Rule Uruguay 1941 only - Aug 1 0:00 0:30 HS
+Rule Uruguay 1942 only - Jan 1 0:00 0 -
Rule Uruguay 1942 only - Dec 14 0:00 1:00 S
Rule Uruguay 1943 only - Mar 14 0:00 0 -
Rule Uruguay 1959 only - May 24 0:00 1:00 S
@@ -1036,7 +1053,7 @@ Rule Uruguay 1988 only - Mar 14 0:00 0 -
Rule Uruguay 1988 only - Dec 11 0:00 1:00 S
Rule Uruguay 1989 only - Mar 12 0:00 0 -
Rule Uruguay 1989 only - Oct 29 0:00 1:00 S
-# Shanks says no DST was observed in 1990/1 and 1991/2,
+# Shanks & Pottenger say no DST was observed in 1990/1 and 1991/2,
# and that 1992/3's DST was from 10-25 to 03-01. Go with IATA.
Rule Uruguay 1990 1992 - Mar Sun>=1 0:00 0 -
Rule Uruguay 1990 1991 - Oct Sun>=21 0:00 1:00 S
@@ -1057,6 +1074,10 @@ Rule Uruguay 2005 only - Mar 27 2:00 0 -
# 02:00 local time, official time in Uruguay will be at GMT -2.
Rule Uruguay 2005 only - Oct 9 2:00 1:00 S
Rule Uruguay 2006 only - Mar 12 2:00 0 -
+# From Jesper Norgaard Welen (2006-09-06):
+# http://www.presidencia.gub.uy/_web/decretos/2006/09/CM%20210_08%2006%202006_00001.PDF
+Rule Uruguay 2006 max - Oct Sun>=1 2:00 1:00 S
+Rule Uruguay 2007 max - Mar Sun>=8 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28
-3:44:44 - MMT 1920 May 1 # Montevideo MT
diff --git a/libc/timezone/tzfile.h b/libc/timezone/tzfile.h
index fb6ca9880..3a9eee305 100644
--- a/libc/timezone/tzfile.h
+++ b/libc/timezone/tzfile.h
@@ -21,7 +21,7 @@
#ifndef lint
#ifndef NOID
-static char tzfilehid[] = "@(#)tzfile.h 7.18";
+static char tzfilehid[] = "@(#)tzfile.h 8.1";
#endif /* !defined NOID */
#endif /* !defined lint */
@@ -49,7 +49,8 @@ static char tzfilehid[] = "@(#)tzfile.h 7.18";
struct tzhead {
char tzh_magic[4]; /* TZ_MAGIC */
- char tzh_reserved[16]; /* reserved for future use */
+ char tzh_version[1]; /* '\0' or '2' as of 2005 */
+ char tzh_reserved[15]; /* reserved--must be zero */
char tzh_ttisgmtcnt[4]; /* coded number of trans. time flags */
char tzh_ttisstdcnt[4]; /* coded number of trans. time flags */
char tzh_leapcnt[4]; /* coded number of leap seconds */
@@ -84,18 +85,22 @@ struct tzhead {
*/
/*
+** If tzh_version is '2' or greater, the above is followed by a second instance
+** of tzhead and a second instance of the data in which each coded transition
+** time uses 8 rather than 4 chars,
+** then a POSIX-TZ-environment-variable-style string for use in handling
+** instants after the last transition time stored in the file
+** (with nothing between the newlines if there is no POSIX representation for
+** such instants).
+*/
+
+/*
** In the current implementation, "tzset()" refuses to deal with files that
** exceed any of the limits below.
*/
#ifndef TZ_MAX_TIMES
-/*
-** The TZ_MAX_TIMES value below is enough to handle a bit more than a
-** year's worth of solar time (corrected daily to the nearest second) or
-** 138 years of Pacific Presidential Election time
-** (where there are three time zone transitions every fourth year).
-*/
-#define TZ_MAX_TIMES 370
+#define TZ_MAX_TIMES 1200
#endif /* !defined TZ_MAX_TIMES */
#ifndef TZ_MAX_TYPES
diff --git a/libc/timezone/tzselect.ksh b/libc/timezone/tzselect.ksh
index f6e28bfda..b99af8273 100644
--- a/libc/timezone/tzselect.ksh
+++ b/libc/timezone/tzselect.ksh
@@ -1,6 +1,6 @@
#! @KSH@
-# '@(#)tzselect.ksh 1.8'
+# '@(#)tzselect.ksh 8.1'
# Ask the user about the time zone, and output the resulting TZ value to stdout.
# Interact with the user via stderr and stdin.
diff --git a/libc/timezone/zdump.c b/libc/timezone/zdump.c
index d525da1ba..b5dd09b86 100644
--- a/libc/timezone/zdump.c
+++ b/libc/timezone/zdump.c
@@ -1,4 +1,4 @@
-static char elsieid[] = "@(#)zdump.c 7.74";
+static char elsieid[] = "@(#)zdump.c 8.2";
/*
** This code has been made independent of the rest of the time
@@ -15,7 +15,7 @@ static char elsieid[] = "@(#)zdump.c 7.74";
#include "ctype.h" /* for isalpha et al. */
#ifndef isascii
#define isascii(x) 1
-#endif
+#endif /* !defined isascii */
#ifndef ZDUMP_LO_YEAR
#define ZDUMP_LO_YEAR (-500)
@@ -130,11 +130,7 @@ static char elsieid[] = "@(#)zdump.c 7.74";
#endif /* !defined TZ_DOMAIN */
#ifndef P
-#ifdef __STDC__
#define P(x) x
-#else /* !defined __STDC__ */
-#define P(x) ()
-#endif /* !defined __STDC__ */
#endif /* !defined P */
extern char ** environ;
@@ -389,7 +385,7 @@ _("%s: usage is %s [ --version ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n"),
}
if (fflush(stdout) || ferror(stdout)) {
(void) fprintf(stderr, "%s: ", progname);
- (void) perror(_("Error writing to standard output"));
+ (void) perror(_("Error writing standard output"));
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
@@ -418,14 +414,21 @@ _("%s: use of -v on system with floating time_t other than float or double\n"),
}
} else if (0 > (time_t) -1) {
/*
- ** time_t is signed.
+ ** time_t is signed. Assume overflow wraps around.
*/
- register time_t hibit;
+ time_t t = 0;
+ time_t t1 = 1;
- for (hibit = 1; (hibit * 2) != 0; hibit *= 2)
- continue;
- absolute_min_time = hibit;
- absolute_max_time = -(hibit + 1);
+ while (t < t1) {
+ t = t1;
+ t1 = 2 * t1 + 1;
+ }
+
+ absolute_max_time = t;
+ t = -t;
+ absolute_min_time = t - 1;
+ if (t < absolute_min_time)
+ absolute_min_time = t;
} else {
/*
** time_t is unsigned.
@@ -468,10 +471,7 @@ const long y;
}
static time_t
-hunt(name, lot, hit)
-char * name;
-time_t lot;
-time_t hit;
+hunt(char *name, time_t lot, time_t hit)
{
time_t t;
long diff;
@@ -541,10 +541,7 @@ struct tm * oldp;
}
static void
-show(zone, t, v)
-char * zone;
-time_t t;
-int v;
+show(char *zone, time_t t, int v)
{
register struct tm * tmp;
diff --git a/libc/timezone/zic.c b/libc/timezone/zic.c
index acb76fb3b..f7393ea7b 100644
--- a/libc/timezone/zic.c
+++ b/libc/timezone/zic.c
@@ -1,15 +1,18 @@
-static char elsieid[] = "@(#)zic.c 7.128";
-
/*
-** Regardless of the type of time_t, we do our work using this type.
+** This file is in the public domain, so clarified as of
+** 2006-07-17 by Arthur David Olson.
*/
-typedef int zic_t;
+static char elsieid[] = "@(#)zic.c 8.7";
#include "private.h"
#include "locale.h"
#include "tzfile.h"
+#define ZIC_VERSION '2'
+
+typedef int_fast64_t zic_t;
+
#ifndef ZIC_MAX_ABBR_LEN_WO_WARN
#define ZIC_MAX_ABBR_LEN_WO_WARN 6
#endif /* !defined ZIC_MAX_ABBR_LEN_WO_WARN */
@@ -36,6 +39,11 @@ typedef int zic_t;
#define isascii(x) 1
#endif
+#define OFFSET_STRLEN_MAXIMUM (7 + INT_STRLEN_MAXIMUM(long))
+#define RULE_STRLEN_MAXIMUM 8 /* "Mdd.dd.d" */
+
+#define end(cp) (strchr((cp), '\0'))
+
struct rule {
const char * r_filename;
int r_linenum;
@@ -44,6 +52,8 @@ struct rule {
int r_loyear; /* for example, 1986 */
int r_hiyear; /* for example, 1986 */
const char * r_yrtype;
+ int r_lowasnum;
+ int r_hiwasnum;
int r_month; /* 0..11 */
@@ -103,9 +113,10 @@ static void adjleap P((void));
static void associate P((void));
static int ciequal P((const char * ap, const char * bp));
static void convert P((long val, char * buf));
+static void convert64 P((zic_t val, char * buf));
static void dolink P((const char * fromfile, const char * tofile));
static void doabbr P((char * abbr, const char * format,
- const char * letters, int isdst));
+ const char * letters, int isdst, int doquotes));
static void eat P((const char * name, int num));
static void eats P((const char * name, int num,
const char * rname, int rnum));
@@ -121,6 +132,7 @@ static void inrule P((char ** fields, int nfields));
static int inzcont P((char ** fields, int nfields));
static int inzone P((char ** fields, int nfields));
static int inzsub P((char ** fields, int nfields, int iscont));
+static int is32 P((zic_t x));
static int itsabbr P((const char * abbr, const char * word));
static int itsdir P((const char * name));
static int lowerit P((int c));
@@ -130,16 +142,22 @@ static void newabbr P((const char * abbr));
static long oadd P((long t1, long t2));
static void outzone P((const struct zone * zp, int ntzones));
static void puttzcode P((long code, FILE * fp));
+static void puttzcode64 P((zic_t code, FILE * fp));
static int rcomp P((const void * leftp, const void * rightp));
static zic_t rpytime P((const struct rule * rp, int wantedy));
static void rulesub P((struct rule * rp,
const char * loyearp, const char * hiyearp,
const char * typep, const char * monthp,
const char * dayp, const char * timep));
+static int stringoffset P((char * result, long offset));
+static int stringrule P((char * result, const struct rule * rp,
+ long dstoff, long gmtoff));
+static void stringzone P((char * result,
+ const struct zone * zp, int ntzones));
static void setboundaries P((void));
static zic_t tadd P((zic_t t1, long t2));
static void usage P((void));
-static void writezone P((const char * name));
+static void writezone P((const char * name, const char * string));
static int yearistype P((int year, const char * type));
#if !HAVE_STRERROR
@@ -150,13 +168,16 @@ static int charcnt;
static int errors;
static const char * filename;
static int leapcnt;
+static int leapseen;
+static int leapminyear;
+static int leapmaxyear;
static int linenum;
+static int max_abbrvar_len;
+static int max_format_len;
static zic_t max_time;
static int max_year;
-static int max_year_representable;
static zic_t min_time;
static int min_year;
-static int min_year_representable;
static int noise;
static const char * rfilename;
static int rlinenum;
@@ -453,7 +474,7 @@ static void
usage P((void))
{
(void) fprintf(stderr, _("%s: usage is %s \
-[ --version ] [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\
+[ --version ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\
\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"),
progname, progname);
exit(EXIT_FAILURE);
@@ -464,7 +485,6 @@ static const char * lcltime;
static const char * directory;
static const char * leapsec;
static const char * yitcommand;
-static int sflag = FALSE;
int
main(argc, argv)
@@ -486,6 +506,11 @@ char * argv[];
(void) textdomain(TZ_DOMAIN);
#endif /* HAVE_GETTEXT */
progname = argv[0];
+ if (TYPE_BIT(zic_t) < 64) {
+ (void) fprintf(stderr, "%s: %s\n", progname,
+ _("wild compilation-time specification of zic_t"));
+ exit(EXIT_FAILURE);
+ }
for (i = 1; i < argc; ++i)
if (strcmp(argv[i], "--version") == 0) {
(void) printf("%s\n", elsieid);
@@ -549,7 +574,7 @@ _("%s: More than one -L option specified\n"),
noise = TRUE;
break;
case 's':
- sflag = TRUE;
+ (void) printf("%s: -s ignored\n", progname);
break;
}
if (optind == argc - 1 && strcmp(argv[optind], "=") == 0)
@@ -671,54 +696,17 @@ warning(_("hard link failed, symbolic link used"));
ifree(toname);
}
-#ifndef INT_MAX
-#define INT_MAX ((int) (((unsigned)~0)>>1))
-#endif /* !defined INT_MAX */
-
-#ifndef INT_MIN
-#define INT_MIN ((int) ~(((unsigned)~0)>>1))
-#endif /* !defined INT_MIN */
-
-/*
-** The tz file format currently allows at most 32-bit quantities.
-** This restriction should be removed before signed 32-bit values
-** wrap around in 2038, but unfortunately this will require a
-** change to the tz file format.
-*/
-
-#define MAX_BITS_IN_FILE 32
-#define TIME_T_BITS_IN_FILE ((TYPE_BIT(zic_t) < MAX_BITS_IN_FILE) ? \
- TYPE_BIT(zic_t) : MAX_BITS_IN_FILE)
+#define TIME_T_BITS_IN_FILE 64
static void
setboundaries P((void))
{
register int i;
- if (TYPE_SIGNED(zic_t)) {
- min_time = -1;
- for (i = 0; i < TIME_T_BITS_IN_FILE - 1; ++i)
- min_time *= 2;
- max_time = -(min_time + 1);
- if (sflag)
- min_time = 0;
- } else {
- min_time = 0;
- max_time = 2 - sflag;
- for (i = 0; i < TIME_T_BITS_IN_FILE - 1; ++i)
- max_time *= 2;
- --max_time;
- }
- {
- time_t t;
-
- t = (time_t) min_time;
- min_year = TM_YEAR_BASE + gmtime(&t)->tm_year;
- t = (time_t) max_time;
- max_year = TM_YEAR_BASE + gmtime(&t)->tm_year;
- }
- min_year_representable = min_year;
- max_year_representable = max_year;
+ min_time = -1;
+ for (i = 0; i < TIME_T_BITS_IN_FILE - 1; ++i)
+ min_time *= 2;
+ max_time = -(min_time + 1);
}
static int
@@ -993,6 +981,8 @@ const int nfields;
fields[RF_MONTH], fields[RF_DAY], fields[RF_TOD]);
r.r_name = ecpyalloc(fields[RF_NAME]);
r.r_abbrvar = ecpyalloc(fields[RF_ABBRVAR]);
+ if (max_abbrvar_len < strlen(r.r_abbrvar))
+ max_abbrvar_len = strlen(r.r_abbrvar);
rules = (struct rule *) (void *) erealloc((char *) rules,
(int) ((nrules + 1) * sizeof *rules));
rules[nrules++] = r;
@@ -1098,6 +1088,8 @@ const int iscont;
}
z.z_rule = ecpyalloc(fields[i_rule]);
z.z_format = ecpyalloc(fields[i_format]);
+ if (max_format_len < strlen(z.z_format))
+ max_format_len = strlen(z.z_format);
hasuntil = nfields > i_untilyear;
if (hasuntil) {
z.z_untilrule.r_filename = filename;
@@ -1159,6 +1151,11 @@ const int nfields;
error(_("invalid leaping year"));
return;
}
+ if (!leapseen || leapmaxyear < year)
+ leapmaxyear = year;
+ if (!leapseen || leapminyear > year)
+ leapminyear = year;
+ leapseen = TRUE;
j = EPOCH_YEAR;
while (j != year) {
if (year > j) {
@@ -1313,7 +1310,8 @@ const char * const timep;
*/
cp = loyearp;
lp = byword(cp, begin_years);
- if (lp != NULL) switch ((int) lp->l_value) {
+ rp->r_lowasnum = lp == NULL;
+ if (!rp->r_lowasnum) switch ((int) lp->l_value) {
case YR_MINIMUM:
rp->r_loyear = INT_MIN;
break;
@@ -1328,14 +1326,11 @@ const char * const timep;
} else if (sscanf(cp, scheck(cp, "%d"), &rp->r_loyear) != 1) {
error(_("invalid starting year"));
return;
- } else if (noise) {
- if (rp->r_loyear < min_year_representable)
- warning(_("starting year too low to be represented"));
- else if (rp->r_loyear > max_year_representable)
- warning(_("starting year too high to be represented"));
}
cp = hiyearp;
- if ((lp = byword(cp, end_years)) != NULL) switch ((int) lp->l_value) {
+ lp = byword(cp, end_years);
+ rp->r_hiwasnum = lp == NULL;
+ if (!rp->r_hiwasnum) switch ((int) lp->l_value) {
case YR_MINIMUM:
rp->r_hiyear = INT_MIN;
break;
@@ -1353,11 +1348,6 @@ const char * const timep;
} else if (sscanf(cp, scheck(cp, "%d"), &rp->r_hiyear) != 1) {
error(_("invalid ending year"));
return;
- } else if (noise) {
- if (rp->r_loyear < min_year_representable)
- warning(_("ending year too low to be represented"));
- else if (rp->r_loyear > max_year_representable)
- warning(_("ending year too high to be represented"));
}
if (rp->r_loyear > rp->r_hiyear) {
error(_("starting year greater than ending year"));
@@ -1372,8 +1362,6 @@ const char * const timep;
}
rp->r_yrtype = ecpyalloc(typep);
}
- if (rp->r_loyear < min_year && rp->r_loyear > 0)
- min_year = rp->r_loyear;
/*
** Day work.
** Accept things such as:
@@ -1427,13 +1415,25 @@ const long val;
char * const buf;
{
register int i;
- register long shift;
+ register int shift;
for (i = 0, shift = 24; i < 4; ++i, shift -= 8)
buf[i] = val >> shift;
}
static void
+convert64(val, buf)
+const zic_t val;
+char * const buf;
+{
+ register int i;
+ register int shift;
+
+ for (i = 0, shift = 56; i < 8; ++i, shift -= 8)
+ buf[i] = val >> shift;
+}
+
+static void
puttzcode(val, fp)
const long val;
FILE * const fp;
@@ -1444,28 +1444,50 @@ FILE * const fp;
(void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp);
}
+static void
+puttzcode64(val, fp)
+const zic_t val;
+FILE * const fp;
+{
+ char buf[8];
+
+ convert64(val, buf);
+ (void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp);
+}
+
static int
atcomp(avp, bvp)
-void * avp;
-void * bvp;
+const void * avp;
+const void * bvp;
{
- if (((struct attype *) avp)->at < ((struct attype *) bvp)->at)
- return -1;
- else if (((struct attype *) avp)->at > ((struct attype *) bvp)->at)
- return 1;
- else return 0;
+ const zic_t a = ((const struct attype *) avp)->at;
+ const zic_t b = ((const struct attype *) bvp)->at;
+
+ return (a < b) ? -1 : (a > b);
+}
+
+static int
+is32(x)
+const zic_t x;
+{
+ return INT32_MIN <= x && x <= INT32_MAX;
}
static void
-writezone(name)
+writezone(name, string)
const char * const name;
+const char * const string;
{
- register FILE * fp;
- register int i, j;
- static char * fullname;
- static struct tzhead tzh;
- zic_t ats[TZ_MAX_TIMES];
- unsigned char types[TZ_MAX_TIMES];
+ register FILE * fp;
+ register int i, j;
+ register int leapcnt32, leapi32;
+ register int timecnt32, timei32;
+ register int pass;
+ static char * fullname;
+ static const struct tzhead tzh0;
+ static struct tzhead tzh;
+ zic_t ats[TZ_MAX_TIMES];
+ unsigned char types[TZ_MAX_TIMES];
/*
** Sort.
@@ -1509,6 +1531,36 @@ const char * const name;
ats[i] = attypes[i].at;
types[i] = attypes[i].type;
}
+ /*
+ ** Correct for leap seconds.
+ */
+ for (i = 0; i < timecnt; ++i) {
+ j = leapcnt;
+ while (--j >= 0)
+ if (ats[i] > trans[j] - corr[j]) {
+ ats[i] = tadd(ats[i], corr[j]);
+ break;
+ }
+ }
+ /*
+ ** Figure out 32-bit-limited starts and counts.
+ */
+ timecnt32 = timecnt;
+ timei32 = 0;
+ leapcnt32 = leapcnt;
+ leapi32 = 0;
+ while (timecnt32 > 0 && !is32(ats[timecnt32 - 1]))
+ --timecnt32;
+ while (timecnt32 > 0 && !is32(ats[timei32])) {
+ --timecnt32;
+ ++timei32;
+ }
+ while (leapcnt32 > 0 && !is32(trans[leapcnt32 - 1]))
+ --leapcnt32;
+ while (leapcnt32 > 0 && !is32(trans[leapi32])) {
+ --leapcnt32;
+ ++leapi32;
+ }
fullname = erealloc(fullname,
(int) (strlen(directory) + 1 + strlen(name) + 1));
(void) sprintf(fullname, "%s/%s", directory, name);
@@ -1533,67 +1585,150 @@ const char * const name;
exit(EXIT_FAILURE);
}
}
- convert(eitol(typecnt), tzh.tzh_ttisgmtcnt);
- convert(eitol(typecnt), tzh.tzh_ttisstdcnt);
- convert(eitol(leapcnt), tzh.tzh_leapcnt);
- convert(eitol(timecnt), tzh.tzh_timecnt);
- convert(eitol(typecnt), tzh.tzh_typecnt);
- convert(eitol(charcnt), tzh.tzh_charcnt);
- (void) strncpy(tzh.tzh_magic, TZ_MAGIC, sizeof tzh.tzh_magic);
+ for (pass = 1; pass <= 2; ++pass) {
+ register int thistimei, thistimecnt;
+ register int thisleapi, thisleapcnt;
+ register int thistimelim, thisleaplim;
+ int writetype[TZ_MAX_TIMES];
+ int typemap[TZ_MAX_TYPES];
+ register int thistypecnt;
+ char thischars[TZ_MAX_CHARS];
+ char thischarcnt;
+ int indmap[TZ_MAX_CHARS];
+
+ if (pass == 1) {
+ thistimei = timei32;
+ thistimecnt = timecnt32;
+ thisleapi = leapi32;
+ thisleapcnt = leapcnt32;
+ } else {
+ thistimei = 0;
+ thistimecnt = timecnt;
+ thisleapi = 0;
+ thisleapcnt = leapcnt;
+ }
+ thistimelim = thistimei + thistimecnt;
+ thisleaplim = thisleapi + thisleapcnt;
+ for (i = 0; i < typecnt; ++i)
+ writetype[i] = thistimecnt == timecnt;
+ if (thistimecnt == 0) {
+ /*
+ ** No transition times fall in the current
+ ** (32- or 64-bit) window.
+ */
+ if (typecnt != 0)
+ writetype[typecnt - 1] = TRUE;
+ } else {
+ for (i = thistimei - 1; i < thistimelim; ++i)
+ if (i >= 0)
+ writetype[types[i]] = TRUE;
+ /*
+ ** For America/Godthab and Antarctica/Palmer
+ */
+ if (thistimei == 0)
+ writetype[0] = TRUE;
+ }
+ thistypecnt = 0;
+ for (i = 0; i < typecnt; ++i)
+ typemap[i] = writetype[i] ? thistypecnt++ : -1;
+ for (i = 0; i < sizeof indmap / sizeof indmap[0]; ++i)
+ indmap[i] = -1;
+ thischarcnt = 0;
+ for (i = 0; i < typecnt; ++i) {
+ register char * thisabbr;
+
+ if (!writetype[i])
+ continue;
+ if (indmap[abbrinds[i]] >= 0)
+ continue;
+ thisabbr = &chars[abbrinds[i]];
+ for (j = 0; j < thischarcnt; ++j)
+ if (strcmp(&thischars[j], thisabbr) == 0)
+ break;
+ if (j == thischarcnt) {
+ (void) strcpy(&thischars[(int) thischarcnt],
+ thisabbr);
+ thischarcnt += strlen(thisabbr) + 1;
+ }
+ indmap[abbrinds[i]] = j;
+ }
#define DO(field) (void) fwrite((void *) tzh.field, \
(size_t) sizeof tzh.field, (size_t) 1, fp)
- DO(tzh_magic);
- DO(tzh_reserved);
- DO(tzh_ttisgmtcnt);
- DO(tzh_ttisstdcnt);
- DO(tzh_leapcnt);
- DO(tzh_timecnt);
- DO(tzh_typecnt);
- DO(tzh_charcnt);
+ tzh = tzh0;
+ (void) strncpy(tzh.tzh_magic, TZ_MAGIC, sizeof tzh.tzh_magic);
+ tzh.tzh_version[0] = ZIC_VERSION;
+ convert(eitol(thistypecnt), tzh.tzh_ttisgmtcnt);
+ convert(eitol(thistypecnt), tzh.tzh_ttisstdcnt);
+ convert(eitol(thisleapcnt), tzh.tzh_leapcnt);
+ convert(eitol(thistimecnt), tzh.tzh_timecnt);
+ convert(eitol(thistypecnt), tzh.tzh_typecnt);
+ convert(eitol(thischarcnt), tzh.tzh_charcnt);
+ DO(tzh_magic);
+ DO(tzh_version);
+ DO(tzh_reserved);
+ DO(tzh_ttisgmtcnt);
+ DO(tzh_ttisstdcnt);
+ DO(tzh_leapcnt);
+ DO(tzh_timecnt);
+ DO(tzh_typecnt);
+ DO(tzh_charcnt);
#undef DO
- for (i = 0; i < timecnt; ++i) {
- j = leapcnt;
- while (--j >= 0)
- if (ats[i] >= trans[j]) {
- ats[i] = tadd(ats[i], corr[j]);
- break;
- }
- puttzcode((long) ats[i], fp);
- }
- if (timecnt > 0)
- (void) fwrite((void *) types, (size_t) sizeof types[0],
- (size_t) timecnt, fp);
- for (i = 0; i < typecnt; ++i) {
- puttzcode((long) gmtoffs[i], fp);
- (void) putc(isdsts[i], fp);
- (void) putc(abbrinds[i], fp);
- }
- if (charcnt != 0)
- (void) fwrite((void *) chars, (size_t) sizeof chars[0],
- (size_t) charcnt, fp);
- for (i = 0; i < leapcnt; ++i) {
- if (roll[i]) {
- if (timecnt == 0 || trans[i] < ats[0]) {
- j = 0;
- while (isdsts[j])
- if (++j >= typecnt) {
- j = 0;
- break;
- }
- } else {
- j = 1;
- while (j < timecnt && trans[i] >= ats[j])
- ++j;
- j = types[j - 1];
+ for (i = thistimei; i < thistimelim; ++i)
+ if (pass == 1)
+ puttzcode((long) ats[i], fp);
+ else puttzcode64(ats[i], fp);
+ for (i = thistimei; i < thistimelim; ++i) {
+ unsigned char uc;
+
+ uc = typemap[types[i]];
+ (void) fwrite((void *) &uc,
+ (size_t) sizeof uc,
+ (size_t) 1,
+ fp);
+ }
+ for (i = 0; i < typecnt; ++i)
+ if (writetype[i]) {
+ puttzcode(gmtoffs[i], fp);
+ (void) putc(isdsts[i], fp);
+ (void) putc((unsigned char) indmap[abbrinds[i]], fp);
}
- puttzcode((long) tadd(trans[i], -gmtoffs[j]), fp);
- } else puttzcode((long) trans[i], fp);
- puttzcode((long) corr[i], fp);
- }
- for (i = 0; i < typecnt; ++i)
- (void) putc(ttisstds[i], fp);
- for (i = 0; i < typecnt; ++i)
- (void) putc(ttisgmts[i], fp);
+ if (thischarcnt != 0)
+ (void) fwrite((void *) thischars,
+ (size_t) sizeof thischars[0],
+ (size_t) thischarcnt, fp);
+ for (i = thisleapi; i < thisleaplim; ++i) {
+ register zic_t todo;
+
+ if (roll[i]) {
+ if (timecnt == 0 || trans[i] < ats[0]) {
+ j = 0;
+ while (isdsts[j])
+ if (++j >= typecnt) {
+ j = 0;
+ break;
+ }
+ } else {
+ j = 1;
+ while (j < timecnt &&
+ trans[i] >= ats[j])
+ ++j;
+ j = types[j - 1];
+ }
+ todo = tadd(trans[i], -gmtoffs[j]);
+ } else todo = trans[i];
+ if (pass == 1)
+ puttzcode((long) todo, fp);
+ else puttzcode64(todo, fp);
+ puttzcode(corr[i], fp);
+ }
+ for (i = 0; i < typecnt; ++i)
+ if (writetype[i])
+ (void) putc(ttisstds[i], fp);
+ for (i = 0; i < typecnt; ++i)
+ if (writetype[i])
+ (void) putc(ttisgmts[i], fp);
+ }
+ (void) fprintf(fp, "\n%s\n", string);
if (ferror(fp) || fclose(fp)) {
(void) fprintf(stderr, _("%s: Error writing %s\n"),
progname, fullname);
@@ -1602,21 +1737,223 @@ const char * const name;
}
static void
-doabbr(abbr, format, letters, isdst)
+doabbr(abbr, format, letters, isdst, doquotes)
char * const abbr;
const char * const format;
const char * const letters;
const int isdst;
+const int doquotes;
{
- if (strchr(format, '/') == NULL) {
+ register char * cp;
+ register char * slashp;
+ register int len;
+
+ slashp = strchr(format, '/');
+ if (slashp == NULL) {
if (letters == NULL)
(void) strcpy(abbr, format);
else (void) sprintf(abbr, format, letters);
- } else if (isdst)
- (void) strcpy(abbr, strchr(format, '/') + 1);
- else {
- (void) strcpy(abbr, format);
- *strchr(abbr, '/') = '\0';
+ } else if (isdst) {
+ (void) strcpy(abbr, slashp + 1);
+ } else {
+ if (slashp > format)
+ (void) strncpy(abbr, format,
+ (unsigned) (slashp - format));
+ abbr[slashp - format] = '\0';
+ }
+ if (!doquotes)
+ return;
+ for (cp = abbr; *cp != '\0'; ++cp)
+ if (strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZ", *cp) == NULL &&
+ strchr("abcdefghijklmnopqrstuvwxyz", *cp) == NULL)
+ break;
+ len = strlen(abbr);
+ if (len > 0 && *cp == '\0')
+ return;
+ abbr[len + 2] = '\0';
+ abbr[len + 1] = '>';
+ for ( ; len > 0; --len)
+ abbr[len] = abbr[len - 1];
+ abbr[0] = '<';
+}
+
+static void
+updateminmax(x)
+const int x;
+{
+ if (min_year > x)
+ min_year = x;
+ if (max_year < x)
+ max_year = x;
+}
+
+static int
+stringoffset(result, offset)
+char * result;
+long offset;
+{
+ register int hours;
+ register int minutes;
+ register int seconds;
+
+ result[0] = '\0';
+ if (offset < 0) {
+ (void) strcpy(result, "-");
+ offset = -offset;
+ }
+ seconds = offset % SECSPERMIN;
+ offset /= SECSPERMIN;
+ minutes = offset % MINSPERHOUR;
+ offset /= MINSPERHOUR;
+ hours = offset;
+ if (hours >= HOURSPERDAY) {
+ result[0] = '\0';
+ return -1;
+ }
+ (void) sprintf(end(result), "%d", hours);
+ if (minutes != 0 || seconds != 0) {
+ (void) sprintf(end(result), ":%02d", minutes);
+ if (seconds != 0)
+ (void) sprintf(end(result), ":%02d", seconds);
+ }
+ return 0;
+}
+
+static int
+stringrule(result, rp, dstoff, gmtoff)
+char * result;
+const struct rule * const rp;
+const long dstoff;
+const long gmtoff;
+{
+ register long tod;
+
+ result = end(result);
+ if (rp->r_dycode == DC_DOM) {
+ register int month, total;
+
+ if (rp->r_dayofmonth == 29 && rp->r_month == TM_FEBRUARY)
+ return -1;
+ total = 0;
+ for (month = 0; month < rp->r_month; ++month)
+ total += len_months[0][month];
+ (void) sprintf(result, "J%d", total + rp->r_dayofmonth);
+ } else {
+ register int week;
+
+ if (rp->r_dycode == DC_DOWGEQ) {
+ week = 1 + rp->r_dayofmonth / DAYSPERWEEK;
+ if ((week - 1) * DAYSPERWEEK + 1 != rp->r_dayofmonth)
+ return -1;
+ } else if (rp->r_dycode == DC_DOWLEQ) {
+ if (rp->r_dayofmonth == len_months[1][rp->r_month])
+ week = 5;
+ else {
+ week = 1 + rp->r_dayofmonth / DAYSPERWEEK;
+ if (week * DAYSPERWEEK - 1 != rp->r_dayofmonth)
+ return -1;
+ }
+ } else return -1; /* "cannot happen" */
+ (void) sprintf(result, "M%d.%d.%d",
+ rp->r_month + 1, week, rp->r_wday);
+ }
+ tod = rp->r_tod;
+ if (rp->r_todisgmt)
+ tod += gmtoff;
+ if (rp->r_todisstd && rp->r_stdoff == 0)
+ tod += dstoff;
+ if (tod < 0) {
+ result[0] = '\0';
+ return -1;
+ }
+ if (tod != 2 * SECSPERMIN * MINSPERHOUR) {
+ (void) strcat(result, "/");
+ if (stringoffset(end(result), tod) != 0)
+ return -1;
+ }
+ return 0;
+}
+
+static void
+stringzone(result, zpfirst, zonecount)
+char * result;
+const struct zone * const zpfirst;
+const int zonecount;
+{
+ register const struct zone * zp;
+ register struct rule * rp;
+ register struct rule * stdrp;
+ register struct rule * dstrp;
+ register int i;
+ register const char * abbrvar;
+
+ result[0] = '\0';
+ zp = zpfirst + zonecount - 1;
+ stdrp = dstrp = NULL;
+ for (i = 0; i < zp->z_nrules; ++i) {
+ rp = &zp->z_rules[i];
+ if (rp->r_hiwasnum || rp->r_hiyear != INT_MAX)
+ continue;
+ if (rp->r_yrtype != NULL)
+ continue;
+ if (rp->r_stdoff == 0) {
+ if (stdrp == NULL)
+ stdrp = rp;
+ else return;
+ } else {
+ if (dstrp == NULL)
+ dstrp = rp;
+ else return;
+ }
+ }
+ if (stdrp == NULL && dstrp == NULL) {
+ /*
+ ** There are no rules running through "max".
+ ** Let's find the latest rule.
+ */
+ for (i = 0; i < zp->z_nrules; ++i) {
+ rp = &zp->z_rules[i];
+ if (stdrp == NULL || rp->r_hiyear > stdrp->r_hiyear ||
+ (rp->r_hiyear == stdrp->r_hiyear &&
+ rp->r_month > stdrp->r_month))
+ stdrp = rp;
+ }
+ if (stdrp != NULL && stdrp->r_stdoff != 0)
+ return; /* We end up in DST (a POSIX no-no). */
+ /*
+ ** Horrid special case: if year is 2037,
+ ** presume this is a zone handled on a year-by-year basis;
+ ** do not try to apply a rule to the zone.
+ */
+ if (stdrp != NULL && stdrp->r_hiyear == 2037)
+ return;
+ }
+ if (stdrp == NULL && zp->z_nrules != 0)
+ return;
+ abbrvar = (stdrp == NULL) ? "" : stdrp->r_abbrvar;
+ doabbr(result, zp->z_format, abbrvar, FALSE, TRUE);
+ if (stringoffset(end(result), -zp->z_gmtoff) != 0) {
+ result[0] = '\0';
+ return;
+ }
+ if (dstrp == NULL)
+ return;
+ doabbr(end(result), zp->z_format, dstrp->r_abbrvar, TRUE, TRUE);
+ if (dstrp->r_stdoff != SECSPERMIN * MINSPERHOUR)
+ if (stringoffset(end(result),
+ -(zp->z_gmtoff + dstrp->r_stdoff)) != 0) {
+ result[0] = '\0';
+ return;
+ }
+ (void) strcat(result, ",");
+ if (stringrule(result, dstrp, dstrp->r_stdoff, zp->z_gmtoff) != 0) {
+ result[0] = '\0';
+ return;
+ }
+ (void) strcat(result, ",");
+ if (stringrule(result, stdrp, dstrp->r_stdoff, zp->z_gmtoff) != 0) {
+ result[0] = '\0';
+ return;
}
}
@@ -1637,8 +1974,17 @@ const int zonecount;
register int startttisstd;
register int startttisgmt;
register int type;
- char startbuf[BUFSIZ];
-
+ register char * startbuf;
+ register char * ab;
+ register char * envvar;
+ register int max_abbr_len;
+ register int max_envvar_len;
+
+ max_abbr_len = 2 + max_format_len + max_abbrvar_len;
+ max_envvar_len = 2 * max_abbr_len + 5 * 9;
+ startbuf = emalloc(max_abbr_len + 1);
+ ab = emalloc(max_abbr_len + 1);
+ envvar = emalloc(max_envvar_len + 1);
INITIALIZE(untiltime);
INITIALIZE(starttime);
/*
@@ -1653,6 +1999,48 @@ const int zonecount;
*/
startttisstd = FALSE;
startttisgmt = FALSE;
+ min_year = max_year = EPOCH_YEAR;
+ if (leapseen) {
+ updateminmax(leapminyear);
+ updateminmax(leapmaxyear);
+ }
+ for (i = 0; i < zonecount; ++i) {
+ zp = &zpfirst[i];
+ updateminmax(zp->z_untilrule.r_loyear);
+ for (j = 0; j < zp->z_nrules; ++j) {
+ rp = &zp->z_rules[j];
+ if (rp->r_lowasnum)
+ updateminmax(rp->r_loyear);
+ if (rp->r_hiwasnum)
+ updateminmax(rp->r_hiyear);
+ }
+ }
+ /*
+ ** Generate lots of data if a rule can't cover all future times.
+ */
+ stringzone(envvar, zpfirst, zonecount);
+ if (noise && envvar[0] == '\0') {
+ register char * wp;
+
+wp = ecpyalloc(_("no POSIX environment variable for zone"));
+ wp = ecatalloc(wp, " ");
+ wp = ecatalloc(wp, zpfirst->z_name);
+ warning(wp);
+ ifree(wp);
+ }
+ if (envvar[0] == '\0') {
+ if (min_year >= INT_MIN + YEARSPERREPEAT)
+ min_year -= YEARSPERREPEAT;
+ else min_year = INT_MIN;
+ if (max_year <= INT_MAX - YEARSPERREPEAT)
+ max_year += YEARSPERREPEAT;
+ else max_year = INT_MAX;
+ }
+ /*
+ ** For the benefit of older systems, generate data through 2037.
+ */
+ if (max_year < 2037)
+ max_year = 2037;
for (i = 0; i < zonecount; ++i) {
/*
** A guess that may well be corrected later.
@@ -1670,7 +2058,7 @@ const int zonecount;
if (zp->z_nrules == 0) {
stdoff = zp->z_stdoff;
doabbr(startbuf, zp->z_format,
- (char *) NULL, stdoff != 0);
+ (char *) NULL, stdoff != 0, FALSE);
type = addtype(oadd(zp->z_gmtoff, stdoff),
startbuf, stdoff != 0, startttisstd,
startttisgmt);
@@ -1700,7 +2088,6 @@ const int zonecount;
register int k;
register zic_t jtime, ktime;
register long offset;
- char buf[BUFSIZ];
INITIALIZE(ktime);
if (useuntil) {
@@ -1756,24 +2143,27 @@ const int zonecount;
stdoff);
doabbr(startbuf, zp->z_format,
rp->r_abbrvar,
- rp->r_stdoff != 0);
+ rp->r_stdoff != 0,
+ FALSE);
continue;
}
if (*startbuf == '\0' &&
startoff == oadd(zp->z_gmtoff,
- stdoff))
+ stdoff)) {
doabbr(startbuf,
zp->z_format,
rp->r_abbrvar,
rp->r_stdoff !=
- 0);
+ 0,
+ FALSE);
+ }
}
eats(zp->z_filename, zp->z_linenum,
rp->r_filename, rp->r_linenum);
- doabbr(buf, zp->z_format, rp->r_abbrvar,
- rp->r_stdoff != 0);
+ doabbr(ab, zp->z_format, rp->r_abbrvar,
+ rp->r_stdoff != 0, FALSE);
offset = oadd(zp->z_gmtoff, rp->r_stdoff);
- type = addtype(offset, buf, rp->r_stdoff != 0,
+ type = addtype(offset, ab, rp->r_stdoff != 0,
rp->r_todisstd, rp->r_todisgmt);
addtt(ktime, type);
}
@@ -1806,7 +2196,10 @@ error(_("can't determine time zone abbreviation to use just after until time"));
starttime = tadd(starttime, -gmtoff);
}
}
- writezone(zpfirst->z_name);
+ writezone(zpfirst->z_name, envvar);
+ ifree(startbuf);
+ ifree(ab);
+ ifree(envvar);
}
static void
@@ -2185,8 +2578,6 @@ register const int wantedy;
will not work with pre-2004 versions of zic"));
}
}
- if (dayoff < 0 && !TYPE_SIGNED(zic_t))
- return min_time;
if (dayoff < min_time / SECSPERDAY)
return min_time;
if (dayoff > max_time / SECSPERDAY)
diff --git a/libc/timezone/zone.tab b/libc/timezone/zone.tab
index 09cdf6940..aecb5bb94 100644
--- a/libc/timezone/zone.tab
+++ b/libc/timezone/zone.tab
@@ -1,4 +1,4 @@
-# @(#)zone.tab 8.1
+# @(#)zone.tab 8.5
#
# TZ zone descriptions
#
@@ -44,7 +44,7 @@ AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I
AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF)
AR -3124-06411 America/Argentina/Cordoba most locations (CB, CC, CN, ER, FM, LP, MN, NQ, RN, SA, SE, SF, SL)
AR -2411-06518 America/Argentina/Jujuy Jujuy (JY)
-AR -3124-06411 America/Argentina/Tucuman Tucuman (TM)
+AR -2649-06513 America/Argentina/Tucuman Tucuman (TM)
AR -2828-06547 America/Argentina/Catamarca Catamarca (CT), Chubut (CH)
AR -2926-06651 America/Argentina/La_Rioja La Rioja (LR)
AR -3132-06831 America/Argentina/San_Juan San Juan (SJ)
@@ -99,27 +99,28 @@ BT +2728+08939 Asia/Thimphu
BW -2545+02555 Africa/Gaborone
BY +5354+02734 Europe/Minsk
BZ +1730-08812 America/Belize
-CA +4734-05243 America/St_Johns Newfoundland Island
-CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), W Labrador, E Quebec & PEI
+CA +4734-05243 America/St_Johns Newfoundland Time, including SE Labrador
+CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), PEI
CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971
CA +4606-06447 America/Moncton Atlantic Time - New Brunswick
-CA +5320-06025 America/Goose_Bay Atlantic Time - E Labrador
+CA +5320-06025 America/Goose_Bay Atlantic Time - Labrador - most locations
+CA +5125-05707 America/Blanc-Sablon Atlantic Standard Time - Quebec - Lower North Shore
CA +4531-07334 America/Montreal Eastern Time - Quebec - most locations
CA +4339-07923 America/Toronto Eastern Time - Ontario - most locations
CA +4901-08816 America/Nipigon Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973
CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario
CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut
CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut
-CA +6408-08310 America/Coral_Harbour Eastern Standard Time - Southampton Island
-CA +6245-09210 America/Rankin_Inlet Central Time - central Nunavut
+CA +484531-0913718 America/Atikokan Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut
+CA +624900-0920459 America/Rankin_Inlet Central Time - central Nunavut
CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario
-CA +4843-09429 America/Rainy_River Central Time - Rainy River & Fort Frances, Ontario
+CA +4843-09434 America/Rainy_River Central Time - Rainy River & Fort Frances, Ontario
CA +6903-10505 America/Cambridge_Bay Central Time - west Nunavut
CA +5024-10439 America/Regina Central Standard Time - Saskatchewan - most locations
CA +5017-10750 America/Swift_Current Central Standard Time - Saskatchewan - midwest
CA +5333-11328 America/Edmonton Mountain Time - Alberta, east British Columbia & west Saskatchewan
CA +6227-11421 America/Yellowknife Mountain Time - central Northwest Territories
-CA +6825-11330 America/Inuvik Mountain Time - west Northwest Territories
+CA +682059-1334300 America/Inuvik Mountain Time - west Northwest Territories
CA +5946-12014 America/Dawson_Creek Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia
CA +4916-12307 America/Vancouver Pacific Time - west British Columbia
CA +6043-13503 America/Whitehorse Pacific Time - south Yukon
@@ -136,13 +137,12 @@ CL -3327-07040 America/Santiago most locations
CL -2710-10927 Pacific/Easter Easter Island & Sala y Gomez
CM +0403+00942 Africa/Douala
CN +3114+12128 Asia/Shanghai east China - Beijing, Guangdong, Shanghai, etc.
-CN +4545+12641 Asia/Harbin Heilongjiang
-CN +2934+10635 Asia/Chongqing central China - Gansu, Guizhou, Sichuan, Yunnan, etc.
-CN +4348+08735 Asia/Urumqi Tibet & most of Xinjiang Uyghur
-CN +3929+07559 Asia/Kashgar southwest Xinjiang Uyghur
+CN +4545+12641 Asia/Harbin Heilongjiang (except Mohe), Jilin
+CN +2934+10635 Asia/Chongqing central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.
+CN +4348+08735 Asia/Urumqi most of Tibet & Xinjiang
+CN +3929+07559 Asia/Kashgar west Tibet & Xinjiang
CO +0436-07405 America/Bogota
CR +0956-08405 America/Costa_Rica
-CS +4450+02030 Europe/Belgrade
CU +2308-08222 America/Havana
CV +1455-02331 Atlantic/Cape_Verde
CX -1025+10543 Indian/Christmas
@@ -177,11 +177,12 @@ GB +512830-0001845 Europe/London
GD +1203-06145 America/Grenada
GE +4143+04449 Asia/Tbilisi
GF +0456-05220 America/Cayenne
+GG +4927-00232 Europe/Guernsey
GH +0533-00013 Africa/Accra
GI +3608-00521 Europe/Gibraltar
GL +6411-05144 America/Godthab most locations
GL +7646-01840 America/Danmarkshavn east coast, north of Scoresbysund
-GL +7030-02215 America/Scoresbysund Scoresbysund / Ittoqqortoormiit
+GL +7029-02158 America/Scoresbysund Scoresbysund / Ittoqqortoormiit
GL +7634-06847 America/Thule Thule / Pituffik
GM +1328-01639 Africa/Banjul
GN +0931-01343 Africa/Conakry
@@ -204,12 +205,14 @@ ID -0507+11924 Asia/Makassar east & south Borneo, Celebes, Bali, Nusa Tengarra,
ID -0232+14042 Asia/Jayapura Irian Jaya & the Moluccas
IE +5320-00615 Europe/Dublin
IL +3146+03514 Asia/Jerusalem
+IM +5409-00428 Europe/Isle_of_Man
IN +2232+08822 Asia/Calcutta
IO -0720+07225 Indian/Chagos
IQ +3321+04425 Asia/Baghdad
IR +3540+05126 Asia/Tehran
IS +6409-02151 Atlantic/Reykjavik
IT +4154+01229 Europe/Rome
+JE +4912-00237 Europe/Jersey
JM +1800-07648 America/Jamaica
JO +3157+03556 Asia/Amman
JP +353916+1394441 Asia/Tokyo
@@ -244,6 +247,7 @@ LY +3254+01311 Africa/Tripoli
MA +3339-00735 Africa/Casablanca
MC +4342+00723 Europe/Monaco
MD +4700+02850 Europe/Chisinau
+ME +4247+01928 Europe/Podgorica
MG -1855+04731 Indian/Antananarivo
MH +0709+17112 Pacific/Majuro most locations
MH +0905+16720 Pacific/Kwajalein Kwajalein
@@ -257,7 +261,7 @@ MO +2214+11335 Asia/Macau
MP +1512+14545 Pacific/Saipan
MQ +1436-06105 America/Martinique
MR +1806-01557 Africa/Nouakchott
-MS +1644-06213 America/Montserrat
+MS +1643-06213 America/Montserrat
MT +3554+01431 Europe/Malta
MU -2010+05730 Indian/Mauritius
MV +0410+07330 Indian/Maldives
@@ -308,9 +312,11 @@ PY -2516-05740 America/Asuncion
QA +2517+05132 Asia/Qatar
RE -2052+05528 Indian/Reunion
RO +4426+02606 Europe/Bucharest
+RS +4450+02030 Europe/Belgrade
RU +5443+02030 Europe/Kaliningrad Moscow-01 - Kaliningrad
RU +5545+03735 Europe/Moscow Moscow+00 - west Russia
-RU +5312+05009 Europe/Samara Moscow+01 - Caspian Sea
+RU +4844+04425 Europe/Volgograd Moscow+00 - Caspian Sea
+RU +5312+05009 Europe/Samara Moscow+01 - Samara, Udmurtia
RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals
RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia
RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk
@@ -376,10 +382,11 @@ US +382232-0862041 America/Indiana/Marengo Eastern Time - Indiana - Crawford Cou
US +411745-0863730 America/Indiana/Knox Eastern Time - Indiana - Starke County
US +384452-0850402 America/Indiana/Vevay Eastern Time - Indiana - Switzerland County
US +415100-0873900 America/Chicago Central Time
-US +384038-0873143 America/Indiana/Vincennes Central Time - Indiana - Daviess, Dubois, Knox, Martin, Perry & Pulaski
+US +384038-0873143 America/Indiana/Vincennes Central Time - Indiana - Daviess, Dubois, Knox, Martin, Perry & Pulaski Counties
US +382931-0871643 America/Indiana/Petersburg Central Time - Indiana - Pike County
US +450628-0873651 America/Menominee Central Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties
US +470659-1011757 America/North_Dakota/Center Central Time - North Dakota - Oliver County
+US +465042-1012439 America/North_Dakota/New_Salem Central Time - North Dakota - Morton County (except Mandan area)
US +394421-1045903 America/Denver Mountain Time
US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon
US +364708-1084111 America/Shiprock Mountain Time - Navajo
diff --git a/ports/ChangeLog.hppa b/ports/ChangeLog.hppa
index 8d3132f94..429c6c2a3 100644
--- a/ports/ChangeLog.hppa
+++ b/ports/ChangeLog.hppa
@@ -1,3 +1,16 @@
+2006-11-10 Carlos O'Donell <carlos@systemhalted.org>
+
+ * sysdeps/hppa/nptl/pthread_spin_init.c: New file.
+ * sysdeps/hppa/nptl/pthread_spin_unlock.c: Remove strong alias
+ to pthread_spin_init.
+ * sysdeps/unix/sysv/linux/hppa/nptl/sysdep-cancel.h: Define
+ RTLD_SINGLE_THREAD_P.
+
+2006-09-20 Carlos O'Donell <carlos@systemhalted.org>
+
+ * sysdeps/unix/sysv/linux/hppa/bits/fcntl.h (splice): Add offin
+ and offout arguments to the prototype.
+
2006-09-15 Carlos O'Donell <carlos@systemhalted.org>
* sysdeps/hppa/nptl/tcb-offsets.sym: Define TID_THREAD_OFFSET.
diff --git a/ports/sysdeps/hppa/nptl/pthread_spin_init.c b/ports/sysdeps/hppa/nptl/pthread_spin_init.c
new file mode 100644
index 000000000..95b9eb8aa
--- /dev/null
+++ b/ports/sysdeps/hppa/nptl/pthread_spin_init.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include "pthreadP.h"
+
+int
+pthread_spin_init (pthread_spinlock_t *lock, int pshared)
+{
+ int tmp = 0;
+ /* This should be a memory barrier to newer compilers */
+ __asm__ __volatile__ ("stw,ma %1,0(%0)"
+ : : "r" (lock), "r" (tmp) : "memory");
+ return 0;
+}
diff --git a/ports/sysdeps/hppa/nptl/pthread_spin_unlock.c b/ports/sysdeps/hppa/nptl/pthread_spin_unlock.c
index 463d23c97..4b1b2beb6 100644
--- a/ports/sysdeps/hppa/nptl/pthread_spin_unlock.c
+++ b/ports/sysdeps/hppa/nptl/pthread_spin_unlock.c
@@ -16,21 +16,14 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-/* Ugly hack to avoid the declaration of pthread_spin_init. */
-#define pthread_spin_init pthread_spin_init_XXX
#include "pthreadP.h"
-#undef pthread_spin_init
int
pthread_spin_unlock (pthread_spinlock_t *lock)
{
-#if 0
- volatile unsigned int *a = __ldcw_align (lock);
-#endif
int tmp = 0;
/* This should be a memory barrier to newer compilers */
__asm__ __volatile__ ("stw,ma %1,0(%0)"
: : "r" (lock), "r" (tmp) : "memory");
return 0;
}
-strong_alias (pthread_spin_unlock, pthread_spin_init)
diff --git a/ports/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h b/ports/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h
index fc7075841..328df54a3 100644
--- a/ports/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h
+++ b/ports/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h
@@ -210,7 +210,8 @@ extern int vmsplice (int __fdout, const struct iovec *__iov, size_t __count,
unsigned int __flags);
/* Splice two files together. */
-extern int splice (int __fdin, int __fdout, size_t __len, unsigned int __flags)
+extern int splice (int __fdin, __off64_t *offin, int __fdout,
+ __off64_t *__offout, size_t __len, unsigned int __flags)
__THROW;
/* In-kernel implementation of tee for pipe buffers. */
diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/sysdep-cancel.h b/ports/sysdeps/unix/sysv/linux/hppa/nptl/sysdep-cancel.h
index 2d3de3efe..375f7324d 100644
--- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/sysdep-cancel.h
+++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/sysdep-cancel.h
@@ -212,4 +212,11 @@ L(pre_end): ASM_LINE_SEP \
# define NO_CANCELLATION 1
#endif
-/* !defined NOT_IN_libc || defined IS_IN_libpthread */
+/* !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt */
+
+#ifndef __ASSEMBLER__
+# define RTLD_SINGLE_THREAD_P \
+ __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
+ header.multiple_threads) == 0, 1)
+#endif
+