Paul Eggert f0133dd86a Port to NetBSD, where, e.g., 'time_t' is wider than 'long'.
I audited the code and fixed as many width-asssumptions as I could
find, including several places where the code assumed that 'time_t'
was no wider than 'long'; this assumption is not true on 32-bit
NetBSD platforms.  This caught every problem that is already fixed
in the NetBSD zic.c, and caught quite a few more.
* Makefile: Add comments re HAVE_DOS_FILE_NAMES and HAVE_INTTYPES_H.
* date.c (checkfinal, netsettime): Don't use 'long' where 'int' will do.
* difftime.c (difftime): Mark with ATTRIBUTE_CONST.
Use uintmax_t, not unsigned long, for the widest unsigned integer type.
Use long double, not double, if time_t is wider than uintmax_t;
this can in theory help on nonstandard platforms, such as GCC
with 64-bit uintmax_t and 128-bit __int128_t.
* localtime.c (struct ttinfo.tt_gmtoff, struct rule.r_time)
(detzcode, getsecs, getoffset, gmtsub, localsub, increment_overflow32)
(normalize_overflow32, time1, time2, timesub, transtime, tzparse)
(time2sub, timeoff, gtime):
* tzfile.h (SECSPERDAY):
* zdump.c (SECSPERDAY):
* zic.c (convert, puttzcode):
Use int_fast32_t, not long, when all we care is that values up to
2**31 can be stored.  This doesn't fix any bugs, but it allows
more opportunity for compiler optimization.
(struct lsinfo.ls_corr, timesub, leapcorr):
Use int_fast64_t, not long, when values up to 2**63 can be stored.
(timesub): Make it clearer when we are truncating 0.5 to 0.
(increment_overflow32): Rename from long_increment_overflow.
All uses changed.
(normalize_overflow32): Rename from long_normalize_overflow.
All uses changed.
* private.h (HAVE_INTTYPES_H, ATTRIBUTE_CONST): New macros.
Include <inttypes.h> if HAVE_INTTYPES_H.
(INT_FAST64_MIN, INT_FAST64_MAX, SCNdFAST64, int_fast32_t, PRIdMAX)
(uintmax_t, PRIuMAX, _Noreturn):
Define to reasonable values if it's an older compiler.
* scheck.c (scheck): Add support for arbitrary formats, such as
those that SCNdFAST64 can expand to, at the price of no longer
supporting weird conversion specs like "%[%]".
* strftime.c (_fmt): Use intmax_t and uintmax_t to format time_t,
not long and unsigned long.
* zdump.c (int_fast32_t, intmax_t, PRIdMAX, SCNdMAX):
Define for pre-C99 compilers, like private.h does.
(delta, yeartot, main): Use intmax_t, not long.
(hunt): Use time_t, not long, since the diff must be nonnegative.
(tformat): Allow for time_t wider than long.
* zic.c (ZIC_MIN, ZIC_MAX, SCNdZIC): New macros.
(OFFSET_STRLEN_MAXIMUM, RULE_STRLEN_MAXIMUM): Remove.
(struct rule): Make r_loyear, r_hiyear, r_tod, r_stdoff, z_gmtoff,
z_stdoff zic_t, not long.
(addtype, gethms, oadd, rpytime, tadd, gmtoffs, corr, inleap)
(stringoffset, stringrule, outzone, addtype, adjleap, rpytime)
(LDAYSPERWEEK):
Use zic_t, not long.
(leapminyear, leapmaxyear, min_year, max_year, rulesub, updateminmax)
(outzone, rpytime):
Use zic_t, not int.
(usage): Now _Noreturn.
(main): Use S_IWGRP, not 'unix', to determine whether to call umask.
(writezone): Omit unnecessary cast.
(mkdirs): Use HAVE_DOS_FILE_NAMES, not 'unix', to determine
whether to parse DOS file anmes.
(eitol): Remove; no longer needed.
2013-05-27 21:26:18 -07:00
2012-10-26 17:37:42 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00
2013-02-20 23:00:40 -08:00
2012-07-18 17:30:38 -07:00
2012-10-26 17:37:42 -07:00
2012-07-25 07:13:46 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 19:21:38 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00
2012-11-11 23:42:00 -08:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00
2012-07-18 17:30:38 -07:00

