* 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.
in: http://mm.icann.org/pipermail/tz/2014-October/021684.html
* localtime.c (tzload): Use ssize_t, not int. Redo comparison to
avoid the need for an ssize_t value less than -1, which POSIX does
not guarantee. Use memmove so that we needn't worry about an
ssize_t index.
(tzparse): Remove static always-zero var. Initialized fields
to zero by hand instead.
(zoneinit): Initialized more fields, to avoid undefined behavior
in tzalloc.
(leapcorr): Fix bug, a stray initialization of a local variable.
* Makefile: Add comment about ssize_t.
* NEWS: Document the above.
* asia (Asia/Ho_Chi_Minh):
Rewrite the data from 1906 through 1975, using new information
from Trần Tiến Bình's book. (Thanks to Trần Ngọc Quân.)
New abbreviation IDT for UT+8 in Indochina.
* checktab.awk (tztab): Remove special cases for this zone.
* zone1970.tab: Add Asia/Ho_Chi_Minh, and add Asia/Bangkok commentary.
* NEWS: Document this.
* asia (Asia/Phnom_Penh, Asia/Vientiane):
Change these from zones to links to Asia/Bangkok.
* backzone: Move the old data here.
* checktab.awk (tztab): Remove special cases for these zones.
* NEWS: Document the above.
* localtime.c (localsub): Don't bother updating 'tzname' again
when localtime is GMT, as tzset's value should be fine. When
updating 'tzname', also update 'timezone' and 'altzone'
consistently, on platforms that define the latter two vars.
* NEWS: Document this.
* zdump.c (adjusted_yday, gmtoff): New functions.
(show): Use new function gmtoff to output gmtoff= even on
platforms that do not define TM_GMTOFF.
* NEWS: Document this.
localtime_rz does not need to lock, but gmtime does.
* zdump.c (gmtime_r) [!HAVE_LOCALTIME_R]: New function.
(USE_LOCALTIME_RZ): New macro. Use it to simplify ifdef usage.
(gmtz): New static var.
(gmtzinit, my_gmtime_r): New functions.
(main): Use them.
We don't know of any problems with the previous code on practical
platforms, but it's safer to be portable.
Problem reported by Andy Heninger in:
http://mm.icann.org/pipermail/tz/2014-September/021599.html
* localtime.c (VOLATILE): Remove. All uses removed.
(gmtcheck): Don't access gmt_is_set until we have the lock.
This may be significantly slower, but it's safer.
(localtime_tzset): Likewise. This change isn't significantly
slower, though; it's more of a refactoring.
* NEWS: Document this.