1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-04 12:52:15 +00:00

Merge from vendor branch: timezone file structure changes and doco.

Fix localtime.c to deal with new magic number field.

Obtained from: ftp://elsie.nci.nih.gov/pub/tzcode1999a.tar.gz
This commit is contained in:
Garrett Wollman 1999-01-21 17:22:59 +00:00
parent 7ed6908ffd
commit 6efae010ca
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=42989
3 changed files with 45 additions and 25 deletions

View File

@ -327,7 +327,7 @@ register struct state * const sp;
if (close(fid) != 0)
return -1;
p = buf;
p += sizeof tzhp->tzh_reserved;
p += (sizeof tzhp->tzh_magic) + (sizeof tzhp->tzh_reserved);
ttisstdcnt = (int) detzcode(p);
p += 4;
ttisgmtcnt = (int) detzcode(p);

View File

@ -1,15 +1,20 @@
.\" $Id: tzfile.5,v 1.6 1999/01/20 18:54:12 wollman Exp $
.Dd September 13, 1994
.Dt TZFILE 5
.Os FreeBSD 2.0
.Os FreeBSD 3.0
.Sh NAME
.Nm tzfile
.Nd timezone information
.Sh SYNOPSIS
.Fd #include <tzfile.h>
.Fd #include "/usr/src/lib/libc/stdtime/tzfile.h"
.Sh DESCRIPTION
The time zone information files used by
.Xr tzset 3
begin with bytes reserved for future use,
begin with the magic characters
.Dq Li TZif
to identify them as
time zone information files,
followed by sixteen bytes reserved for future use,
followed by four four-byte values
written in a ``standard'' byte order
(the high-order byte of the value is written first).
@ -17,23 +22,25 @@ These values are,
in order:
.Pp
.Bl -tag -compact -width tzh_ttisstdcnt
.It Li tzh_ttisstdcnt
.It Va tzh_ttisgmtcnt
The number of UTC/local indicators stored in the file.
.It Va tzh_ttisstdcnt
The number of standard/wall indicators stored in the file.
.It Li tzh_leapcnt
.It Va tzh_leapcnt
The number of leap seconds for which data is stored in the file.
.It Li tzh_timecnt
.It Va tzh_timecnt
The number of ``transition times'' for which data is stored
in the file.
.It Li tzh_typecnt
.It Va tzh_typecnt
The number of ``local time types'' for which data is stored
in the file (must not be zero).
.It Li tzh_charcnt
.It Va tzh_charcnt
The number of characters of ``time zone abbreviation strings''
stored in the file.
.El
.Pp
The above header is followed by
.Li tzh_timecnt
.Va tzh_timecnt
four-byte values of type
.Fa long ,
sorted in ascending order.
@ -42,7 +49,7 @@ Each is used as a transition time (as returned by
.Xr time 3 )
at which the rules for computing local time change.
Next come
.Li tzh_timecnt
.Va tzh_timecnt
one-byte values of type
.Fa "unsigned char" ;
each one tells which of the different types of ``local time'' types
@ -61,30 +68,30 @@ struct ttinfo {
.Ed
.Pp
Each structure is written as a four-byte value for
.Li tt_gmtoff
.Va tt_gmtoff
of type
.Fa long ,
in a standard byte order, followed by a one-byte value for
.Li tt_isdst
.Va tt_isdst
and a one-byte value for
.Li tt_abbrind .
.Va tt_abbrind .
In each structure,
.Li tt_gmtoff
gives the number of seconds to be added to GMT,
.Va tt_gmtoff
gives the number of seconds to be added to UTC,
.Li tt_isdst
tells whether
.Li tm_isdst
should be set by
.Xr localtime 3
and
.Li tt_abbrind
.Va tt_abbrind
serves as an index into the array of time zone abbreviation characters
that follow the
.Li ttinfo
structure(s) in the file.
.Pp
Then there are
.Li tzh_leapcnt
.Va tzh_leapcnt
pairs of four-byte values, written in standard byte order;
the first value of each pair gives the time
(as returned by
@ -95,14 +102,22 @@ the second gives the
number of leap seconds to be applied after the given time.
The pairs of values are sorted in ascending order by time.
.Pp
Finally there are
.Li tzh_ttisstdcnt
Then there are
.Va tzh_ttisstdcnt
standard/wall indicators, each stored as a one-byte value;
they tell whether the transition times associated with local time types
were specified as standard time or wall clock time,
and are used when a time zone file is used in handling POSIX-style
time zone environment variables.
.Pp
Finally there are
.Va tzh_ttisgmtcnt
UTC/local indicators, each stored as a one-byte value;
they tell whether the transition times associated with local time types
were specified as UTC or local time,
and are used when a time zone file is used in handling POSIX-style
time zone environment variables.
.Pp
.Nm localtime
uses the first standard-time
.Li ttinfo
@ -119,3 +134,5 @@ in the file.
.Xr time2posix 3 ,
.Xr zic 8
.\" @(#)tzfile.5 7.2
.\" This file is in the public domain, so clarified as of
.\" 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).

View File

@ -4,7 +4,7 @@
/*
** This file is in the public domain, so clarified as of
** June 5, 1996 by Arthur David Olson (arthur_david_olson@nih.gov).
** 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
*/
/*
@ -22,7 +22,7 @@
#ifndef lint
#ifndef NOID
/*
static char tzfilehid[] = "@(#)tzfile.h 7.8";
static char tzfilehid[] = "@(#)tzfile.h 7.14";
*/
#endif /* !defined NOID */
#endif /* !defined lint */
@ -47,8 +47,11 @@ static char tzfilehid[] = "@(#)tzfile.h 7.8";
** Each file begins with. . .
*/
#define TZ_MAGIC "TZif"
struct tzhead {
char tzh_reserved[20]; /* reserved for future use */
char tzh_magic[4]; /* TZ_MAGIC */
char tzh_reserved[16]; /* reserved for future use */
char tzh_ttisgmtcnt[4]; /* coded number of trans. time flags */
char tzh_ttisstdcnt[4]; /* coded number of trans. time flags */
char tzh_leapcnt[4]; /* coded number of leap seconds */
@ -63,7 +66,7 @@ struct tzhead {
** tzh_timecnt (char [4])s coded transition times a la time(2)
** tzh_timecnt (unsigned char)s types of local time starting at above
** tzh_typecnt repetitions of
** one (char [4]) coded GMT offset in seconds
** one (char [4]) coded UTC offset in seconds
** one (unsigned char) used to set tm_isdst
** one (unsigned char) that's an abbreviation list index
** tzh_charcnt (char)s '\0'-terminated zone abbreviations
@ -76,7 +79,7 @@ struct tzhead {
** if absent, transition times are
** assumed to be wall clock time
** tzh_ttisgmtcnt (char)s indexed by type; if TRUE, transition
** time is GMT, if FALSE,
** time is UTC, if FALSE,
** transition time is local time
** if absent, transition times are
** assumed to be local time