README for the tz distribution

This file is in the public domain, so clarified as of
2009-05-17 by Arthur David Olson.

"What time is it?" -- Richard Deacon as The King
"Any time you want it to be." -- Frank Baxter as The Scientist
					(from the Bell System film "About Time")

The 1989 update of the time zone package featured

*	POSIXization (including interpretation of POSIX-style TZ environment
	variables, provided by Guy Harris),
*	ANSIfication (including versions of "mktime" and "difftime"),
*	SVIDulation (an "altzone" variable)
*	MACHination (the "gtime" function)
*	corrections to some time zone data (including corrections to the rules
	for Great Britain and New Zealand)
*	reference data from the United States Naval Observatory for folks who
	want to do additional time zones
*	and the 1989 data for Saudi Arabia.

(Since this code will be treated as "part of the implementation" in some places
and as "part of the application" in others, there's no good way to name
functions, such as timegm, that are not part of the proposed ANSI C standard;
such functions have kept their old, underscore-free names in this update.)

And the "dysize" function has disappeared; it was present to allow compilation
of the "date" command on old BSD systems, and a version of "date" is now
provided in the package.  The "date" command is not created when you "make all"
since it may lack options provided by the version distributed with your
operating system, or may not interact with the system in the same way the
native version does.

Since POSIX frowns on correct leap second handling, the default behavior of
the "zic" command (in the absence of a "-L" option) has been changed to omit
leap second information from its output files.

Here is a recipe for acquiring, building, installing, and testing the
tz distribution on a GNU/Linux or similar host.

	mkdir tz
	cd tz
	wget --retr-symlinks 'ftp://ftp.iana.org/tz/tz*-latest.tar.gz'
	gzip -dc tzcode-latest.tar.gz | tar -xf -
	gzip -dc tzdata-latest.tar.gz | tar -xf -

Be sure to read the comments in "Makefile" and make any changes needed
to make things right for your system, especially if you are using some
platform other than GNU/Linux.  Then run the following commands,
substituting your desired installation directory for "$HOME/tzdir":

	make TOPDIR=$HOME/tzdir install
	$HOME/tzdir/etc/zdump -v America/Los_Angeles

To use the new functions, use a "-ltz" option when compiling or linking.

Historical local time information has been included here to:

*	provide a compendium of data about the history of civil time
	that is useful even if the data are not 100% accurate;

*	give an idea of the variety of local time rules that have
	existed in the past and thus an idea of the variety that may be
	expected in the future;

*	provide a test of the generality of the local time rule description
	system.

The information in the time zone data files is by no means authoritative;
the files currently do not even attempt to cover all time stamps before
1970, and there are undoubtedly errors even for time stamps since 1970.
If you know that the rules are different from those in a file, by all means
feel free to change file (and please send the changed version to
tz@iana.org for use in the future).  Europeans take note!

Thanks to these Timezone Caballeros who've made major contributions to the
time conversion package:  Keith Bostic; Bob Devine; Paul Eggert; Robert Elz;
Guy Harris; Mark Horton; John Mackin; and Bradley White.  Thanks also to
Michael Bloom, Art Neilson, Stephen Prince, John Sovereign, and Frank Wales
for testing work, and to Gwillim Law for checking local mean time data.
None of them are responsible for remaining errors.

Look in <ftp://ftp.iana.org/tz/releases/>
for updated versions of these files.

Please send comments or information to tz@iana.org.

Postscript:  The README above is largely unmodified (aside from details
of mailing list and ftp archive addresses) from that prepared many years
ago by Arthur David Olson, to whom the timezone community owes the
greatest debt of all.  Arthur is not currently maintaining this data or
code (though he remains involved).
S
Description
Experimental time zone database and code for AmigaOS
Readme
9.3 MiB
Languages
C 97.7%
Makefile 1.9%
C++ 0.4%