aboutsummaryrefslogtreecommitdiff
path: root/lib/libspl/include/sys/tzfile.h
blob: e30e7566366ed1367b134e93a5a9f38199130f4f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

/*
 *	from Arthur Olson's 6.1
 */

#ifndef _LIBSPL_SYS_TZFILE_H
#define	_LIBSPL_SYS_TZFILE_H

#ifdef	__cplusplus
extern "C" {
#endif

/*
 * Information about time zone files.
 */

#define	TZDIR	"/usr/share/lib/zoneinfo" /* Time zone object file directory */

#define	TZDEFAULT	(getenv("TZ"))

#define	TZDEFRULES	"posixrules"

/*
 * Each file begins with. . .
 */

struct tzhead {
	char	tzh_reserved[24];	/* reserved for future use */
	char	tzh_ttisstdcnt[4];	/* coded number of trans. time flags */
	char	tzh_leapcnt[4];		/* coded number of leap seconds */
	char	tzh_timecnt[4];		/* coded number of transition times */
	char	tzh_typecnt[4];		/* coded number of local time types */
	char	tzh_charcnt[4];		/* coded number of abbr. chars */
};

/*
 * . . .followed by. . .
 *
 *	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 (unsigned char)	used to set tm_isdst
 *		one (unsigned char)	that's an abbreviation list index
 *	tzh_charcnt (char)s		'\0'-terminated zone abbreviations
 *	tzh_leapcnt repetitions of
 *		one (char [4])		coded leap second transition times
 *		one (char [4])		total correction after above
 *	tzh_ttisstdcnt (char)s		indexed by type; if TRUE, transition
 *					time is standard time, if FALSE,
 *					transition time is wall clock time
 *					if absent, transition times are
 *					assumed to be wall clock time
 */

/*
 * In the current implementation, "tzset()" refuses to deal with files that
 * exceed any of the limits below.
 */

/*
 * The TZ_MAX_TIMES value below is enough to handle a bit more than a
 * year's worth of solar time (corrected daily to the nearest second) or
 * 138 years of Pacific Presidential Election time
 * (where there are three time zone transitions every fourth year).
 */
#define	TZ_MAX_TIMES	370

#define	TZ_MAX_TYPES	256	/* Limited by what (unsigned char)'s can hold */

#define	TZ_MAX_CHARS	50	/* Maximum number of abbreviation characters */

#define	TZ_MAX_LEAPS	50	/* Maximum number of leap second corrections */

#define	SECSPERMIN	60
#define	MINSPERHOUR	60
#define	HOURSPERDAY	24
#define	DAYSPERWEEK	7
#define	DAYSPERNYEAR	365
#define	DAYSPERLYEAR	366
#define	SECSPERHOUR	(SECSPERMIN * MINSPERHOUR)
#define	SECSPERDAY	((long)SECSPERHOUR * HOURSPERDAY)
#define	MONSPERYEAR	12

#define	TM_SUNDAY	0
#define	TM_MONDAY	1
#define	TM_TUESDAY	2
#define	TM_WEDNESDAY	3
#define	TM_THURSDAY	4
#define	TM_FRIDAY	5
#define	TM_SATURDAY	6

#define	TM_JANUARY	0
#define	TM_FEBRUARY	1
#define	TM_MARCH	2
#define	TM_APRIL	3
#define	TM_MAY		4
#define	TM_JUNE		5
#define	TM_JULY		6
#define	TM_AUGUST	7
#define	TM_SEPTEMBER	8
#define	TM_OCTOBER	9
#define	TM_NOVEMBER	10
#define	TM_DECEMBER	11

#define	TM_YEAR_BASE	1900

#define	EPOCH_YEAR	1970
#define	EPOCH_WDAY	TM_THURSDAY

/*
 * Accurate only for the past couple of centuries;
 * that will probably do.
 */

#define	isleap(y) (((y) % 4) == 0 && ((y) % 100) != 0 || ((y) % 400) == 0)

/*
 * Use of the underscored variants may cause problems if you move your code to
 * certain System-V-based systems; for maximum portability, use the
 * underscore-free variants.  The underscored variants are provided for
 * backward compatibility only; they may disappear from future versions of
 * this file.
 */

#define	SECS_PER_MIN	SECSPERMIN
#define	MINS_PER_HOUR	MINSPERHOUR
#define	HOURS_PER_DAY	HOURSPERDAY
#define	DAYS_PER_WEEK	DAYSPERWEEK
#define	DAYS_PER_NYEAR	DAYSPERNYEAR
#define	DAYS_PER_LYEAR	DAYSPERLYEAR
#define	SECS_PER_HOUR	SECSPERHOUR
#define	SECS_PER_DAY	SECSPERDAY
#define	MONS_PER_YEAR	MONSPERYEAR

#ifdef	__cplusplus
}
#endif

#endif /* _LIBSPL_SYS_TZFILE_H */