From eb63a8058f661b6501ad66d148ede682ec3c7ca9 Mon Sep 17 00:00:00 2001 From: wollman Date: Thu, 21 Jan 1999 17:22:59 +0000 Subject: [PATCH] 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 --- lib/libc/stdtime/localtime.c | 2 +- lib/libc/stdtime/tzfile.5 | 55 +++++++++++++++++++++++------------- lib/libc/stdtime/tzfile.h | 13 +++++---- 3 files changed, 45 insertions(+), 25 deletions(-) diff --git a/lib/libc/stdtime/localtime.c b/lib/libc/stdtime/localtime.c index 9e130bd560e2..66033365874d 100644 --- a/lib/libc/stdtime/localtime.c +++ b/lib/libc/stdtime/localtime.c @@ -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); diff --git a/lib/libc/stdtime/tzfile.5 b/lib/libc/stdtime/tzfile.5 index 880e3afe7253..946ae4807272 100644 --- a/lib/libc/stdtime/tzfile.5 +++ b/lib/libc/stdtime/tzfile.5 @@ -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 +.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). diff --git a/lib/libc/stdtime/tzfile.h b/lib/libc/stdtime/tzfile.h index 58cdc3de51cc..c1b27ea9409b 100644 --- a/lib/libc/stdtime/tzfile.h +++ b/lib/libc/stdtime/tzfile.h @@ -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