* localtime.c (tzload): Avoid undefined behavior on integer overflow
when reading a file containing integers out of machine range.
Simplify some of the existing overflow checking.
Handle out-of-range leap-second transitions similarly to the
way we now handle out-of-range ordinary transitions.
* NEWS: Document this and other recent fixes.
* localtime.c (tzload): On platforms where time_t is unsigned,
don't mishandle zones that contain leap seconds but no ordinary
transitions after 1970. This problem can be reproduced by running
'zdump -v right/Asia/Dubai' on a platform where time_t is an
unsigned 32-bit integer.
* northamerica (TC): Remove, as it's now a duplicate of the US rules.
Remove obsolescent comment about this.
(America/Grand_Turk): Use US rather than TC.
* zic.c (warnings): New static var.
(warning): Set it here.
(size_product, growalloc, main): Translate diagnostic.
(verror): Don't increment errors here.
(error): Set it here.
(close_file): New function.
(usage, dolink, infile, writezone): Use it.
(usage): Fit diagnostic in output lines better.
(main): Prefer 'return X;' to 'exit(X);'.
(main, infile, mkdirs): Use 'warning' for warnings.
Check for stderr output error.
(dolink, mkdirs): Don't assume gettext preserves errno.
* zdump.c: Include <errno.h>.
(errout): New static var.
(my_localtime) [!TYPECHECK]
(abbrok): Set it.
(close_file): New function.
(usage, main): Use it.
(main): Prefer 'return X;' to 'exit(X);'.
Check for stderr output error.
Although the cast to void in usage like '(void) printf ("Hello")'
may have been helpful decades ago when Lint Was Your Friend,
nowadays such casts are not helpful. The tz code is currently not
consistent about this: sometimes the casts are present, and
sometimes absent. As they make the code harder to read, let's
remove them.
* asctime.c, date.c, ialloc.c, localtime.c, strftime.c, zdump.c, zic.c:
Don't cast calls to 'void'.
* localtime.c [THREAD_SAFE]: Include pthread.h.
(VOLATILE): New macro.
(locallock) [THREAD_SAFE]: New static var.
(lock, unlock): New functions.
(lcl_is_set, gmt_is_set): Now VOLATILE.
(tzsetwall): Move cleaned-up guts to new function tzsetwall_unlocked,
for which this is now merely a locking wrapper.
(tzset): Similarly, for new function tzset_unlocked.
(localsub): Don't set tzname here; that's not thread-safe.
This change can lose information on hosts without TM_ZONE,
but there is no reliable way to fix that in a thread-safe way.
(localtime_tzset): New function, which does proper locking.
(localtime, localtime_r): Use it.
(gmtsub): Do not worry about initializing gmtptr, as that's now
the caller's responsibility.
(gmtime): Reimplement in terms of gmtime_r.
(timegm): Reimplement in terms of timeoff.
(gmtime_r, offtime, mktime, timeoff, time2posix, posix2time):
Lock at start and unlock at end.
* Makefile, NEWS: Document this.
* localtime.c (LOCALTIME_IMPLEMENTATION): New macro.
(time) [time_tz]: Move here from private.h, and make external.
* private.h (sys_time) [time_tz]: Define only if
LOCALTIME_IMPLEMENTATION, so that the code doesn't define an unused
static function sys_time that the compiler might complain about.
(time) [time_tz]: Move to localtime.c.
* NEWS: Document this.
by removing prototypes that aren't needed, and by removing names
of arguments. This will make future changes simpler and easier to
follow.
* NEWS: Document this.
* private.h (offtime, posix2time, time2posix, timeoff) [time_tz]:
Define tz_* replacements for these functions too.
(asctime_r): Move to after time_tz definitions, to keep like
declarations together.
(tzsetwall) [STD_INSPIRED]: Declare if not defined.
(offtime, timeoff, time2posix, posix2time) [STD_INSPIRED]:
Declare if not defined, or if time_tz is defined.
* NEWS: Document this.
* date.c (WTMPX_FILE): Define to _PATH_WTMPX if not already defined
and if _PATH_WTMPX is defined.
(reset): Do not use WTMPX_FILE if it is not defined.
* NEWS: Document this.
This illustrates how 'backzone' can be used to migrate
out-of-scope data out of the database proper.
* africa (Africa/Luanda, Africa/Porto-Novo, Africa/Douala, Africa/Bangui)
(Africa/Kinshasa, Africa/Brazzaville, Africa/Malabo, Africa/Libreville)
(Africa/Niamey): Change these from zones to links (to Africa/Lagos).
Move their old data from here ...
* backzone: ... to here.
* checktab.awk (tztab): Remove special cases for these zones.
* NEWS: Document the above.
* backzone: New file.
* Makefile (DATA): Add backzone.
(check_character_set): Check it.
(posix_packrat): New rule.
(.PHONY): Add it.
* NEWS: Document the above.
Add the product of the longitude difference and the cosine of the
latitude farther from the equator to the distance measure. This
works better for the Congolese test case noted by Alan Barrett in:
http://mm.icann.org/pipermail/tz/2014-July/021229.html
The new heuristic is not perfect, but no heuristic is.
* tzselect.ksh (abs, min): New functions
(convert_coord): Rename local to avoid name clash.
(gcdist): Rename from dist.
(pardist, dist): New functions.
* NEWS: Document this.
(Thanks to Alan Barrett for the suggestion.)
* Makefile (SOURCES): Move workman.sh here, from $(MISC).
(COMMON): Move NEWS here, from $(DOCS).
(tzdata$(VERSION).tar.gz): Move $(MISC) here, from
tzcode$(VERSION).tar.gz.
* NEWS: Document the above.
* Makefile (check_white_space): Rename from check_tabs; all uses
changed. Also check for trailing white space and for oddball
ASCII white space characters.
(Thanks to Stephen Colebourne for a heads-up about the decree.)
* africa (Africa/Luanda, Africa/Bissau):
Change transition date to 1912-01-01.
(Atlantic/Cape_Verde, Africa/Maputo):
Add commentary about the switch.
* asia (Asia/Kolkata): Add commentary about Portuguese India.
* europe (Europe/Lisbon): Change Lisbon Mean Time from -0:36:32
to -0:36:45 (rounded from -0:36:44.68).
(Atlantic/Azores, Atlantic/Madeira):
Change transition date to 1912-01-01.
* NEWS: Document the above.
In particular, this patch is makes the commentary more systematic
about preferring "time zone" to "timezone" except when quoting someone
else or when talking about code that uses "timezone".
This harmless bug was introduced in release 2014f, which distributed
leapseconds.awk in both the code and the data tarballs.
It's code, so it should be in the code tarball.
* Makefile (DATA): Omit leapseconds.awk.
(check_character_set): Omit redundant check of $(LEAP_DEPS).
(Thanks to Vladimir Karpinsky.)
* asia (Asia/Tbilisi, Asia/Samarkand):
* europe (Europe/Riga, Europe/Samara, Asia/Yekaterinburg, Asia/Omsk)
(Asia/Krasnoyarsk, Asia/Irkutsk, Asia/Yakutsk, Asia/Vladivostok):
Match Byalokoz 1919 better.
* NEWS: Document the above.
This should better address concerns about large-scale changes.
We can do the rest of these changes later, as they're not urgent.
* backward (Africa/Asmera, Asia/Saigon): Restore old links.
* checktab.awk (tztab): Handle zones that should probably be
turned into links some day.
* africa (Africa/Luanda, Africa/Porto-Novo, Africa/Gaborone)
(Africa/Bujumbura, Africa/Douala, Africa/Bangui, Indian/Comoro)
(Africa/Kinshasa, Africa/Lubumbashi, Africa/Brazzaville)
(Africa/Djibouti, Africa/Malabo, Africa/Asmara, Africa/Addis_Ababa)
(Africa/Libreville, Africa/Maseru, Indian/Antananarivo)
(Africa/Blantyre, Indian/Mayotte, Africa/Niamey, Africa/Kigali)
(Africa/Mogadishu, Africa/Mbabane, Africa/Dar_es_Salaam)
(Africa/Kampala, Africa/Lusaka, Africa/Harare):
* asia (Asia/Bahrain, Asia/Phnom_Penh, Asia/Kuwait)
(Asia/Vientiane, Asia/Muscat, Asia/Ho_Chi_Minh, Asia/Aden):
* australasia (Pacific/Saipan, Pacific/Midway):
* northamerica, southamerica (America/Antigua, America/Cayman):
New zones, restoring 2014e data. Corresponding links removed.
* NEWS: Document the above.
It allows multiple country codes per zone. Switch code and data to
use the new format, along with the recently-added Crozet Islands entry.
The old zone.tab file is still installed but is deprecated.
The new file uses UTF-8; add commentary saying that iso3166.tab is
planned to change to UTF-8.
* Theory, tzselect.8 (FILES): zone.tab -> time.tab.
* africa (Indian/Alfred_Faure): Remove link.
* antarctica: Mention Possession Island in comments.
* checktab.awk: Add support for checking time.tab.
* iso3166.tab: Mention planned switch to UTF-8.
Update ISO 3166-1 Newsletter from VI-15 to VI-16.
* time.tab: New file.
* tzselect.ksh (zonetabtype): New variable.
Add undocumented -t option, meant for developer testing.
(TZ_ZONE_TABLE): Use zonetabtype.
(output_distances, countries, regions, TZ): Support time.tab format.
(quoted_continents, distance_table, countries, regions)
(TZ, TZ_for_date): Quote shell strings more carefully.
* zone.tab: Refer to time.tab for detailed comments about format.
(Indian/Alfred_Faure): Remove.
* Makefile (TIMETABLES): New macro.
(TABDATA, install, check_tables): Use it.
(check_character_set, check_tables): Check time.tab too.
(check_time_t_alternatives): Use time.tab, not zone.tab.
* NEWS: Document the above.
* northamerica (America/Metlakatla): Use the more-common "PST"
rather than our invented "MeST" for the abbreviation. Our source
called it "Pacific Time", as did a contemporaneous news report,
and I couldn't find contemporaneous use of "MeST" or of
"Metlakatla Time". Cite the news report in the commentary,
and quote some Juneau graffiti.
* zone.tab (America/Resolute): Call it Central Time, not Central
Standard Time, since it observes DST now.
(America/Metlakatla): Call it Pacific Standard Time, not
Metlakatla Time. Mention that it's in Alaska.
* NEWS: Document the above.
Revert zone-to-link changes that changed current time zone
abbreviations. Add a few more changes, for more consistency.
Make several other fixes discovered while researching this.
* africa (Africa/Accra, Antarctica/Syowa):
* asia (Pacific/Palau):
* australasia (Pacific/Funafuti, Pacific/Majuro, Pacific/Wake)
(Pacific/Wallis, Antarctica/DumontDUrville, Pacific/Chuuk)
(Pacific/Pohnpei):
* northamerica (Pacific/Tahiti):
Remove links, as they are now zones again.
* africa (Africa/Accra, Africa/Maputo):
* antarctica (Antarctica/DumontDUrville, Antarctica/Syowa):
* australasia (Pacific/Tahiti, Pacific/Majuro, Pacific/Chuuk)
(Pacific/Pohnpei, Pacific/Palau, Pacific/Funafuti, Pacific/Wake)
(Pacific/Wallis):
Restore zone.
* africa (Africa/Accra): Assume DST starting in 1920, as per Scott
Keltie & Epstein 1920.
* asia (Asia/Bahrain, Asia/Phnom_Penh, Asia/Kuwait, Asia/Vientiane)
(Asia/Muscat, Asia/Ho_Chi_Minh, Asia/Aden):
* northamerica (America/Antigua, America/Cayman):
Change from zone to link, as these are also closely related.
* africa (Africa/Blantyre, Africa/Bujumbura, Africa/Gaborone)
(Africa/Harare, Africa/Kigali, Africa/Lubumbashi, Africa/Lusaka):
Now links to Africa/Maputo, not Africa/Johannesburg.
* asia (Asia/Riyadh): Change standard-time transition from 1950
to 1947-03-14. Add commentary citing Hunt 1961 and CAB 1946.
* australasia (Pacific/Chatham): Assume NZST - 45 min. before 1946.
Add commentary about this.
(Pacific/Pago_Pago): UT-11 from 1911 to 1950.
(WS, Pacific/Apia): Use NZ-style abbreviations.
Switch to "WSST" for Western Samoa standard time before 1950.
Add commentary about Samoa before 1950.
* backward (Africa/Asmera, Africa/Timbuktu, Asia/Saigon):
Redo to avoid link-to-link.
* europe (Hungary, Europe/Bucharest): Several pre-1946
corrections: in 1918 the transition out of DST was on 09-16, not
09-29; in 1919 it was on 11-24, not 09-15; in 1945 it was on
11-01, not 11-03; in 1941 the transition to DST was 04-08 not
04-06 at 02:00; and there was no DST in 1920.
(Poland): Add source for 1919.
* southamerica: Add link for America/Antigua.
* NEWS: Document the above. Add some thanks.
* africa (Africa/Luanda, Africa/Porto-Novo, Africa/Gaborone)
(Africa/Ouagadougou, Africa/Bujumbura, Africa/Douala, Africa/Bangui)
(Indian/Comoro, Africa/Kinshasa, Africa/Lubumbashi, Africa/Brazzaville)
(Africa/Djibouti, Africa/Malabo, Africa/Asmara, Africa/Addis_Ababa)
(Africa/Libreville, Africa/Banjul, Africa/Accra, Africa/Conakry)
(Africa/Maseru, Indian/Antananarivo, Africa/Blantyre, Africa/Bamako)
(Africa/Nouakchott, Indian/Mayotte, Africa/Maputo, Africa/Niamey)
(Africa/Kigali, Atlantic/St_Helena, Africa/Sao_Tome, Africa/Dakar)
(Africa/Freetown, Africa/Mogadishu, Africa/Mbabane, Africa/Dar_es_Salaam)
(Africa/Lome, Africa/Kampala, Africa/Lusaka, Africa/Harare):
* antarctica (Antarctica/Syowa):
Remove zone, replacing each with a link to a region that has had
the same UTC offset since 1970.
* NEWS: Document this.
This is like the 2013-09-02 change, but for the Pacific this time.
* antarctica (Antarctica/DumontDUrville):
* australasia (Pacific/Tahiti, Pacific/Saipan, Pacific/Majuro)
(Pacific/Chuuk, Pacific/Pohnpei, Pacific/Palau, Pacific/Funafuti)
(Pacific/Midway, Pacific/Wake, Pacific/Wallis):
Remove zone, replacing each with a link to a region that has had
the same UTC offset since 1970. This removes data that were
largely invented, either by us or almost surely by Shanks or his
sources.
* asia, australasia, northamerica: Create links accordingly.
* NEWS: Document this.
(Thanks to Vladimir Karpinsky for the Moscow corrections.)
Other corrections are taken from Milne 1899.
* asia (Asia/Tbilisi): Change LMT from 2:59:16 to 2:59:06.
(Asia/Tashkent): Change LMT from 4:37:12 to 4:37:11.
* europe (Europe/Helsinki): Change LMT from 1:39:52 to 1:39:49.
(Europe/Riga): Change LMT from 1:36:24 to 1:36:28.
(Europe/Moscow): Change LMT from 2:30:20 to 2:30:17.
Change 1916/9 time from 2:30:48 to 2:31:19.
(Asia/Yekaterinburg): Change LMT from 4:02:24 to 4:02:33.
(Asia/Irkutsk): Change LMT from 6:57:20 to 6:57:15.
(Asia/Vladivostok): Change LMT from 8:47:44 to 8:47:34.
* zone.tab (Europe/Moscow): Use Kilometer 0 point.
* NEWS: Document this.
My best guess is that the Asia/Tiksi entry is a false alarm,
and that the area hasn't diverged from Yakutsk since 1970.
* europe: Move zone.tab comments to zone.tab.
(Asia/Yakutsk): Move comment for Bulunsky district here,
Remove a comment about a draft Asia/Tiksi zone, containing the
Bulunsky district. We don't have sufficient evidence that it
ever diverged from Yakutsk after 1970.
* zone.tab (RU): Reorder entries to make more geographical sense.
Add comments for draft zones Asia/Chita, Asia/Srednekolymsk.
(Europe/Samara, Asia/Novokuznetsk, Asia/Magadan, Asia/Kamchatka)
(Asia/Anadyr): Mention that the Moscow offset changes 2014-10-26.
* NEWS: Document the above.
* europe (Europe/Kaliningrad, Europe/Moscow, Europe/Simferopol)
(Europe/Volgograd, Asia/Yekaterinburg, Asia/Omsk)
(Asia/Novosibirsk, Asia/Irkutsk, Asia/Yakutsk, Asia/Vladivostok):
The transition this fall is at 02:00 local time, not 02:00 Moscow time.
The newspaper report was wrong. Also, add pointers to the bill and to
Krivenyshev's table. (Thanks to Alexander Krivenyshev.)
(Thanks to Yu-Cheng Chuang.) Also, update time zone abbreviations for
Japan's two time zones used 1896-1937. JWST now stands for Western
Standard Time, and JCST for Central Standard Time (formerly this was CJT).
* asia (Taiwan): Omit DST during 1945.
(Asia/Taipei): Add a transition to JWST on 1896-01-01, then to
JST on 1937-10-01, then to CST on 1945-10-25.
(Asia/Tokyo): Rename CJT to JCST. Transition to JCST was 1937-10-01,
not 1938.
(Asia/Seoul, Asia/Pyongyang): Call UT+9 "JCST" until 1937-01-01,
"JST" thereafter. Assume JCST/JST until Allied takeover after WWII.
* NEWS: Document this.
(Thanks to Alexander Krivenyshev.)
* europe: Document FET separately. Add a comment about
whether Zabajkal'skij kraj needs a separate zone.
(Europe/Kaliningrad, Europe/Moscow, Europe/Simferopol, Europe/Volgograd)
(Asia/Yekaterinburg, Asia/Omsk, Asia/Novosibirsk, Asia/Irkutsk)
(Asia/Yakutsk, and Asia/Vladivostok): Subtract an hour from the
time zone on 2014-10-26 at 02:00 Moscow time.
(Europe/Simferopol): Move to after Europe/Moscow, to simplify
similar maintenance in the future.
* NEWS: Document this.
* NEWS, asia: Document this.
* asia (Asia/Harbin, Asia/Chongqing, Asia/Kashgar): Remove.
These are now links in 'backward'.
(Asia/Shanghai): Change pre-standard-time offset from 8:05:57 to
8:05:43. Change transition to standard time from 1928 to 1901.
(Asia/Urumqi): Remove 1980 transition to UTC+8.
* backward (Asia/Harbin, Asia/Chongqing, Asia/Kashgar): New links.
(Asia/Chungking): Avoid link-to-link.
* zone.tab (Asia/Harbin, Asia/Chongqing, Asia/Kashgar): Remove.
* Theory: Use CST instead of EST in the example, so that it matches
the current database.
* antarctica (Antarctica/Casey): AWST, not WST.
* asia (Asia/Jayapura): ACST, not CST.
* australasia: Prepend "[A]" to "EST" in quote about EST.
* NEWS, australasia (Aus, Australia/Darwin, AW, Australia/Perth)
(Australia/Eucla, AQ, Holiday, Australia/Brisbane, Australia/Lindeman)
(AS, Australia/Adelaide, AT, Australia/Hobart, Australia/Currie, AV)
(Australia/Melbourne, AN, Australia/Sydney, Australia/Broken_Hill)
(LH, Australia/Lord_Howe, Antarctica/Macquarie):
Prefix Australian time zone abbreviations with "A", and switch
from "ST" to "DT" to denote daylight saving time. (Thanks to Ian
Abbott, Russ Allbery, Timothy Arceri, Alan Barrett, Stuart Bishop,
Shaun Bouckaert, Stephen Colebourne, Tobias Conradi, Mark Davis,
Robert Elz, Clive D.W. Feather, Dennis Ferguson, Edwin Groothuis,
Guy Harris, John Hawkinson, John Haxby, Brian Inglis, Paul Koning,
Kevin Lyda, Curtis Manwaring, Alan Mintz, Arthur David Olson, Matt
Paine, David Patte, Tim Parenti, random832, Derick Rethans, SM,
Peter Stagg, Rich Tibbett, Bennett Todd, and Garrett Wollman for
their contributions to this topic.)
Using '\-' to denote ASCII minus has problems in groff output, since
it generates a minus sign in the current font, and if you cut and
paste from the documentation the resulting text won't work. To avoid
the problem, define a string \*- that expands to ASCII minus in a
constant-width font in groff. Also, change some instances of \(mi and
\(pl to use plain \- and +, since we no longer need special fonts for
these. Finally, remove some no-longer-needed instances of "\^" after
italicized words.
* tz-link.htm, NEWS: Mention Moment Timezone, TimezoneJS.Date, Walltime-js,
and Timezone. (Thanks to a heads-up from Matt Johnson.) Also, list
license for timezone-olson.
* zic.8, NEWS: Say that "." and ".." file name
components are not allowed in output file names.
* zic.c (componentcheck, namecheck): Do not allow such
file name components.
* zic.c: Use angle brackets for <sys/stat.h>.
(dolink): Don't try to link from a directory, as this can
cause trouble on some systems when superuser.
(dolink, itsdir): Rewrite to avoid use of 'access', which is
problematic when setuid.
(itsdir): If S_ISDIR is defined, use plain 'stat' and S_ISDIR;
that's more reliable. Return -1 if trouble; all callers changed.
(mkdirs): Simplify by using mkdir-itsdir rather than
itsdir-mkdir-itsdir. Don't assume strerror preserves errno.