* africa (Morocco): This year, DST is suspended from Sunday through
Sunday, not from Saturday through Saturday. (Thanks to Milamber.)
Guess a similar pattern in future years.
* NEWS: Document this.
Problem reported by Leonardo Chiquitto in:
http://mm.icann.org/pipermail/tz/2015-May/022276.html
Apparently his zic was built with -DTZDEFAULT=\"/etc/localtime\".
* NEWS: Document this.
* zic.c (verror): Don't dump core if filename is NULL.
(main, infile, mkdirs): Omit unnecessary trailing \n in diagnostic.
(componentcheck, namecheck): Now returns bool. All callers changed.
(componentcheck): Make the diagnostics more understandable.
Don't exit on error, so that the user can see multiple errors.
(dolink, writezone): Don't namecheck here.
(inzsub, inlink): Do it here instead.
This generates better diagnostics, and avoids the bug, since
it doesn't apply namecheck to TZDEFAULT or to TZDEFRULES.
* NEWS: Document this.
* backzone (America/Cayman): Move from here ...
* northamerica: ... back to here, and assume US-style DST starting 2016.
* zone1970.tab (KY): Now a separate row, since KY and PA disagree
starting 2016.
The country code 'DM' matched data in the leading comments
in zone1970.tab, which caused tzselect to misbehave.
Problem reported by Owen Leibman in:
http://mm.icann.org/pipermail/tz/2015-May/022265.html
* tzselect.ksh (regions, TZ): Don't treat comments as data.
* NEWS: Mention this.
Problem reported by Joseph Myers in:
https://gcc.gnu.org/ml/gcc-patches/2015-05/msg00704.html
* localtime.c (detzcode, detzcode64): Don't rely on
undefined behavior with left shift into sign bit.
Port better to non-2's-complement machines.
* private.h (TWOS_COMPLEMENT, MAXVAL, MINVAL): New macros.
* private.h (time_t_min, time_t_max):
* zic.c (min_time, max_time): Use them to avoid undefined behavior.
* zdump.c (atime_shift): New constant.
(absolute_min_time, absolute_max_time):
Use it to avoid undefined behavior.
* Makefile (ALL): Depend on $(ENCHILADA).
(check_public): Do not depend on $(ENCHILADA), since we're
about to remove some of it anyway. Use 'make ALL' to avoid
useless chatter about 'Nothing to do'.
* NEWS: Document this.
* tzselect.ksh (TZ_COUNTRY_TABLE, TZ_ZONE_TABLE):
If the current locale is not UTF-8, convert these tables
to the current locale's encoding before using them.
That's better than switching ths ehell to UTF-8, which
may not work if the current terminal doesn't support it.
Problem reported by Random832 in:
http://mm.icann.org/pipermail/tz/2015-May/022260.html
* Makefile (check_character_set): Don't require iso3166.tab
to be ASCII.
* NEWS: Document this.
* iso3166.tab (AX, CI, RE): Use UTF-8 rather than ASCII approximations.
While using the tz source to test some other program I found an
unwanted hair space (U+200A) in the commentary. Fix this, and
adjust Makefile to catch this sort of thing in the future.
* Makefile (SAFE_CHARSET): Exclude ] and -, as they're now the
invoker's responsibility. Invoker changed.
(NONSYM_CHAR): Remove, replacing with ...
(OK_CHAR): ... this new macro. All uses changed.
(NONSYM_LINE, VALID_LINE): Remove, replacing with ...
(OK_LINE): ... this new macro. All uses changed.
(check_character_set): Simplify test, and report all non-ASCII
non-letters. Remove the exception for Makefile, as it no longer
needs to contain non-OK characters.
* southamerica: Replace an inadvertent hair space with a space.
Its function 'scheck' can be done more efficiently inline.
* Makefile (TZCOBJS): Remove scheck.o.
(NONLIBSRCS): Remove scheck.c.
(scheck.o): Remove.
* private.h (scheck): Remove decl.
* scheck.c: Remove.
* zic.c (gethms, inleap, rulesub): Instead of scheck, use sscanf
directly, with %c appended to the format to detect excess input.
One of its functions, icpyalloc, duplicates the now-standard
function strdup, and we might as well use the standard function.
Its other function, icatalloc, is used only in O(N**2) algorithms
that can be rewritten to be O(N).
* Makefile: Mention HAVE_STRDUP in commentary.
(TZCOBJS): Remove ialloc.o.
(NONLIBSRCS): Remove ialloc.c.
(ialloc.o): Remove.
* ialloc.c: Remove.
* private.h (HAVE_STRDUP): New macro, defaulting to 1.
(icatalloc, icpyalloc): Remove decls.
* zic.c (end): Remove.
(strdup) [!HAVE_STRDUP]: New function.
(memcheck): Arg is no longer a const pointer, since the
result isn't.
(emalloc, erealloc, ecpyalloc): Now functions, not macros.
(ecpyalloc): Use strdup, not icpyalloc.
(ecatalloc): Remove. All callers changed.
(componentcheck): Check that file name components are nonempty;
otherwise, relname might return nonsense.
(relname): New function.
(dolink, itsdir, writezone): Use it.
(dolink, stringrule, stringzone):
Rewrite to avoid O(N**2) algorithm involving 'strcat' and 'end'.
(writezone): Use local, not static, to store fullname,
and free it before returning.
(doabbr, stringoffset): Return strlen of result.
* northamerica (America/Whitehorse):
The switch from UTC-9 to UTC-8 was on 1967-05-28, not 1966-07-01.
(Thanks to Brian Inglis and Dennis Ferguson.)
* NEWS: Document this.
* NEWS: Document this.
* africa (Egypt): Change from "Apr lastFri 0:00s" to "Apr lastThu
24:00" for 2015-2019 and 2023 on. (Thanks to Steffen Thorsen.)
If I recall correctly, the trailing "s" was needed to work around
a Ramadan glitch that no longer seems to happen with the new rule,
so omit it in the new version.
When recently changing the 'Chile' ruleset in 'southamerica', I
forgot to update its copy 'ChileAQ' in 'antarctica'. This sort of
thing has been a continuing problem over the years. Attempt to
make further recurrences less likely by moving 'Antarctica/Palmer'
from 'antarctica' to 'southamerica', so that there's no need to
copy the rules in question.
* antarctica (ArgAQ, ChileAQ): Remove.
(Antarctica/Palmer): Move to ...
* southamerica: ... this file, and use plain 'Arg' and 'Chile'.
* NEWS: Mention Antarctica/Palmer and the other affected zones.
(Thanks to Alois Treindl for reporting the problem.)
* southamerica (Chile, America/Santiago, Pacific/Easter):
Fix several problems in the Chilean data from 1890 through 1990.
* NEWS: Document this.
* NEWS: Document this.
* backzone (Mont, America/Montreal):
Move this out-of-scope data here from 'northamerica'.
* checktab.awk: Remove special case for America/Montreal,
that was added to this file "temporarily" on 2013-09-11.
* northamerica (America/Montreal): Now a link to America/Toronto.
* Makefile (GCC_DEBUG_FLAGS): Assume GCC 4.9.2 and current tz sources.
Add -Wdate-time, -Wdouble-promotion, -Wlogical-op,
-Wold-style-definition, -Wunused. Remove redundant -Wcast-qual
and -Wno-cast-qual. Remove -Wmissing-declarations; implied by
-Wmissing-prototypes. Remove -Wmissing-noreturn; equivalent to
-Wsuggest-attribute=noreturn. Remove -Wno-sign-conversion; not
needed, as we don't use -Wconversion. Put the -Wno-* options
last, so that they override preceding options that enable warnings.
Allow libraries built with -Dtime_tz=... to be used in executables
that also use standard-library time_t and libraries.
(Problem reported by Bradley White.)
* NEWS: Document this.
* private.h (localtime_rz, mktime_rz, posix2time_z, time2posix_z)
(tzalloc, tzfree, tzset, tzsetwall) [time_tz]: Define to
tz_localtime_rz etc., so that these functions can be used in the
same executable as standard functions with standard time_t.
(tzset, tzsetwall) [time_tz]: Declare, so that the tz_-prefixed
version ins declared.
* asia (Mongol), NEWS: Mongolia will start observing DST again
this year, from the last Saturday in March at 02:00 to the last
Saturday in September at 00:00. (Thanks to Ganbold Tsagaankhuu.)
* asia (Palestine), NEWS: Palestine will start DST on March 28,
not March 27. Also, correct the fall 2014 transition from
September 26 to October 24. Adjust future predictions
accordingly. (Thanks to Steffen Thorsen.)
* NEWS: Document this.
* australasia (Pacific/Guam): Now a link to Pacific/Guam.
(Pacific/Midway): Now a link to Pacific/Pago_Pago.
* backzone (America/Antigua, America/Cayman, Pacific/Miday)
(Pacific/Saipan): Move these four entries here from the other files.
* checktab.awk: Remove special cases for the four zones.
* northamerica (America/Cayman): Now a link to America/Panama.
(America/Antigua): Move to ...
* southamerica (America/Antigua): ... here, and make it a link to
America/Port_of_Spain.
* leap-seconds.list: New version 3629404800 from NIST,
fixing a commentary typo and removing trailing white space.
* Makefile (check_white_space): Remove special case for
leap-second.list.
* Makefile (check_white_space): Allow trailing white space in
leap-seconds.list. This file is maintained by NIST, and the
current version has trailing white space, and has a checksum
making it inadvisable for us to remove the trailing white space in
our copy. Also, coalesce two 'grep' calls into one, and check for
weird white space characters anywhere, not just before line end.
* NEWS:
* antarctica (ChileAQ, Antarctica/Palmer):
* southamerica (Chile, America/Santiago, Pacific/Easter):
Chile will not change its clocks in April, or thereafter.
Consider this to be their new standard time, effective April.
(Thanks to Juan Correa.)
* NEWS: America/FCP_QRoo also affects current time stamps.
* northamerica: Reformat to fit in 80 characters.
* zone.tab, zone1970.tab: Use "city, state" style for consistency.
* asia (Asia/Bahrain): Now links to Asia/Qatar.
(Asia/Kuwait, Asia/Aden): Now links to Asia/Riyadh.
(Asia/Muscat): Now links to Asia/Dubai.
* backzone: Move the old data here.
* checktab.awk (tztab): Remove special cases for these zones.
* NEWS: Document the above.
* europe (Iceland, Atlantic/Reykjavik):
Correct entries for 1939, 1921, 1919, and 1837-1907.
Coalesce some other entries, for simplicity.
* NEWS: Document this.
Problem reported by Stephen Colebourne in:
http://mm.icann.org/pipermail/tz/2014-November/021888.html
* backward (Africa/Asmera): Link to Africa/Nairobi,
not to Africa/Asmara.
* backzone (Africa/Asmera): New link, to override 'backward'.
* NEWS: Document fixes.
This problem has come up before, and it's time to add a check to
catch this common error.
* Makefile (AWK_SCRIPTS): Add checklinks.awk.
(check, .PHONY): Add check_links.
(check_links): New rule.
* checklinks.awk: New file.
* localtime.c (settzname): Move scrubbing into ...
(scrub_abbrs): ... this new function.
(zoneinit): Use it here, rather than in settzname.
* NEWS: Document this.
* africa (Africa/Addis_Ababa, Africa/Asmara, Africa/Dar_es_Salaam)
(Africa/Djibouti, Africa/Kampala, Africa/Mogadishu, Indian/Antananarivo)
(Indian/Comoro, Indian/Mayotte):
Change these from zones to links to Africa/Nairobi.
* backzone: Move the old data here.
* checktab.awk (tztab): Remove special cases for these zones.
* NEWS: Document the above.
* africa, asia, australasia, backzone, europe, northamerica:
* southamerica, tz-link.htm: Be less enthusiastic about Shanks.
* tz-link.htm: Be clearer about UT vs UTC.
* NEWS: Document this.
(Thanks to Sanghyuk Jung.)
* asia (ROK): Add entries for 1948-1959 and correct entries
for 1987-1988.
(Asia/Seoul): Correct entries through 1962.
(Asia/Pyongyang): Guess no change since World War II.
* NEWS: Document this.
I obtained a copy of Trần Tiến Bình's 2005 book "Lịch Việt Nam:
thế kỷ XX-XXI (1901-2100)", verified that www.thoigian.com.vn's
page is a verbatim quote of a passage in pages 45-50, and added a
list of Trần's sources for his pp 49-50.
(Thanks to Ken Rylander for the heads-up.)
* australasia (Fiji): Assume Nov Sun>=1 2:00 to Jan Sun>=18 3:00
from here on out.
* newtzset.3: Adjust Fiji example to match current assumptions.
* NEWS: Document this.
Christos Zoulas reported a crash due to a tzsetlcl failure to
initialize data in some places, and requested that errno be set
when time functions fail; see:
http://mm.icann.org/pipermail/tz/2014-October/021754.html
While fixing this in a different way, I noticed and fixed another
instance of undefined behavior when read returns a too-small value.
* NEWS: Document this.
* localtime.c (union input_buffer): Rename from u_t.
(union input_buffer, union local_storage):
Move to top level so that two functions can use them.
(tzloadbody): New function, with most of the body of the old tzload.
Check for short reads that leave uninitialized buffers behind.
Define a new constant TZHEADSIZE for this, and use it to simplify
other code that already uses the concept.
(tzload): Use it. This removes the need for gotos. Return an errno
value; all callers changed.
(zoneinit): Return bool, not struct state *. Assume SP is nonnull.
All callers changed.
(zoneinit, tzalloc): Set errno on failure.
(tzsetlcl): Don't crash if zoneinit fails.
* private.h (ENAMETOOLONG): Define if not already defined.
This is for the part of Papua New Guinea that plans to switch from
UTC+10 to UTC+11 on 2014-12-28 at 02:00. (Thanks to Kiley Walbom
for the heads-up.)
* australasia (Pacific/Bougainville): New zone.
* zone.tab, zone1970.tab: Add entries for it.
* NEWS: Document this.
See: http://mm.icann.org/pipermail/tz/2014-October/021692.html
* asctime.c (asctime_r): Remove now-unnecessary EOVERFLOW ifdef.
* localtime.c (timesub): Set errno to EOVERFLOW on overflow.
POSIX requires this.
(ctime, ctime_r): Return NULL instead of having undefined behavior
when the time stamp is out of struct tm range. NetBSD does this,
the standards allow it, and it's nicer for users.
* private.h (EOVERFLOW): Default to EINVAL on ancient hosts that lack it.
* NEWS: Document this.