Hello community,

here is the log from the commit of package timezone for openSUSE:Factory 
checked in at 2016-03-26 15:07:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/timezone (Old)
 and      /work/SRC/openSUSE:Factory/.timezone.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "timezone"

Changes:
--------
--- /work/SRC/openSUSE:Factory/timezone/timezone-java.changes   2016-02-16 
09:18:02.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.timezone.new/timezone-java.changes      
2016-03-26 15:07:50.000000000 +0100
@@ -1,0 +2,33 @@
+Wed Mar 23 23:05:32 UTC 2016 - [email protected]
+
+- timezone update 2016c [boo#972433]
+  * Azerbaijan no longer observes DST (Asia/Baku)
+  * Chile reverts from permanent to seasonal DST.
+  * Correct past timestamps for Europe/Kaliningrad, Europe/Vilnius,
+    Europe/Volgograd 1989-1991
+
+-------------------------------------------------------------------
+Thu Mar 17 06:52:00 UTC 2016 - [email protected]
+
+- timezone update 2016b [boo#971377]
+  * New zones Europe/Astrakhan and Europe/Ulyanovsk for Astrakhan
+    and Ulyanovsk Oblasts, Russia, both of which will switch from
+    +03 to +04 on 2016-03-27 at 02:00 local time.
+  * New zone Asia/Barnaul for Altai Krai and Altai Republic, Russia,
+    which will switch from +06 to +07 on the same date and local time.
+  * Asia/Sakhalin moves from +10 to +11 on 2016-03-27 at 02:00.
+  * As a trial of a new system that needs less information to be made
+    up, the new zones use numeric time zone abbreviations like "+04"
+    instead of invented abbreviations like "ASTT".
+  * Haiti will not observe DST in 2016.
+  * Palestine's spring-forward transition on 2016-03-26 is at 01:00,
+    not 00:00.
+  * tzselect's diagnostics and checking, and checktab.awk's checking,
+    have been improved.
+  * tzselect now tests Julian-date TZ settings more accurately.
+    (Thanks to J William Piggott.)
+- tzcode-revert-01-8c9cb9580.patch, tzcode-revert-02-301f794f3.patch,
+  tzcode-revert-03-39fd078a6.patch: Revert some porting fixes specific
+  to MS-Windows that rewrites parts of zic touched by our patches.
+
+-------------------------------------------------------------------
timezone.changes: same change

Old:
----
  tzcode2016a.tar.gz
  tzcode2016a.tar.gz.asc
  tzdata2016a.tar.gz
  tzdata2016a.tar.gz.asc

New:
----
  tzcode-revert-01-8c9cb9580.patch
  tzcode-revert-02-301f794f3.patch
  tzcode-revert-03-39fd078a6.patch
  tzcode2016c.tar.gz
  tzcode2016c.tar.gz.asc
  tzdata2016c.tar.gz
  tzdata2016c.tar.gz.asc

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ timezone-java.spec ++++++
--- /var/tmp/diff_new_pack.kcBciG/_old  2016-03-26 15:07:51.000000000 +0100
+++ /var/tmp/diff_new_pack.kcBciG/_new  2016-03-26 15:07:51.000000000 +0100
@@ -25,7 +25,7 @@
 Group:          System/Base
 # COMMON-BEGIN
 # COMMON-BEGIN
-Version:        2016a
+Version:        2016c
 Release:        0
 Source:         ftp://ftp.iana.org/tz/releases/tzdata%{version}.tar.gz
 Source1:        ftp://ftp.iana.org/tz/releases/tzcode%{version}.tar.gz
@@ -33,6 +33,9 @@
 Source3:        ftp://ftp.iana.org/tz/releases/tzcode%{version}.tar.gz.asc
 # http://sks.mrball.net/pks/lookup?op=get&search=0xED97E90E62AA7E34
 Source4:        timezone.keyring
+Patch100:       tzcode-revert-01-8c9cb9580.patch
+Patch101:       tzcode-revert-02-301f794f3.patch
+Patch102:       tzcode-revert-03-39fd078a6.patch
 Patch0:         tzdata-china.diff
 Patch1:         tzcode-zic.diff
 # PATCH-FIX-OPENSUSE bnc#845530
@@ -59,6 +62,9 @@
 %setup -c  -a 1
 # COMMON-PREP-BEGIN
 # COMMON-PREP-BEGIN
+%patch100 -p1 -R
+%patch101 -p1 -R
+%patch102 -p1 -R
 %patch0 -p1
 %patch1 -p1
 %patch2 -p1

++++++ timezone.spec ++++++
--- /var/tmp/diff_new_pack.kcBciG/_old  2016-03-26 15:07:51.000000000 +0100
+++ /var/tmp/diff_new_pack.kcBciG/_new  2016-03-26 15:07:51.000000000 +0100
@@ -23,7 +23,7 @@
 Url:            http://www.iana.org/time-zones
 PreReq:         filesystem, coreutils
 # COMMON-BEGIN
-Version:        2016a
+Version:        2016c
 Release:        0
 Source:         ftp://ftp.iana.org/tz/releases/tzdata%{version}.tar.gz
 Source1:        ftp://ftp.iana.org/tz/releases/tzcode%{version}.tar.gz
@@ -31,6 +31,9 @@
 Source3:        ftp://ftp.iana.org/tz/releases/tzcode%{version}.tar.gz.asc
 # http://sks.mrball.net/pks/lookup?op=get&search=0xED97E90E62AA7E34
 Source4:        timezone.keyring
+Patch100:       tzcode-revert-01-8c9cb9580.patch
+Patch101:       tzcode-revert-02-301f794f3.patch
+Patch102:       tzcode-revert-03-39fd078a6.patch
 Patch0:         tzdata-china.diff
 Patch1:         tzcode-zic.diff
 # PATCH-FIX-OPENSUSE bnc#845530
@@ -53,6 +56,9 @@
 %prep
 %setup -q -c -a 1
 # COMMON-PREP-BEGIN
+%patch100 -p1 -R
+%patch101 -p1 -R
+%patch102 -p1 -R
 %patch0 -p1
 %patch1 -p1
 %patch2 -p1

++++++ iso3166-uk.diff ++++++
--- /var/tmp/diff_new_pack.kcBciG/_old  2016-03-26 15:07:51.000000000 +0100
+++ /var/tmp/diff_new_pack.kcBciG/_new  2016-03-26 15:07:51.000000000 +0100
@@ -1,8 +1,8 @@
-Index: timezone-2014i/iso3166.tab
+Index: timezone-2016b/iso3166.tab
 ===================================================================
---- timezone-2014i.orig/iso3166.tab
-+++ timezone-2014i/iso3166.tab
-@@ -100,7 +100,7 @@ FM Micronesia
+--- timezone-2016b.orig/iso3166.tab
++++ timezone-2016b/iso3166.tab
+@@ -99,7 +99,7 @@ FM   Micronesia
  FO    Faroe Islands
  FR    France
  GA    Gabon

++++++ timezone-java.spec.in ++++++
--- /var/tmp/diff_new_pack.kcBciG/_old  2016-03-26 15:07:52.000000000 +0100
+++ /var/tmp/diff_new_pack.kcBciG/_new  2016-03-26 15:07:52.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package timezone-java
 #
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed


++++++ tzcode-fromname.patch ++++++
--- /var/tmp/diff_new_pack.kcBciG/_old  2016-03-26 15:07:52.000000000 +0100
+++ /var/tmp/diff_new_pack.kcBciG/_new  2016-03-26 15:07:52.000000000 +0100
@@ -1,8 +1,8 @@
-Index: timezone-2015d/zic.c
+Index: timezone-2016b/zic.c
 ===================================================================
---- timezone-2015d.orig/zic.c
-+++ timezone-2015d/zic.c
-@@ -757,7 +757,7 @@ dolink(const char *const fromfield, cons
+--- timezone-2016b.orig/zic.c
++++ timezone-2016b/zic.c
+@@ -768,7 +768,7 @@ dolink(char const *fromfield, char const
  
                result = link(fromname, toname);
                if (result != 0) {
@@ -11,7 +11,7 @@
                                const char *t;
                                char *p;
                                size_t dotdots = 0;
-@@ -766,10 +766,10 @@ dolink(const char *const fromfield, cons
+@@ -777,10 +777,10 @@ dolink(char const *fromfield, char const
                                do
                                         t = s;
                                while ((s = strchr(s, '/'))

++++++ tzcode-revert-01-8c9cb9580.patch ++++++
commit 8c9cb958078b470e352a58f7f2d756544051e59b
Author: Paul Eggert <[email protected]>
Date:   Fri Feb 26 12:36:17 2016 -0800

    Fix asctime_r warning with MS-Windows
    
    Problem reported by Ian Abbott in:
    http://mm.icann.org/pipermail/tz/2016-February/023291.html
    * Makefile (CFLAGS): Add comment about new -D option.
    * private.h (HAVE_DECL_ASCTIME_R): New macro.
    (asctime_r): Depend on this, not on HAVE_POSIX_DECLS.

diff --git a/Makefile b/Makefile
index 20c2c98..5e2fb52 100644
--- a/Makefile
+++ b/Makefile
@@ -106,6 +106,7 @@ LDLIBS=
 
 # Add the following to the end of the "CFLAGS=" line as needed.
 #  -DBIG_BANG=-9999999LL if the Big Bang occurred at time -9999999 (see zic.c)
+#  -DHAVE_DECL_ASCTIME_R=0 if <time.h> does not declare asctime_r
 #  -DHAVE_DIRECT_H if mkdir needs <direct.h> (MS-Windows)
 #  -DHAVE_DOS_FILE_NAMES if file names have drive specifiers etc. (MS-DOS)
 #  -DHAVE_GETTEXT=1 if 'gettext' works (GNU, Linux, Solaris); also see LDLIBS
diff --git a/private.h b/private.h
index e23764d..941e91b 100644
--- a/private.h
+++ b/private.h
@@ -22,6 +22,10 @@
 ** You can override these in your C compiler options, e.g. '-DHAVE_GETTEXT=1'.
 */
 
+#ifndef HAVE_DECL_ASCTIME_R
+#define HAVE_DECL_ASCTIME_R 1
+#endif
+
 #ifndef HAVE_GETTEXT
 #define HAVE_GETTEXT           0
 #endif /* !defined HAVE_GETTEXT */
@@ -386,17 +390,11 @@ time_t time(time_t *);
 void tzset(void);
 #endif
 
-/*
-** Some time.h implementations don't declare asctime_r.
-** Others might define it as a macro.
-** Fix the former without affecting the latter.
-** Similarly for timezone, daylight, and altzone.
-*/
+#if !HAVE_DECL_ASCTIME_R && !defined asctime_r
+extern char *asctime_r(struct tm const *restrict, char *restrict);
+#endif
 
 #if !HAVE_POSIX_DECLS
-# ifndef asctime_r
-extern char *  asctime_r(struct tm const *restrict, char *restrict);
-# endif
 # ifdef USG_COMPAT
 #  ifndef timezone
 extern long timezone;
++++++ tzcode-revert-02-301f794f3.patch ++++++
commit 301f794f33d145b08fbf7f5247c8663d404fabb5
Author: Paul Eggert <[email protected]>
Date:   Fri Feb 26 08:58:45 2016 -0800

    Fix tzname redefinition in MS-Windows
    
    Problem reported by Ian Abbott in:
    http://mm.icann.org/pipermail/tz/2016-February/023289.html
    * localtime.c (tzname): Don’t define if HAVE_POSIX_DECLS,
    as causes the Microsoft compiler to complain that tzname
    is redeclared without dllimport.
    * localtime.c, private.h (altzone): Do define even if
    HAVE_POSIX_DECLS, since this is not a POSIX-specified variable.

diff --git a/localtime.c b/localtime.c
index e3bc763..276ce34 100644
--- a/localtime.c
+++ b/localtime.c
@@ -178,11 +178,6 @@ static struct state        gmtmem;
 static char            lcl_TZname[TZ_STRLEN_MAX + 1];
 static int             lcl_is_set;
 
-char *                 tzname[2] = {
-       (char *) wildabbr,
-       (char *) wildabbr
-};
-
 /*
 ** Section 4.12.3 of X3.159-1989 requires that
 **     Except for the strftime function, these functions [asctime,
@@ -193,10 +188,16 @@ char *                    tzname[2] = {
 
 static struct tm       tm;
 
-#ifdef USG_COMPAT
+#if !HAVE_POSIX_DECLS
+char *                 tzname[2] = {
+       (char *) wildabbr,
+       (char *) wildabbr
+};
+# ifdef USG_COMPAT
 long                   timezone;
 int                    daylight;
-#endif /* defined USG_COMPAT */
+# endif
+#endif
 
 #ifdef ALTZONE
 long                   altzone;
diff --git a/private.h b/private.h
index 6080e71..e23764d 100644
--- a/private.h
+++ b/private.h
@@ -386,8 +386,6 @@ time_t time(time_t *);
 void tzset(void);
 #endif
 
-#if !HAVE_POSIX_DECLS
-
 /*
 ** Some time.h implementations don't declare asctime_r.
 ** Others might define it as a macro.
@@ -395,24 +393,24 @@ void tzset(void);
 ** Similarly for timezone, daylight, and altzone.
 */
 
-#ifndef asctime_r
+#if !HAVE_POSIX_DECLS
+# ifndef asctime_r
 extern char *  asctime_r(struct tm const *restrict, char *restrict);
-#endif
-
-#ifdef USG_COMPAT
-# ifndef timezone
-extern long timezone;
 # endif
-# ifndef daylight
+# ifdef USG_COMPAT
+#  ifndef timezone
+extern long timezone;
+#  endif
+#  ifndef daylight
 extern int daylight;
+#  endif
 # endif
 #endif
+
 #if defined ALTZONE && !defined altzone
 extern long altzone;
 #endif
 
-#endif
-
 /*
 ** The STD_INSPIRED functions are similar, but most also need
 ** declarations if time_tz is defined.
++++++ tzcode-revert-03-39fd078a6.patch ++++++
commit 39fd078a694fa762de5ae7efceca1dbfb7be94b3
Author: Paul Eggert <[email protected]>
Date:   Fri Feb 26 03:33:54 2016 -0800

    Port better to MS-Windows
    
    Problems reported by Ian Abbott in:
    http://mm.icann.org/pipermail/tz/2016-February/023286.html
    http://mm.icann.org/pipermail/tz/2016-February/023287.html
    * Makefile (CFLAGS): Add comment about new -D options.
    * date.c (environ, optarg, optind, tzname):
    * private.h (asctime_r, timezone, daylight, altzone):
    * strftime.c (tzname):
    * zdump.c (environ, getopt, optarg, optind, tzname):
    * zic.c (getopt, link, optarg, optind):
    Do not declare if HAVE_POSIX_DECLS, to avoid collisions with
    system declarations, which is a problem with MS-Windows
    and tzname and the dllimport attribute.
    * date.c, zdump.c (tzname): Do not specify size, as POSIX doesn’t.
    * private.h (HAVE_POSIX_DECLS): Default to 1.
    (ENOTSUP): Default to EINVAL.
    * zic.c: If HAVE_DIRECT_H, include direct.h and io.h and
    define a mkdir macro, for MS-Windows.
    (link, symlink): Set errno to ENOTSUP in the substitutes.
    (dolink): Don’t complain merely because link and/or
    symlink is not supported.  Be a bit more economical and robust
    about checking for directories and existing destinations.
    Report errno-related string on link failures.
    (itsdir): Work correctly even if a directory has a timestamp that
    is out of time_t range, so that stat fails with errno ==
    EOVERFLOW.
    (writezone): Don’t remove files we can’t stat.

diff --git a/Makefile b/Makefile
index 568f7f6..20c2c98 100644
--- a/Makefile
+++ b/Makefile
@@ -106,6 +106,7 @@ LDLIBS=
 
 # Add the following to the end of the "CFLAGS=" line as needed.
 #  -DBIG_BANG=-9999999LL if the Big Bang occurred at time -9999999 (see zic.c)
+#  -DHAVE_DIRECT_H if mkdir needs <direct.h> (MS-Windows)
 #  -DHAVE_DOS_FILE_NAMES if file names have drive specifiers etc. (MS-DOS)
 #  -DHAVE_GETTEXT=1 if 'gettext' works (GNU, Linux, Solaris); also see LDLIBS
 #  -DHAVE_INCOMPATIBLE_CTIME_R=1 if your system's time.h declares
@@ -116,6 +117,8 @@ LDLIBS=
 #  -DHAVE_LOCALTIME_RZ=0 if you do not want zdump to use localtime_rz
 #      This defaults to 1 if a working localtime_rz seems to be available.
 #      localtime_rz can make zdump significantly faster, but is nonstandard.
+#  -DHAVE_POSIX_DECLS=0 if your system's include files do not declare
+#      functions like 'link' or variables like 'tzname' required by POSIX
 #  -DHAVE_STDINT_H=1 if you have a pre-C99 compiler with "stdint.h"
 #  -DHAVE_STRFTIME_L=1 if <time.h> declares locale_t and strftime_l
 #      This defaults to 0 if _POSIX_VERSION < 200809, 1 otherwise.
diff --git a/date.c b/date.c
index 824e57d..4c11f61 100644
--- a/date.c
+++ b/date.c
@@ -42,10 +42,12 @@
 #define SECSPERMIN     60
 #endif /* !defined SECSPERMIN */
 
+#if !HAVE_POSIX_DECLS
 extern char **         environ;
 extern char *          optarg;
 extern int             optind;
-extern char *          tzname[2];
+extern char *          tzname[];
+#endif
 
 static int             retval = EXIT_SUCCESS;
 
diff --git a/private.h b/private.h
index 1c176e6..6080e71 100644
--- a/private.h
+++ b/private.h
@@ -34,6 +34,10 @@
 #define HAVE_LINK              1
 #endif /* !defined HAVE_LINK */
 
+#ifndef HAVE_POSIX_DECLS
+#define HAVE_POSIX_DECLS 1
+#endif
+
 #ifndef HAVE_STRDUP
 #define HAVE_STRDUP 1
 #endif
@@ -106,6 +110,9 @@
 #ifndef ENAMETOOLONG
 # define ENAMETOOLONG EINVAL
 #endif
+#ifndef ENOTSUP
+# define ENOTSUP EINVAL
+#endif
 #ifndef EOVERFLOW
 # define EOVERFLOW EINVAL
 #endif
@@ -379,6 +386,8 @@ time_t time(time_t *);
 void tzset(void);
 #endif
 
+#if !HAVE_POSIX_DECLS
+
 /*
 ** Some time.h implementations don't declare asctime_r.
 ** Others might define it as a macro.
@@ -402,6 +411,8 @@ extern int daylight;
 extern long altzone;
 #endif
 
+#endif
+
 /*
 ** The STD_INSPIRED functions are similar, but most also need
 ** declarations if time_tz is defined.
diff --git a/strftime.c b/strftime.c
index 7a139bd..f75f9fd 100644
--- a/strftime.c
+++ b/strftime.c
@@ -106,7 +106,9 @@ static char *       _fmt(const char *, const struct tm *, 
char *, const char *,
                        int *);
 static char *  _yconv(int, int, bool, bool, char *, char const *);
 
+#if !HAVE_POSIX_DECLS
 extern char *  tzname[];
+#endif
 
 #ifndef YEAR_2000_NAME
 #define YEAR_2000_NAME "CHECK_STRFTIME_FORMATS_FOR_TWO_DIGIT_YEARS"
diff --git a/zdump.c b/zdump.c
index 063a263..64d90f6 100644
--- a/zdump.c
+++ b/zdump.c
@@ -238,12 +238,14 @@ enum { SECSPER400YEARS_FITS = SECSPERLYEAR <= INTMAX_MAX 
/ 400 };
 # define timezone_t char **
 #endif
 
+#if !HAVE_POSIX_DECLS
 extern char ** environ;
 extern int     getopt(int argc, char * const argv[],
                        const char * options);
 extern char *  optarg;
 extern int     optind;
-extern char *  tzname[2];
+extern char *  tzname[];
+#endif
 
 /* The minimum and maximum finite time values.  */
 enum { atime_shift = CHAR_BIT * sizeof (time_t) - 2 };
diff --git a/zic.c b/zic.c
index 78ab870..0ec3359 100644
--- a/zic.c
+++ b/zic.c
@@ -22,6 +22,13 @@ typedef int_fast64_t zic_t;
 #define ZIC_MAX_ABBR_LEN_WO_WARN       6
 #endif /* !defined ZIC_MAX_ABBR_LEN_WO_WARN */
 
+#ifdef HAVE_DIRECT_H
+# include <direct.h>
+# include <io.h>
+# undef mkdir
+# define mkdir(name, mode) _mkdir(name)
+#endif
+
 #if HAVE_SYS_STAT_H
 #include <sys/stat.h>
 #endif
@@ -87,17 +94,19 @@ struct zone {
        zic_t           z_untiltime;
 };
 
+#if !HAVE_POSIX_DECLS
 extern int     getopt(int argc, char * const argv[],
                        const char * options);
 extern int     link(const char * fromname, const char * toname);
 extern char *  optarg;
 extern int     optind;
+#endif
 
 #if ! HAVE_LINK
-# define link(from, to) (-1)
+# define link(from, to) (errno = ENOTSUP, -1)
 #endif
 #if ! HAVE_SYMLINK
-# define symlink(from, to) (-1)
+# define symlink(from, to) (errno = ENOTSUP, -1)
 #endif
 
 static void    addtt(zic_t starttime, int type);
@@ -758,41 +767,47 @@ dolink(char const *fromfield, char const *tofield)
                        progname, fromname, e);
                exit(EXIT_FAILURE);
        }
-       if (itsdir(toname) <= 0)
-               remove(toname);
        if (link(fromname, toname) != 0) {
-               int     result;
+         int link_errno = errno;
+         bool retry_if_link_supported = false;
 
-               if (! mkdirs(toname))
-                       exit(EXIT_FAILURE);
-
-               result = link(fromname, toname);
-               if (result != 0) {
-                               const char *s = fromfield;
-                               const char *t;
-                               char *p;
-                               size_t dotdots = 0;
-                               register char * symlinkcontents = NULL;
-
-                               do
-                                        t = s;
-                               while ((s = strchr(s, '/'))
-                                      && ! strncmp (fromfield, tofield,
-                                                    ++s - fromfield));
-
-                               for (s = tofield + (t - fromfield); *s; s++)
-                                 dotdots += *s == '/';
-                               symlinkcontents
-                                 = emalloc(3 * dotdots + strlen(t) + 1);
-                               for (p = symlinkcontents; dotdots-- != 0; p += 
3)
-                                 memcpy(p, "../", 3);
-                               strcpy(p, t);
-                               result = symlink(symlinkcontents, toname);
-                               if (result == 0)
-warning(_("hard link failed, symbolic link used"));
-                               free(symlinkcontents);
-               }
-               if (result != 0) {
+         if (link_errno == ENOENT || link_errno == ENOTSUP) {
+           if (! mkdirs(toname))
+             exit(EXIT_FAILURE);
+           retry_if_link_supported = true;
+         }
+         if ((link_errno == EEXIST || link_errno == ENOTSUP)
+             && itsdir(toname) == 0
+             && (remove(toname) == 0 || errno == ENOENT))
+           retry_if_link_supported = true;
+         if (retry_if_link_supported && link_errno != ENOTSUP)
+           link_errno = link(fromname, toname) == 0 ? 0 : errno;
+         if (link_errno != 0) {
+           const char *s = fromfield;
+           const char *t;
+           char *p;
+           size_t dotdots = 0;
+           char *symlinkcontents;
+           int symlink_result;
+
+           do
+             t = s;
+           while ((s = strchr(s, '/'))
+                  && strncmp(fromfield, tofield, ++s - fromfield) == 0);
+
+           for (s = tofield + (t - fromfield); *s; s++)
+             dotdots += *s == '/';
+           symlinkcontents = emalloc(3 * dotdots + strlen(t) + 1);
+           for (p = symlinkcontents; dotdots-- != 0; p += 3)
+             memcpy(p, "../", 3);
+           strcpy(p, t);
+           symlink_result = symlink(symlinkcontents, toname);
+           free(symlinkcontents);
+           if (symlink_result == 0) {
+             if (link_errno != ENOTSUP)
+               warning(_("symbolic link used because hard link failed: %s"),
+                       strerror (link_errno));
+           } else {
                        FILE *fp, *tp;
                        int c;
                        fp = fopen(fromname, "rb");
@@ -815,8 +830,11 @@ warning(_("hard link failed, symbolic link used"));
                                putc(c, tp);
                        close_file(fp, fromname);
                        close_file(tp, toname);
-                       warning(_("link failed, copy used"));
-               }
+                       if (link_errno != ENOTSUP)
+                         warning(_("copy used because hard link failed: %s"),
+                                 strerror (link_errno));
+           }
+         }
        }
        free(fromname);
        free(toname);
@@ -863,18 +881,17 @@ itsdir(char const *name)
 {
        struct stat st;
        int res = stat(name, &st);
-       if (res != 0)
-               return res;
 #ifdef S_ISDIR
-       return S_ISDIR(st.st_mode) != 0;
-#else
-       {
+       if (res == 0)
+               return S_ISDIR(st.st_mode) != 0;
+#endif
+       if (res == 0 || errno == EOVERFLOW) {
                char *nameslashdot = relname(name, ".");
-               res = stat(nameslashdot, &st);
+               bool dir = stat(nameslashdot, &st) == 0 || errno == EOVERFLOW;
                free(nameslashdot);
-               return res == 0;
+               return dir;
        }
-#endif
+       return -1;
 }
 
 /*
@@ -1685,7 +1702,7 @@ writezone(const char *const name, const char *const 
string, char version)
        /*
        ** Remove old file, if any, to snap links.
        */
-       if (itsdir(fullname) <= 0 && remove(fullname) != 0 && errno != ENOENT) {
+       if (itsdir(fullname) == 0 && remove(fullname) != 0 && errno != ENOENT) {
                const char *e = strerror(errno);
 
                fprintf(stderr, _("%s: Can't remove %s: %s\n"),
++++++ tzcode-zic.diff ++++++
--- /var/tmp/diff_new_pack.kcBciG/_old  2016-03-26 15:07:52.000000000 +0100
+++ /var/tmp/diff_new_pack.kcBciG/_new  2016-03-26 15:07:52.000000000 +0100
@@ -1,8 +1,8 @@
-Index: timezone-2015d/zic.c
+Index: timezone-2016b/zic.c
 ===================================================================
---- timezone-2015d.orig/zic.c
-+++ timezone-2015d/zic.c
-@@ -777,8 +777,10 @@ dolink(const char *const fromfield, cons
+--- timezone-2016b.orig/zic.c
++++ timezone-2016b/zic.c
+@@ -788,8 +788,10 @@ dolink(char const *fromfield, char const
                                  memcpy(p, "../", 3);
                                strcpy(p, t);
                                result = symlink(symlinkcontents, toname);

++++++ tzcode2016a.tar.gz -> tzcode2016c.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Makefile new/Makefile
--- old/Makefile        2016-01-27 08:30:16.000000000 +0100
+++ new/Makefile        2016-03-23 08:52:28.000000000 +0100
@@ -5,7 +5,7 @@
 PACKAGE=       tzcode
 
 # Version numbers of the code and data distributions.
-VERSION=       2016a
+VERSION=       2016c
 
 # Email address for bug reports.
 BUGEMAIL=      [email protected]
@@ -106,6 +106,8 @@
 
 # Add the following to the end of the "CFLAGS=" line as needed.
 #  -DBIG_BANG=-9999999LL if the Big Bang occurred at time -9999999 (see zic.c)
+#  -DHAVE_DECL_ASCTIME_R=0 if <time.h> does not declare asctime_r
+#  -DHAVE_DIRECT_H if mkdir needs <direct.h> (MS-Windows)
 #  -DHAVE_DOS_FILE_NAMES if file names have drive specifiers etc. (MS-DOS)
 #  -DHAVE_GETTEXT=1 if 'gettext' works (GNU, Linux, Solaris); also see LDLIBS
 #  -DHAVE_INCOMPATIBLE_CTIME_R=1 if your system's time.h declares
@@ -116,6 +118,8 @@
 #  -DHAVE_LOCALTIME_RZ=0 if you do not want zdump to use localtime_rz
 #      This defaults to 1 if a working localtime_rz seems to be available.
 #      localtime_rz can make zdump significantly faster, but is nonstandard.
+#  -DHAVE_POSIX_DECLS=0 if your system's include files do not declare
+#      functions like 'link' or variables like 'tzname' required by POSIX
 #  -DHAVE_STDINT_H=1 if you have a pre-C99 compiler with "stdint.h"
 #  -DHAVE_STRFTIME_L=1 if <time.h> declares locale_t and strftime_l
 #      This defaults to 0 if _POSIX_VERSION < 200809, 1 otherwise.
@@ -360,7 +364,7 @@
                        tzfile.5.txt tzselect.8.txt zic.8.txt zdump.8.txt \
                        date.1.txt
 COMMON=                CONTRIBUTING LICENSE Makefile NEWS README Theory
-WEB_PAGES=     tz-art.htm tz-link.htm
+WEB_PAGES=     tz-art.htm tz-how-to.html tz-link.htm
 DOCS=          $(MANS) date.1 $(MANTXTS) $(WEB_PAGES)
 PRIMARY_YDATA= africa antarctica asia australasia \
                europe northamerica southamerica
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/NEWS new/NEWS
--- old/NEWS    2016-01-27 08:30:16.000000000 +0100
+++ new/NEWS    2016-03-23 08:52:28.000000000 +0100
@@ -1,5 +1,90 @@
 News for the tz database
 
+Release 2016c - 2016-03-23 00:51:27 -0700
+
+  Changes affecting future time stamps
+
+    Azerbaijan no longer observes DST.  (Thanks to Steffen Thorsen.)
+
+    Chile reverts from permanent to seasonal DST.  (Thanks to Juan
+    Correa for the heads-up, and to Tim Parenti for corrections.)
+    Guess that future transitions are August's and May's second
+    Saturdays at 24:00 mainland time.  Also, call the period from
+    2014-09-07 through 2016-05-14 daylight saving time instead of
+    standard time, as that seems more appropriate now.
+
+  Changes affecting past time stamps
+
+    Europe/Kaliningrad and Europe/Vilnius changed from +03/+04 to
+    +02/+03 on 1989-03-26, not 1991-03-31.  Europe/Volgograd changed
+    from +04/+05 to +03/+04 on 1988-03-27, not 1989-03-26.
+    (Thanks to Stepan Golosunov.)
+
+  Changes to commentary
+
+    Several updates and URLs for historical and proposed Russian changes.
+    (Thanks to Stepan Golosunov, Matt Johnson, and Alexander Krivenyshev.)
+
+
+Release 2016b - 2016-03-12 17:30:14 -0800
+
+  Changes affecting future time stamps
+
+    New zones Europe/Astrakhan and Europe/Ulyanovsk for Astrakhan and
+    Ulyanovsk Oblasts, Russia, both of which will switch from +03 to +04 on
+    2016-03-27 at 02:00 local time.  They need distinct zones since their
+    post-1970 histories disagree.  New zone Asia/Barnaul for Altai Krai and
+    Altai Republic, Russia, which will switch from +06 to +07 on the same date
+    and local time.  The Astrakhan change is already official; the others have
+    passed the first reading in the State Duma and are extremely likely.
+    Also, Asia/Sakhalin moves from +10 to +11 on 2016-03-27 at 02:00.
+    (Thanks to Alexander Krivenyshev for the heads-up, and to Matt Johnson
+    and Stepan Golosunov for followup.)
+
+    As a trial of a new system that needs less information to be made up,
+    the new zones use numeric time zone abbreviations like "+04"
+    instead of invented abbreviations like "ASTT".
+
+    Haiti will not observe DST in 2016.  (Thanks to Jean Antoine via
+    Steffen Thorsen.)
+
+    Palestine's spring-forward transition on 2016-03-26 is at 01:00, not 00:00.
+    (Thanks to Hannah Kreitem.) Guess future transitions will be March's last
+    Saturday at 01:00, not March's last Friday at 24:00.
+
+  Changes affecting past time stamps
+
+    Europe/Chisinau observed DST during 1990, and switched from +04 to
+    +03 at 1990-05-06 02:00, instead of switching from +03 to +02.
+    (Thanks to Stepan Golosunov.)
+
+    1991 abbreviations in Europe/Samara should be SAMT/SAMST, not
+    KUYT/KUYST.  (Thanks to Stepan Golosunov.)
+
+  Changes to code
+
+    tzselect's diagnostics and checking, and checktab.awk's checking,
+    have been improved.  (Thanks to J William Piggott.)
+
+    tzcode now builds under MinGW.  (Thanks to Ian Abbott and Esben Haabendal.)
+
+    tzselect now tests Julian-date TZ settings more accurately.
+    (Thanks to J William Piggott.)
+
+  Changes to commentary
+
+    Comments in zone tables have been improved.  (Thanks to J William Piggott.)
+
+    tzselect again limits its menu comments so that menus fit on a
+    24x80 alphanumeric display.
+
+    A new web page tz-how-to.html.  (Thanks to Bill Seymour.)
+
+    In the Theory file, the description of possible time zone abbreviations in
+    tzdata has been cleaned up, as the old description was unclear and
+    inconsistent.  (Thanks to Alain Mouette for reporting the problem.)
+
+
 Release 2016a - 2016-01-26 23:28:02 -0800
 
   Changes affecting future time stamps
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Theory new/Theory
--- old/Theory  2016-01-12 01:21:15.000000000 +0100
+++ new/Theory  2016-02-14 21:36:54.000000000 +0100
@@ -173,7 +173,7 @@
 Here are the general rules used for choosing time zone abbreviations,
 in decreasing order of importance:
 
-       Use abbreviations that consist of three or more ASCII letters.
+       Use three or more characters that are ASCII alphanumerics or '+' or '-'.
                Previous editions of this database also used characters like
                ' ' and '?', but these characters have a special meaning to
                the shell and cause commands like
@@ -181,19 +181,16 @@
                to have unexpected effects.
                Previous editions of this rule required upper-case letters,
                but the Congressman who introduced Chamorro Standard Time
-               preferred "ChST", so the rule has been relaxed.
-
-               This rule guarantees that all abbreviations could have
-               been specified by a POSIX TZ string.  POSIX
-               requires at least three characters for an
-               abbreviation.  POSIX through 2000 says that an abbreviation
-               cannot start with ':', and cannot contain ',', '-',
-               '+', NUL, or a digit.  POSIX from 2001 on changes this
-               rule to say that an abbreviation can contain only '-', '+',
+               preferred "ChST", so lower-case letters are now allowed.
+               Also, POSIX from 2001 on relaxed the rule to allow '-', '+',
                and alphanumeric characters from the portable character set
-               in the current locale.  To be portable to both sets of
-               rules, an abbreviation must therefore use only ASCII
-               letters.
+               in the current locale.  In practice ASCII alphanumerics and
+               '+' and '-' are safe in all locales.
+
+               In other words, in the C locale the POSIX extended regular
+               expression [-+[:alnum:]]{3,} should match the abbreviation.
+               This guarantees that all abbreviations could have been
+               specified by a POSIX TZ string.
 
        Use abbreviations that are in common use among English-speakers,
                e.g. 'EST' for Eastern Standard Time in North America.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/date.c new/date.c
--- old/date.c  2015-12-08 18:51:21.000000000 +0100
+++ new/date.c  2016-02-26 12:33:54.000000000 +0100
@@ -42,10 +42,12 @@
 #define SECSPERMIN     60
 #endif /* !defined SECSPERMIN */
 
+#if !HAVE_POSIX_DECLS
 extern char **         environ;
 extern char *          optarg;
 extern int             optind;
-extern char *          tzname[2];
+extern char *          tzname[];
+#endif
 
 static int             retval = EXIT_SUCCESS;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/localtime.c new/localtime.c
--- old/localtime.c     2015-10-01 10:43:59.000000000 +0200
+++ new/localtime.c     2016-02-26 17:58:45.000000000 +0100
@@ -178,11 +178,6 @@
 static char            lcl_TZname[TZ_STRLEN_MAX + 1];
 static int             lcl_is_set;
 
-char *                 tzname[2] = {
-       (char *) wildabbr,
-       (char *) wildabbr
-};
-
 /*
 ** Section 4.12.3 of X3.159-1989 requires that
 **     Except for the strftime function, these functions [asctime,
@@ -193,10 +188,16 @@
 
 static struct tm       tm;
 
-#ifdef USG_COMPAT
+#if !HAVE_POSIX_DECLS
+char *                 tzname[2] = {
+       (char *) wildabbr,
+       (char *) wildabbr
+};
+# ifdef USG_COMPAT
 long                   timezone;
 int                    daylight;
-#endif /* defined USG_COMPAT */
+# endif
+#endif
 
 #ifdef ALTZONE
 long                   altzone;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/private.h new/private.h
--- old/private.h       2015-09-15 08:36:31.000000000 +0200
+++ new/private.h       2016-02-26 21:36:17.000000000 +0100
@@ -22,6 +22,10 @@
 ** You can override these in your C compiler options, e.g. '-DHAVE_GETTEXT=1'.
 */
 
+#ifndef HAVE_DECL_ASCTIME_R
+#define HAVE_DECL_ASCTIME_R 1
+#endif
+
 #ifndef HAVE_GETTEXT
 #define HAVE_GETTEXT           0
 #endif /* !defined HAVE_GETTEXT */
@@ -34,6 +38,10 @@
 #define HAVE_LINK              1
 #endif /* !defined HAVE_LINK */
 
+#ifndef HAVE_POSIX_DECLS
+#define HAVE_POSIX_DECLS 1
+#endif
+
 #ifndef HAVE_STRDUP
 #define HAVE_STRDUP 1
 #endif
@@ -106,6 +114,9 @@
 #ifndef ENAMETOOLONG
 # define ENAMETOOLONG EINVAL
 #endif
+#ifndef ENOTSUP
+# define ENOTSUP EINVAL
+#endif
 #ifndef EOVERFLOW
 # define EOVERFLOW EINVAL
 #endif
@@ -379,25 +390,21 @@
 void tzset(void);
 #endif
 
-/*
-** Some time.h implementations don't declare asctime_r.
-** Others might define it as a macro.
-** Fix the former without affecting the latter.
-** Similarly for timezone, daylight, and altzone.
-*/
-
-#ifndef asctime_r
-extern char *  asctime_r(struct tm const *restrict, char *restrict);
+#if !HAVE_DECL_ASCTIME_R && !defined asctime_r
+extern char *asctime_r(struct tm const *restrict, char *restrict);
 #endif
 
-#ifdef USG_COMPAT
-# ifndef timezone
+#if !HAVE_POSIX_DECLS
+# ifdef USG_COMPAT
+#  ifndef timezone
 extern long timezone;
-# endif
-# ifndef daylight
+#  endif
+#  ifndef daylight
 extern int daylight;
+#  endif
 # endif
 #endif
+
 #if defined ALTZONE && !defined altzone
 extern long altzone;
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/strftime.c new/strftime.c
--- old/strftime.c      2015-12-08 18:51:21.000000000 +0100
+++ new/strftime.c      2016-02-26 12:33:54.000000000 +0100
@@ -106,7 +106,9 @@
                        int *);
 static char *  _yconv(int, int, bool, bool, char *, char const *);
 
+#if !HAVE_POSIX_DECLS
 extern char *  tzname[];
+#endif
 
 #ifndef YEAR_2000_NAME
 #define YEAR_2000_NAME "CHECK_STRFTIME_FORMATS_FOR_TWO_DIGIT_YEARS"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tz-art.htm new/tz-art.htm
--- old/tz-art.htm      2016-01-18 07:53:52.000000000 +0100
+++ new/tz-art.htm      2016-03-15 01:49:25.000000000 +0100
@@ -353,10 +353,20 @@
 isn't coming fast enough, so he sets his watch ahead an hour.
 </li>
 <li>
-The syndicated comic strip <em>Dilbert</em> featured an all-too-rare example of
-time zone humor on 1998-03-14.
+The syndicated comic strip <em>Dilbert</em> featured an
+<a href='http://dilbert.com/strip/1998-03-14'>all-too-rare example of
+time zone humor</a> on 1998-03-14.
 </li>
 <li>
+The webcomic <em>xkcd</em> has the strip
+"<a href='http://xkcd.com/673/'>The Sun</a>" (2009-12-09) and the panels
+"<a href='http://xkcd.com/1017/'>Backward in Time</a>" (2012-02-14),
+"<a href='http://xkcd.com/1061/'>EST</a>" (2012-05-28), and
+"<a href='http://xkcd.com/1335/'>Now</a>" (2014-02-26), and
+"<a href='http://xkcd.com/1655/'>Doomsday Clock</a>" (2016-03-14).
+The related book <em>What If?</em> has an entry
+"<a href='http://what-if.xkcd.com/26/'>Leap Seconds</a>" (2012-12-31).
+<li>
 Surrealist artist Guy Billout's work "Date Line" appeared on page 103
 of the 1999-11 <em>Atlantic Monthly</em>.
 </li>
@@ -441,6 +451,14 @@
 (Never mind that this should be 7:30am in Mumbai, yet for some reason the show
 proceeds as though it's also mid-evening there.)
 </li>
+<li>
+In the "14 Days to Go"/"T Minus..." episode of
+<em>You, Me and the Apocalypse</em>
+(first aired 2015-11-11 in the UK, 2016-03-10 in the US),
+the success of a mission to deal with a comet
+hinges on whether or not Russia observes daylight saving time.
+(In the US, the episode first aired in the week before the switch to DST.)
+</li>
 </ul>
 <hr>
 <ul>
@@ -515,7 +533,7 @@
 Marcie: "I promise there'll be a tomorrow, sir ... in fact,
 it's already tomorrow in Australia!"
 <br>
-(Charles M. Schulz, <em>Peanuts</em>, 1980-06-13)
+(Charles M. Schulz, <a 
href='http://www.gocomics.com/peanuts/1980/06/13'><em>Peanuts</em>, 
1980-06-13</a>)
 </li>
 </ul>
 </body>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tz-how-to.html new/tz-how-to.html
--- old/tz-how-to.html  1970-01-01 01:00:00.000000000 +0100
+++ new/tz-how-to.html  2016-03-01 06:00:44.000000000 +0100
@@ -0,0 +1,676 @@
+<!DOCTYPE html
+       PUBLIC "-//W3C//DTD HTML 4.01//EN"
+       "http://www.w3.org/TR/html4/strict.dtd";>
+<html>
+<head><title>How to Read the tz Database</title></head>
+<body>
+<h2>How to Read the <a href="https://en.wikipedia.org/wiki/Tz_database";>tz
+Database</a> Source Files</h2>
+<h3>by Bill Seymour</h3>
+<p>This page uses the <code>America/Chicago</code> and
+<code>Pacific/Honolulu</code> zones as examples of how to infer
+times of day from the <a href="tz-link.htm">tz database</a>
+source files. It might be helpful, but not absolutely necessary,
+for the reader to have already downloaded the
+<a href="http://www.iana.org/time-zones/repository/tzdata-latest.tar.gz";>latest
+release of the database</a> and become familiar with the basic layout
+of the data files. The format is explained in the &ldquo;man
+page&rdquo; for the zic compiler, <code>zic.8.txt</code>, in
+the <code>code</code> subdirectory.</p>
+
+<p>We&rsquo;ll begin by talking about the rules for changing between standard
+and daylight saving time since we&rsquo;ll need that information when we talk
+about the zones.</p>
+
+<p>First, let&rsquo;s consider the special daylight saving time rules
+for Chicago (from the <code>northamerica</code> file in
+the <code>data</code> subdirectory):</p>
+
+<table border="1">
+<tr>
+  <th colspan="6">From the Source File</th>
+</tr>
+<tr>
+  <td colspan="6" align="center"><table><tr><td>
+<pre>
+#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
+Rule  Chicago 1921 only  -   Mar lastSun 2:00 1:00 D
+Rule  Chicago 1922 1966  -   Apr lastSun 2:00 1:00 D
+Rule  Chicago 1922 1954  -   Sep lastSun 2:00 0    S
+Rule  Chicago 1955 1966  -   Oct lastSun 2:00 0    S
+</pre>
+  </td></tr></table></td>
+</tr>
+<tr>
+  <th colspan="6">Reformatted a Bit</th>
+</tr>
+<tr>
+  <th>From</th>
+  <th>To</th>
+  <th colspan="2">On</th>
+  <th>At</th>
+  <th>Action</th>
+</tr>
+<tr align="center">
+  <td colspan="2">1920 only</td>
+  <td colspan="2">June 13<small><sup>th</sup></small></td>
+  <td rowspan="6">02:00 local</td>
+  <td>go to daylight saving time</td>
+</tr>
+<tr align="center">
+  <td>1920</td>
+  <td>1921</td>
+  <td rowspan="5">last Sunday</td>
+  <td>in October</td>
+  <td>return to standard time</td>
+</tr>
+<tr align="center">
+  <td colspan="2">1921 only</td>
+  <td>in March</td>
+  <td rowspan="2">go to daylight saving time</td>
+</tr>
+<tr align="center">
+  <td rowspan="2">1922</td>
+  <td>1966</td>
+  <td>in April</td>
+</tr>
+<tr align="center">
+  <td>1954</td>
+  <td>in September</td>
+  <td rowspan="2">return to standard time</td>
+</tr>
+<tr align="center">
+  <td>1955</td>
+  <td>1966</td>
+  <td>in October</td>
+</tr>
+</table>
+
+<p>We&rsquo;ll basically just ignore the <code>TYPE</code> column.
+In the 2007j release, the most recent as of this writing, the
+<code>TYPE</code> column never contains anything but a hyphen,
+a kind of null value. (From the description in <code>zic.8.txt</code>,
+this appears to be a mechanism for removing years from a set
+in some localizable way. It&rsquo;s used in the file, <code>pacificnew</code>,
+to determine whether a given year will have a US presidential election;
+but everything related to that use is commented out.)
+
+<p>The <code>SAVE</code> column contains the wall clock offset from
+local standard time.
+This is usually either zero for standard time or one hour for daylight
+saving time; but there&rsquo;s no reason, in principle, why it can&rsquo;t
+take on other values.
+
+<p>The <code>LETTER</code> (sometimes called <code>LETTER/S</code>)
+column can contain a variable
+part of the usual abbreviation of the time zone&rsquo;s name, or it can just
+be a hyphen if there&rsquo;s no variable part. For example, the abbreviation
+used in the central time zone will be either &ldquo;CST&rdquo; or
+&ldquo;CDT&rdquo;. The variable part is &lsquo;S&rsquo; or &lsquo;D&rsquo;;
+and, sure enough, that&rsquo;s just what we find in
+the <code>LETTER</code> column
+in the <code>Chicago</code> rules. More about this when we talk about
+&ldquo;Zone&rdquo; lines.
+
+<p>One important thing to notice is that &ldquo;Rule&rdquo; lines
+want at once to be both <i>transitions</i> and <i>steady states</i>:
+<ul>
+<li>On the one hand, they represent transitions between standard and
+daylight saving time; and any number of Rule lines can be in effect
+during a given period (which will always be a non-empty set of
+contiguous calendar years).</li>
+<li>On the other hand, the <code>SAVE</code> and <code>LETTER</code>
+columns contain state that exists between transitions. More about this
+when we talk about the US rules.</li>
+</ul>
+
+<p>In the example above, the transition to daylight saving time
+happened on the 13<small><sup>th</sup></small> of June in 1920, and on
+the last Sunday in March in 1921; but the return to standard time
+happened on the last Sunday in October in both of those
+years. Similarly, the rule for changing to daylight saving time was
+the same from 1922 to 1966; but the rule for returning to standard
+time changed in 1955. Got it?</p>
+
+<p>OK, now for the somewhat more interesting &ldquo;US&rdquo; rules:</p>
+
+<table border="1">
+<tr>
+  <th colspan="6">From the Source File</th>
+</tr>
+<tr>
+  <td colspan="6" align="center"><table><tr><td>
+<pre>
+#Rule NAME FROM TO   TYPE IN  ON        AT   SAVE LETTER/S
+Rule  US   1918 1919  -   Mar lastSun  2:00  1:00 D
+Rule  US   1918 1919  -   Oct lastSun  2:00  0    S
+Rule  US   1942 only  -   Feb 9        2:00  1:00 W # War
+Rule  US   1945 only  -   Aug 14      23:00u 1:00 P # Peace
+Rule  US   1945 only  -   Sep 30       2:00  0    S
+Rule  US   1967 2006  -   Oct lastSun  2:00  0    S
+Rule  US   1967 1973  -   Apr lastSun  2:00  1:00 D
+Rule  US   1974 only  -   Jan 6        2:00  1:00 D
+Rule  US   1975 only  -   Feb 23       2:00  1:00 D
+Rule  US   1976 1986  -   Apr lastSun  2:00  1:00 D
+Rule  US   1987 2006  -   Apr Sun&gt;=1   2:00  1:00 D
+Rule  US   2007 max   -   Mar Sun&gt;=8   2:00  1:00 D
+Rule  US   2007 max   -   Nov Sun&gt;=1   2:00  0    S
+</pre>
+  </td></tr></table></td>
+</tr>
+<tr>
+  <th colspan="6">Reformatted a Bit</th>
+</tr>
+<tr>
+  <th>From</th>
+  <th>To</th>
+  <th colspan="2">On</th>
+  <th>At</th>
+  <th>Action</th>
+</tr>
+<tr align="center">
+  <td rowspan="2">1918</td>
+  <td rowspan="2">1919</td>
+  <td rowspan="2">last Sunday</td>
+  <td>in March</td>
+  <td rowspan="3">02:00 local</td>
+  <td>go to daylight saving time</td>
+</tr>
+<tr align="center">
+  <td>in October</td>
+  <td>return to standard time</td>
+</tr>
+<tr align="center">
+  <td colspan="2">1942 only</td>
+  <td colspan="2">February 9<small><sup>th</sup></small></td>
+  <td>go to &ldquo;war time&rdquo;</td>
+</tr>
+<tr align="center">
+  <td colspan="2" rowspan="2">1945 only</td>
+  <td colspan="2">August 14<small><sup>th</sup></small></td>
+  <td>23:00 <a href="https://en.wikipedia.org/wiki/Universal_Time";>UT</a></td>
+  <td>
+    rename &ldquo;war time&rdquo; to &ldquo;peace<br>time;&rdquo;
+    clocks don&rsquo;t change
+  </td>
+</tr>
+<tr align="center">
+  <td colspan="2">September 30<small><sup>th</sup></small></td>
+  <td rowspan="9">02:00 local</td>
+  <td rowspan="2">return to standard time</td>
+</tr>
+<tr align="center">
+  <td rowspan="2">1967</td>
+  <td>2006</td>
+  <td rowspan="2">last Sunday</td>
+  <td>in October</td>
+</tr>
+<tr align="center">
+  <td>1973</td>
+  <td>in April</td>
+  <td rowspan="6">go to daylight saving time</td>
+</tr>
+<tr align="center">
+  <td colspan="2">1974 only</td>
+  <td colspan="2">January 6<small><sup>th</sup></small></td>
+</tr>
+<tr align="center">
+  <td colspan="2">1975 only</td>
+  <td colspan="2">February 23<small><sup>rd</sup></small></td>
+</tr>
+<tr align="center">
+  <td>1976</td>
+  <td>1986</td>
+  <td>last Sunday</td>
+  <td rowspan="2">in April</td>
+</tr>
+<tr align="center">
+  <td>1987</td>
+  <td>2006</td>
+  <td>first Sunday</td>
+</tr>
+<tr align="center">
+  <td rowspan="2">2007</td>
+  <td rowspan="2">present</td>
+  <td colspan="2">second Sunday in March</td>
+</tr>
+<tr align="center">
+  <td colspan="2">first Sunday in November</td>
+  <td>return to standard time</td>
+</tr>
+</table>
+
+<p>There are two interesting things to note here.</p>
+
+<p>First, the time that something happens (in the <code>AT</code>
+column) is not necessarily the local wall clock time. The time can be
+suffixed with &lsquo;s&rsquo; (for &ldquo;standard&rdquo;) to mean
+local standard time (different from wall clock time when observing
+daylight saving time); or it can be suffixed with &lsquo;g&rsquo;,
+&lsquo;u&rsquo;, or &lsquo;z&rsquo;, all three of which mean the
+standard time at the
+<a href="https://en.wikipedia.org/wiki/Prime_Meridian";>prime meridan</a>.
+&lsquo;g&rsquo; stands for &ldquo;<a
+href="https://en.wikipedia.org/wiki/Greenwich_Mean_Time";>GMT</a>&rdquo;;
+&lsquo;u&rsquo; stands for &ldquo;<a
+href="https://en.wikipedia.org/wiki/Universal_Time";>UT</a>&rdquo; or &ldquo;<a
+href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time";>UTC</a>&rdquo;
+(whichever was official at the time); &lsquo;z&rsquo; stands for the
+<a href="https://en.wikipedia.org/wiki/Nautical_time";>nautical time zone</a>
+Z (a.k.a. &ldquo;Zulu&rdquo; which, in turn, stands for &lsquo;Z&rsquo;).
+The time can also be suffixed with &lsquo;w&rsquo; meaning &ldquo;wall
+clock time;&rdquo; but it usually isn&rsquo;t because that&rsquo;s the
+default.</p>
+
+<p>Second, the day in the <code>ON</code> column, in addition to
+&ldquo;<code>lastSun</code>&rdquo; or a particular day of the month,
+can have the form, &ldquo;<code>Sun&gt;=</code><i>x</i>&rdquo; or
+&ldquo;<code>Sun&lt;=</code><i>x</i>,&rdquo; where <i>x</i> is a day
+of the month. For example, &ldquo;<code>Sun&gt;=8</code>&rdquo; means
+&ldquo;the first Sunday on or after the eighth of the month,&rdquo; in
+other words, the second Sunday of the month. Furthermore, although
+there are no examples above, the weekday needn&rsquo;t be
+&ldquo;<code>Sun</code>&rdquo; in either form, but can be the usual
+three-character English abbreviation for any day of the week.</p>
+
+<p>And the US rules give us more examples of a couple of things
+already mentioned:</p>
+
+<ul>
+<li>The rules for changing to and from daylight saving time are
+actually <i>different sets</i> of rules; and the two sets can change
+independently. Consider, for example, that the rule for the return to
+standard time stayed the same from 1967 to 2006; but the rule for the
+transition to daylight saving time changed several times in the same
+period.  There can also be periods, 1946 to 1966 for example, when no
+rule from this group is in effect, and so either no transition
+happened in those years, or some other rule is in effect (perhaps a
+state or other more local rule).</li>
+
+<li>The <code>SAVE</code> and <code>LETTER</code> columns
+contain <i>steady state</i>, not transitions. Consider, for example,
+the transition from &ldquo;war time&rdquo; to &ldquo;peace time&rdquo;
+that happened on August 14, 1945. The &ldquo;1:00&rdquo; in
+the <code>SAVE</code> column is <i>not</i> an instruction to advance
+the clock an hour. It means that clocks should <i>be</i> one hour
+ahead of standard time, which they already are because of the previous
+rule, so there should be no change.</li>
+
+</ul>
+
+<p>OK, now let&rsquo;s look at a Zone record:</p>
+
+<table border="1">
+<tr>
+  <th colspan="5">From the Source File</th>
+</tr>
+<tr>
+  <td colspan="6" align="center"><table><tr><td>
+<pre>
+#Zone       NAME      GMTOFF   RULES FORMAT [UNTIL]
+Zone  America/Chicago -5:50:36 -       LMT  1883 Nov 18 12:09:24
+                      -6:00    US      C%sT 1920
+                      -6:00    Chicago C%sT 1936 Mar  1  2:00
+                      -5:00    -       EST  1936 Nov 15  2:00
+                      -6:00    Chicago C%sT 1942
+                      -6:00    US      C%sT 1946
+                      -6:00    Chicago C%sT 1967
+                      -6:00    US      C%sT
+</pre>
+  </td></tr></table></td>
+</tr>
+<tr>
+  <th colspan="5">Columns Renamed</th>
+</tr>
+<tr>
+  <th rowspan="2">Standard Offset<br>
+    from <a href="https://en.wikipedia.org/wiki/Prime_Meridian";>Prime
+    Meridian</a></th>
+  <th rowspan="2">Daylight<br>Saving Time</th>
+  <th rowspan="2">Abbreviation(s)</th>
+  <th colspan="2">Ending at Local Time</th>
+</tr>
+<tr>
+  <th>Date</th>
+  <th>Time</th>
+</tr>
+<tr align="center">
+  <td>&minus;5:50:36</td>
+  <td>not observed</td>
+  <td>LMT</td>
+  <td>1883-11-18</td>
+  <td>12:09:24</td>
+</tr>
+<tr align="center">
+  <td rowspan="2">&minus;6:00:00</td>
+  <td>US rules</td>
+  <td rowspan="2">CST or CDT</td>
+  <td>1920-01-01</td>
+  <td>00:00:00</td>
+</tr>
+<tr align="center">
+  <td>Chicago rules</td>
+  <td>1936-03-01</td>
+  <td rowspan="2">02:00:00</td>
+</tr>
+<tr align="center">
+  <td>&minus;5:00:00</td>
+  <td>not observed</td>
+  <td>EST</td>
+  <td>1936-11-15</td>
+</tr>
+<tr align="center">
+  <td rowspan="4">&minus;6:00:00</td>
+  <td>Chicago rules</td>
+  <td>CST or CDT</td>
+  <td>1942-01-01</td>
+  <td rowspan="3">00:00:00</td>
+</tr>
+<tr align="center">
+  <td>US rules</td>
+  <td>CST, CWT or CPT</td>
+  <td>1946-01-01</td>
+</tr>
+<tr align="center">
+  <td>Chicago rules</td>
+  <td rowspan="2">CST or CDT</td>
+  <td>1967-01-01</td>
+</tr>
+<tr align="center">
+  <td>US rules</td>
+  <td colspan="2">&mdash;</td>
+</tr>
+</table>
+
+<p>There are a couple of interesting differences between Zones and Rules.</p>
+
+<p>First, and somewhat trivially, whereas Rules are considered to
+contain one or more records, a Zone is considered to be a single
+record with zero or more <i>continuation lines</i>. Thus, the keyword,
+&ldquo;<code>Zone</code>,&rdquo; and the zone name are not
+repeated. The last line is the one without anything in
+the <code>[UNTIL]</code> column.</p>
+
+<p>Second, and more fundamentally, each line of a Zone represents a
+steady state, not a transition between states. The state exists from
+the date and time in the previous line&rsquo;s <code>[UNTIL]</code>
+column up to the date and time in the current
+line&rsquo;s <code>[UNTIL]</code> column. In other words, the date and
+time in the <code>[UNTIL]</code> column is the instant that separates
+this state from the next. Where that would be ambiguous because
+we&rsquo;re setting our clocks back, the <code>[UNTIL]</code> column
+specifies the first occurrence of the instant. The state specified by
+the last line, the one without anything in the <code>[UNTIL]</code>
+column, continues to the present.</p>
+
+<p>The first line typically specifies the mean solar time observed
+before the introduction of standard time. Since there&rsquo;s no line before
+that, it has no beginning. <code>8-) </code> For some places near the <a
+href="https://en.wikipedia.org/wiki/International_Date_Line";>International
+Date Line</a>, the first <i>two</i> lines will show solar times
+differing by 24 hours; this corresponds to a movement of the Date
+Line.  For example:</p>
+
+<pre>
+#Zone NAME          GMTOFF   RULES FORMAT [UNTIL]
+Zone America/Juneau 15:02:19 -     LMT    1867 Oct 18
+                    -8:57:41 -     LMT    ...
+</pre>
+
+<p>When Alaska was purchased from Russia in 1867, the Date Line moved
+from the Alaska/Canada border to the Bering Strait; and the time in
+Alaska was then 24 hours earlier than it had
+been. <code>&lt;aside&gt;</code>(6 October in the Julian calendar,
+which Russia was still using then for religious reasons, was followed
+by <i>a second instance of the same day with a different name</i>, 18
+October in the Gregorian calendar. Isn&rsquo;t civil time
+wonderful? <code>8-)</code>)<code>&lt;/aside&gt;</code></p>
+
+<p>The abbreviation, &ldquo;LMT&rdquo; stands for &ldquo;local mean
+time&rdquo;, which is an invention of
+the <a href="https://en.wikipedia.org/wiki/Tz_database";>tz
+database</a> and was probably never actually used during the
+period. Furthermore, the value is almost certainly wrong except in the
+archetypal place after which the zone is named. (The tz database
+usually doesn&rsquo;t provide a separate Zone record for places where
+nothing significant happened after 1970.)</p>
+
+<p>The <code>RULES</code> column tells us whether daylight saving time is 
being observed:
+<ul>
+<li>A hyphen, a kind of null value, means that we have not set our
+clocks ahead of standard time.</li>
+
+<li>An amount of time (usually but not necessarily &ldquo;1:00&rdquo;
+meaning one hour) means that we have set our clocks ahead by that
+amount.</li>
+
+<li>Some alphabetic string means that we <i>might have</i> set our
+clocks ahead; and we need to check the rule the name of which is the
+given alphabetic string.</li>
+</ul>
+
+<p>An example of a specific amount of time is:</p>
+<pre>
+#Zone NAME            GMTOFF RULES FORMAT [UNTIL]
+Zone Pacific/Honolulu ...                 1933 Apr 30 2:00
+                      -10:30 1:00  HDT    1933 May 21 2:00
+                      ...
+</pre>
+
+<p>Hawaii tried daylight saving time for three weeks in 1933 and
+decided they didn&rsquo;t like it. <code>8-) </code>Note that
+the <code>GMTOFF</code> column always contains the standard time
+offset, so the wall clock time during this period was GMT &minus;
+10:30 + 1:00 = GMT &minus; 9:30.</p>
+
+<p>The <code>FORMAT</code> column specifies the usual abbreviation of
+the time zone name. It can have one of four forms:</p>
+<ul>
+
+<li>the string, &ldquo;<code>zzz</code>,&rdquo; which is a kind of
+null value (don&rsquo;t ask)</li>
+
+<li>a single alphabetic string other than &ldquo;<code>zzz</code>,&rdquo;
+in which case that&rsquo;s the abbreviation</li>
+
+<li>a pair of strings separated by a slash
+(&lsquo;<code>/</code>&rsquo;), in which case the first string is the
+abbreviation for the standard time name and the second string is the
+abbreviation for the daylight saving time name</li>
+
+<li>a string containing &ldquo;<code>%s</code>,&rdquo; in which case
+the &ldquo;<code>%s</code>&rdquo; will be replaced by the text in the
+appropriate Rule&rsquo;s <code>LETTER</code> column</li>
+</ul>
+
+<p>The last two make sense only if there&rsquo;s a named rule in effect.</p>
+
+<p>An example of a slash is:</p>
+<pre>
+#Zone NAME          GMTOFF RULES FORMAT  [UNTIL]
+Zone  Europe/London ...                  1996
+                    0:00   EU    GMT/BST
+</pre>
+
+<p>The current time in the UK is called either Greenwich mean time or
+British summer time.</p>
+
+<p>One wrinkle, not fully explained in <code>zic.8.txt</code>, is what
+happens when switching to a named rule. To what values should
+the <code>SAVE</code> and <code>LETTER</code> data be initialized?</p>
+
+<ul>
+<li>If at least one transition has happened, use
+the <code>SAVE</code> and <code>LETTER</code> data from the most
+recent.</li>
+
+<li>If switching to a named rule before any transition has happened,
+assume standard time (<code>SAVE</code> zero), and use
+the <code>LETTER</code> data from the earliest transition with
+a <code>SAVE</code> of zero.
+
+</ul>
+
+<p>And two last things about the <code>FORMAT</code> column:</p>
+<ul>
+
+<li>The <a href="https://en.wikipedia.org/wiki/Tz_database";>tz
+database</a> gives abbreviations for time zone names in <i>popular
+usage</i>, which is not necessarily &ldquo;correct&rdquo; by law. For
+example, the last line in
+<code>Zone</code> <code>Pacific/Honolulu</code> (shown below) gives
+&ldquo;HST&rdquo; for &ldquo;Hawaii standard time&rdquo; even though the
+<a 
href="http://www.law.cornell.edu/uscode/html/uscode15/usc_sec_15_00000263----000-.html";>legal</a>
+name for that time zone is &ldquo;Hawaii-Aleutian standard time.&rdquo;
+This author has read that there are also some places in Australia where
+popular time zone names differ from the legal ones.
+
+<li>No attempt is made to <a
+href="https://en.wikipedia.org/wiki/Internationalization_and_localization";>localize</a>
+the abbreviations. They are intended to be the values returned through the
+<code>"%Z"</code> format specifier to
+<a href="https://en.wikipedia.org/wiki/C_(programming_language)">C</a>&rsquo;s
+<a 
href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html";><code>strftime</code></a>
+function in the
+<a 
href="http://www.chemie.fu-berlin.de/chemnet/use/info/libc/libc_19.html#SEC324";>&ldquo;C&rdquo;
 locale</a>.
+</ul>
+
+<p>As a final example, here&rsquo;s the complete history for Hawaii:</p>
+
+<table border="1">
+<tr>
+  <th colspan="6">Relevant Excerpts from the US Rules</th>
+</tr>
+<tr>
+  <td colspan="6" align="center"><table><tr><td>
+<pre>
+#Rule NAME FROM TO   TYPE IN  ON      AT     SAVE LETTER/S
+Rule  US   1918 1919 -    Oct lastSun  2:00  0    S
+Rule  US   1942 only -    Feb  9       2:00  1:00 W # War
+Rule  US   1945 only -    Aug 14      23:00u 1:00 P # Peace
+Rule  US   1945 only -    Sep 30       2:00  0    S
+</pre>
+  </td></tr></table></td>
+</tr>
+<tr>
+  <th colspan="6">The Zone Record</th>
+</tr>
+<tr>
+  <td colspan="6" align="center"><table><tr><td>
+<pre>
+#Zone NAME            GMTOFF    RULES FORMAT [UNTIL]
+Zone Pacific/Honolulu -10:31:26 -     LMT    1900 Jan  1 12:00
+                      -10:30    -     HST    1933 Apr 30  2:00
+                      -10:30    1:00  HDT    1933 May 21  2:00
+                      -10:30    US    H%sT   1947 Jun  8  2:00
+                      -10:00    -     HST
+</pre>
+  </td></tr></table></td>
+</tr>
+<tr>
+  <th colspan="6">What We Infer</th>
+</tr>
+<tr>
+  <th rowspan="2">Wall-Clock<br>Offset from<br>Prime Meridian</th>
+  <th rowspan="2">Adjust<br>Clocks</th>
+  <th colspan="2">Time Zone</th>
+  <th colspan="2">Ending at Local Time</th>
+</tr>
+<tr>
+  <th>Abbrv.</th>
+  <th>Name</th>
+  <th>Date</th>
+  <th>Time</th>
+</tr>
+<tr align="center">
+  <td>&minus;10:31:26</td>
+  <td>&mdash;</td>
+  <td>LMT</td>
+  <td>local mean time</td>
+  <td>1900-01-01</td>
+  <td>12:00</td>
+</tr>
+<tr align="center">
+  <td>&minus;10:30</td>
+  <td>+0:01:26</td>
+  <td>HST</td>
+  <td>Hawaii standard time</td>
+  <td>1933-04-30</td>
+  <td rowspan="3">02:00</td>
+</tr>
+<tr align="center">
+  <td>&minus;9:30</td>
+  <td>+1:00</td>
+  <td>HDT</td>
+  <td>Hawaii daylight time</td>
+  <td>1933-05-21</td>
+</tr>
+<tr align="center">
+  <td>&minus;10:30&sup1;</td>
+  <td>&minus;1:00&sup1;</td>
+  <td>HST&sup1;</td>
+  <td>Hawaii standard time</td>
+  <td>1942-02-09</td>
+</tr>
+<tr align="center">
+  <td rowspan="2">&minus;9:30</td>
+  <td>+1:00</td>
+  <td>HWT</td>
+  <td>Hawaii war time</td>
+  <td>1945-08-14</td>
+  <td>13:30&sup2;</td>
+</tr>
+<tr align="center">
+  <td>0</td>
+  <td>HPT</td>
+  <td>Hawaii peace time</td>
+  <td>1945-09-30</td>
+  <td rowspan="2">02:00</td>
+</tr>
+<tr align="center">
+  <td>&minus;10:30</td>
+  <td>&minus;1:00</td>
+  <td rowspan="2">HST</td>
+  <td rowspan="2">Hawaii standard time</td>
+  <td>1947-06-08</td>
+</tr>
+<tr align="center">
+  <td>&minus;10:00&sup3;</td>
+  <td>+0:30&sup3;</td>
+  <td colspan="2">&mdash;</td>
+</tr>
+<tr>
+  <td colspan="6">
+    &sup1;Switching to US rules&hellip;most recent transition (in 1919) was to 
standard time
+  </td>
+</tr>
+<tr>
+  <td colspan="6">
+    &sup2;23:00 <a href="https://en.wikipedia.org/wiki/Universal_Time";>UT</a>
+    + (&minus;9:30) = 13:30 local
+  </td>
+</tr>
+<tr>
+  <td colspan="6">
+    &sup3;Since <a 
href="https://en.wikipedia.org/wiki/ISO_8601";>1947&ndash;06&ndash;08T12:30Z</a>,
+    the civil time in Hawaii has been
+    <a href="https://en.wikipedia.org/wiki/Universal_Time";>UT</a>/<a 
href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time";>UTC</a>
+    &minus; 10:00 year-round.
+  </td>
+</tr>
+</table>
+
+<p>There will be a short quiz later. <code>8-)</code></p>
+
+<hr>
+<address>
+This web page is in the public domain, so clarified as of
+2015-10-20 by Bill Seymour.
+<br>
+All suggestions and corrections will be welcome; all flames will be amusing.
+Mail to was at pobox dot com.
+</address>
+</body>
+</html>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tz-link.htm new/tz-link.htm
--- old/tz-link.htm     2015-12-13 09:46:33.000000000 +0100
+++ new/tz-link.htm     2016-03-01 06:00:44.000000000 +0100
@@ -10,7 +10,7 @@
  content="Sources for time zone and daylight saving time data">
 <meta name="DC.Creator" content="Eggert, Paul">
 <meta name="DC.Contributor" content="Olson, Arthur David">
-<meta name="DC.Date" content="2015-12-13">
+<meta name="DC.Date" content="2016-02-29">
 <meta name="DC.Description"
  content="Sources of information about time zones and daylight saving time">
 <meta name="DC.Identifier"
@@ -162,7 +162,7 @@
 <li>The article
 <a href="https://en.wikipedia.org/wiki/Tz_database";>tz database</a> is
 an encyclopedic summary.</li>
-<li><a 
href="https://web.archive.org/web/20140221080916/http://www.cstdbill.com/tzdb/tz-how-to.html";>How
 to Read the
+<li><a href="tz-how-to.html">How to Read the
 tz Database Source Files</a> explains the <code><abbr>tz</abbr></code>
 database format.</li>
 <li><a
@@ -201,7 +201,7 @@
 href="http://twiki.org/cgi-bin/xtra/tzdatepick.html";>Date and Time Gateway</a>
 lets you see the <code><abbr>TZ</abbr></code> values directly.</li>
 <li><a
-href="http://convertit.com/Go/ConvertIt/World_Time/Current_Time.ASP";>Current
+href="http://www.convertit.com/Go/ConvertIt/World_Time/Current_Time.ASP";>Current
 Time in 1000 Places</a> uses descriptions of the values.</li>
 <li><a href="http://www.timezoneconverter.com/cgi-bin/tzc.tzc";>Time Zone
 Converter</a>
@@ -209,7 +209,7 @@
 <li><a href="http://home.kpn.nl/vanadovv/time/TZworld.html";>Complete
 timezone information for all countries</a> displays tables of DST rules.
 <li><a href="http://www.timeanddate.com/worldclock/";>The World Clock &ndash;
-Time Zones</a> lets you sort zone names and convert times.</li>
+Worldwide</a> lets you sort zone names and convert times.</li>
 <li><a href="http://www.zeitverschiebung.net/en/";>Time Difference</a>
 calculates the current time difference between locations.</li>
 <li><a href="http://www.wx-now.com";>Weather Now</a> lists the weather too.</li>
@@ -642,7 +642,7 @@
 history of legal time in Singapore and Malaysia.</dd>
 <dt>United Kingdom</dt>
 <dd><a
-href="http://www.polyomino.org.uk/british-time/";>History of
+href="https://www.polyomino.org.uk/british-time/";>History of
 legal time in Britain</a> discusses in detail the country
 with perhaps the best-documented history of clock adjustments.
 The National Physical Laboratory also maintains an <a
@@ -650,7 +650,7 @@
 of Summer time dates</a>.</dd>
 <dt>United States</dt>
 <dd>The Department of Transportation's <a
-href="http://www.transportation.gov/regulations/recent-time-zone-proceedings";>Recent
+href="https://www.transportation.gov/regulations/recent-time-zone-proceedings";>Recent
 Time Zone Proceedings</a> lists changes to time zone boundaries.</dd>
 </dl>
 <h2>Precision timekeeping</h2>
@@ -699,7 +699,7 @@
 <abbr title="International Atomic Time">TAI</abbr>,
 <abbr>TDB</abbr>, <abbr>TDT</abbr> and
 <abbr>UTC</abbr>.</li>
-<li><a href="http://www2.jpl.nasa.gov/basics/bsf2-3.php";>Basics of
+<li><a href="http://solarsystem.nasa.gov/basics/bsf2-3.php";>Basics of
 Space Flight &ndash; Reference Systems &ndash; Time Conventions</a>
 briefly explains interplanetary space flight timekeeping.</li>
 <li><a
@@ -770,7 +770,7 @@
 profile for use in new Internet
 protocols.</li>
 <li>
-<a href="http://www.hackcraft.net/web/datetime/";>Date &amp; Time
+<a href="https://www.hackcraft.net/web/datetime/";>Date &amp; Time
 Formats on the Web</a> surveys web- and Internet-oriented date and time
 formats.</li>
 <li>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tzselect.ksh new/tzselect.ksh
--- old/tzselect.ksh    2015-12-08 18:51:21.000000000 +0100
+++ new/tzselect.ksh    2016-03-06 22:02:32.000000000 +0100
@@ -346,11 +346,14 @@
                                'that is 10 hours ahead (east) of UTC.'
                        read TZ
                        $AWK -v TZ="$TZ" 'BEGIN {
-                               tzname = "[^-+,0-9][^-+,0-9][^-+,0-9]+"
-                               time = "[0-2]?[0-9](:[0-5][0-9](:[0-5][0-9])?)?"
+                               tzname = "(<[[:alnum:]+-]{3,}>|[[:alpha:]]{3,})"
+                               time = "(2[0-4]|[0-1]?[0-9])" \
+                                 "(:[0-5][0-9](:[0-5][0-9])?)?"
                                offset = "[-+]?" time
-                               date = "(J?[0-9]+|M[0-9]+\\.[0-9]+\\.[0-9]+)"
-                               datetime = "," date "(/" time ")?"
+                               mdate = "M([1-9]|1[0-2])\\.[1-5]\\.[0-6]"
+                               jdate = "((J[1-9]|[0-9]|J?[1-9][0-9]" \
+                                 "|J?[1-2][0-9][0-9])|J?3[0-5][0-9]|J?36[0-5])"
+                               datetime = ",(" mdate "|" jdate ")(/" time ")?"
                                tzpattern = "^(:.*|" tzname offset "(" tzname \
                                  "(" offset ")?(" datetime datetime ")?)?)$"
                                if (TZ ~ tzpattern) exit 1
@@ -509,7 +512,7 @@
                case $TZsec in
                $UTsec)
                        extra_info="
-Local time is now:     $TZdate.
+Selected time is now:  $TZdate.
 Universal Time is now: $UTdate."
                        break
                esac
@@ -545,7 +548,7 @@
 *) file=.profile line="TZ='$TZ'; export TZ"
 esac
 
-say >&2 "
+test -t 1 && say >&2 "
 You can make this change permanent for yourself by appending the line
        $line
 to the file '$file' in your home directory; then log out and log in again.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zdump.c new/zdump.c
--- old/zdump.c 2015-07-29 03:34:13.000000000 +0200
+++ new/zdump.c 2016-02-26 12:33:54.000000000 +0100
@@ -238,12 +238,14 @@
 # define timezone_t char **
 #endif
 
+#if !HAVE_POSIX_DECLS
 extern char ** environ;
 extern int     getopt(int argc, char * const argv[],
                        const char * options);
 extern char *  optarg;
 extern int     optind;
-extern char *  tzname[2];
+extern char *  tzname[];
+#endif
 
 /* The minimum and maximum finite time values.  */
 enum { atime_shift = CHAR_BIT * sizeof (time_t) - 2 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zic.c new/zic.c
--- old/zic.c   2015-08-12 02:40:25.000000000 +0200
+++ new/zic.c   2016-02-26 12:33:54.000000000 +0100
@@ -22,6 +22,13 @@
 #define ZIC_MAX_ABBR_LEN_WO_WARN       6
 #endif /* !defined ZIC_MAX_ABBR_LEN_WO_WARN */
 
+#ifdef HAVE_DIRECT_H
+# include <direct.h>
+# include <io.h>
+# undef mkdir
+# define mkdir(name, mode) _mkdir(name)
+#endif
+
 #if HAVE_SYS_STAT_H
 #include <sys/stat.h>
 #endif
@@ -87,17 +94,19 @@
        zic_t           z_untiltime;
 };
 
+#if !HAVE_POSIX_DECLS
 extern int     getopt(int argc, char * const argv[],
                        const char * options);
 extern int     link(const char * fromname, const char * toname);
 extern char *  optarg;
 extern int     optind;
+#endif
 
 #if ! HAVE_LINK
-# define link(from, to) (-1)
+# define link(from, to) (errno = ENOTSUP, -1)
 #endif
 #if ! HAVE_SYMLINK
-# define symlink(from, to) (-1)
+# define symlink(from, to) (errno = ENOTSUP, -1)
 #endif
 
 static void    addtt(zic_t starttime, int type);
@@ -758,41 +767,47 @@
                        progname, fromname, e);
                exit(EXIT_FAILURE);
        }
-       if (itsdir(toname) <= 0)
-               remove(toname);
        if (link(fromname, toname) != 0) {
-               int     result;
+         int link_errno = errno;
+         bool retry_if_link_supported = false;
 
-               if (! mkdirs(toname))
-                       exit(EXIT_FAILURE);
-
-               result = link(fromname, toname);
-               if (result != 0) {
-                               const char *s = fromfield;
-                               const char *t;
-                               char *p;
-                               size_t dotdots = 0;
-                               register char * symlinkcontents = NULL;
-
-                               do
-                                        t = s;
-                               while ((s = strchr(s, '/'))
-                                      && ! strncmp (fromfield, tofield,
-                                                    ++s - fromfield));
-
-                               for (s = tofield + (t - fromfield); *s; s++)
-                                 dotdots += *s == '/';
-                               symlinkcontents
-                                 = emalloc(3 * dotdots + strlen(t) + 1);
-                               for (p = symlinkcontents; dotdots-- != 0; p += 
3)
-                                 memcpy(p, "../", 3);
-                               strcpy(p, t);
-                               result = symlink(symlinkcontents, toname);
-                               if (result == 0)
-warning(_("hard link failed, symbolic link used"));
-                               free(symlinkcontents);
-               }
-               if (result != 0) {
+         if (link_errno == ENOENT || link_errno == ENOTSUP) {
+           if (! mkdirs(toname))
+             exit(EXIT_FAILURE);
+           retry_if_link_supported = true;
+         }
+         if ((link_errno == EEXIST || link_errno == ENOTSUP)
+             && itsdir(toname) == 0
+             && (remove(toname) == 0 || errno == ENOENT))
+           retry_if_link_supported = true;
+         if (retry_if_link_supported && link_errno != ENOTSUP)
+           link_errno = link(fromname, toname) == 0 ? 0 : errno;
+         if (link_errno != 0) {
+           const char *s = fromfield;
+           const char *t;
+           char *p;
+           size_t dotdots = 0;
+           char *symlinkcontents;
+           int symlink_result;
+
+           do
+             t = s;
+           while ((s = strchr(s, '/'))
+                  && strncmp(fromfield, tofield, ++s - fromfield) == 0);
+
+           for (s = tofield + (t - fromfield); *s; s++)
+             dotdots += *s == '/';
+           symlinkcontents = emalloc(3 * dotdots + strlen(t) + 1);
+           for (p = symlinkcontents; dotdots-- != 0; p += 3)
+             memcpy(p, "../", 3);
+           strcpy(p, t);
+           symlink_result = symlink(symlinkcontents, toname);
+           free(symlinkcontents);
+           if (symlink_result == 0) {
+             if (link_errno != ENOTSUP)
+               warning(_("symbolic link used because hard link failed: %s"),
+                       strerror (link_errno));
+           } else {
                        FILE *fp, *tp;
                        int c;
                        fp = fopen(fromname, "rb");
@@ -815,8 +830,11 @@
                                putc(c, tp);
                        close_file(fp, fromname);
                        close_file(tp, toname);
-                       warning(_("link failed, copy used"));
-               }
+                       if (link_errno != ENOTSUP)
+                         warning(_("copy used because hard link failed: %s"),
+                                 strerror (link_errno));
+           }
+         }
        }
        free(fromname);
        free(toname);
@@ -863,18 +881,17 @@
 {
        struct stat st;
        int res = stat(name, &st);
-       if (res != 0)
-               return res;
 #ifdef S_ISDIR
-       return S_ISDIR(st.st_mode) != 0;
-#else
-       {
+       if (res == 0)
+               return S_ISDIR(st.st_mode) != 0;
+#endif
+       if (res == 0 || errno == EOVERFLOW) {
                char *nameslashdot = relname(name, ".");
-               res = stat(nameslashdot, &st);
+               bool dir = stat(nameslashdot, &st) == 0 || errno == EOVERFLOW;
                free(nameslashdot);
-               return res == 0;
+               return dir;
        }
-#endif
+       return -1;
 }
 
 /*
@@ -1685,7 +1702,7 @@
        /*
        ** Remove old file, if any, to snap links.
        */
-       if (itsdir(fullname) <= 0 && remove(fullname) != 0 && errno != ENOENT) {
+       if (itsdir(fullname) == 0 && remove(fullname) != 0 && errno != ENOENT) {
                const char *e = strerror(errno);
 
                fprintf(stderr, _("%s: Can't remove %s: %s\n"),

++++++ tzdata-china.diff ++++++
--- /var/tmp/diff_new_pack.kcBciG/_old  2016-03-26 15:07:52.000000000 +0100
+++ /var/tmp/diff_new_pack.kcBciG/_new  2016-03-26 15:07:52.000000000 +0100
@@ -1,8 +1,8 @@
-Index: timezone-2015d/asia
+Index: timezone-2016b/asia
 ===================================================================
---- timezone-2015d.orig/asia
-+++ timezone-2015d/asia
-@@ -516,6 +516,10 @@ Rule      PRC     1987    1991    -       Apr     Sun>=10 
0:00    1:
+--- timezone-2016b.orig/asia
++++ timezone-2016b/asia
+@@ -518,6 +518,10 @@ Rule      PRC     1987    1991    -       Apr     Sun>=10 
0:00    1:
  Zone  Asia/Shanghai   8:05:43 -       LMT     1901
                        8:00    Shang   C%sT    1949
                        8:00    PRC     C%sT
@@ -13,11 +13,11 @@
  # Xinjiang time, used by many in western China; represented by Ürümqi / 
Ürümchi
  # / Wulumuqi.  (Please use Asia/Shanghai if you prefer Beijing time.)
  Zone  Asia/Urumqi     5:50:20 -       LMT     1928
-Index: timezone-2015d/backward
+Index: timezone-2016b/backward
 ===================================================================
---- timezone-2015d.orig/backward
-+++ timezone-2015d/backward
-@@ -93,7 +93,7 @@ Link America/Mexico_City     Mexico/General
+--- timezone-2016b.orig/backward
++++ timezone-2016b/backward
+@@ -94,7 +94,7 @@ Link America/Mexico_City     Mexico/General
  Link  Pacific/Auckland        NZ
  Link  Pacific/Chatham         NZ-CHAT
  Link  America/Denver          Navajo
@@ -26,12 +26,12 @@
  Link  Pacific/Pohnpei         Pacific/Ponape
  Link  Pacific/Pago_Pago       Pacific/Samoa
  Link  Pacific/Chuuk           Pacific/Truk
-Index: timezone-2015d/zone.tab
+Index: timezone-2016b/zone.tab
 ===================================================================
---- timezone-2015d.orig/zone.tab
-+++ timezone-2015d/zone.tab
-@@ -143,6 +143,7 @@ CK -2114-15946     Pacific/Rarotonga
- CL    -3327-07040     America/Santiago        most locations
+--- timezone-2016b.orig/zone.tab
++++ timezone-2016b/zone.tab
+@@ -144,6 +144,7 @@ CK -2114-15946     Pacific/Rarotonga
+ CL    -3327-07040     America/Santiago        Chile (most areas)
  CL    -2709-10926     Pacific/Easter  Easter Island
  CM    +0403+00942     Africa/Douala
 +CN    +3955+11626     Asia/Beijing    China Standard Time

++++++ tzdata2016a.tar.gz -> tzdata2016c.tar.gz ++++++
++++ 1872 lines of diff (skipped)


Reply via email to