1 #ifndef TZFILE_INCLUDED 2 #define TZFILE_INCLUDED 3 4 /* Copyright (c) 2004, 2006, 2007 MySQL AB, 2009 Sun Microsystems, Inc. 5 Use is subject to license terms. 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License, version 2.0, 9 as published by the Free Software Foundation. 10 11 This program is also distributed with certain software (including 12 but not limited to OpenSSL) that is licensed under separate terms, 13 as designated in a particular file or component or in included license 14 documentation. The authors of MySQL hereby grant you an additional 15 permission to link the program and your derivative works with the 16 separately licensed software that they have included with MySQL. 17 18 This program is distributed in the hope that it will be useful, 19 but WITHOUT ANY WARRANTY; without even the implied warranty of 20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 21 GNU General Public License, version 2.0, for more details. 22 23 You should have received a copy of the GNU General Public License 24 along with this program; if not, write to the Free Software Foundation, 25 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ 26 27 /* 28 This file is based on public domain code from ftp://elsie.ncih.nist.gov/ 29 Initial source code is in the public domain, so clarified as of 30 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov). 31 */ 32 33 /* 34 Information about time zone files. 35 */ 36 37 #ifndef TZDIR 38 #define TZDIR "/usr/share/zoneinfo" /* Time zone object file directory */ 39 #endif /* !defined TZDIR */ 40 41 /* 42 Each file begins with. . . 43 */ 44 45 #define TZ_MAGIC "TZif" 46 47 struct tzhead { 48 uchar tzh_magic[4]; /* TZ_MAGIC */ 49 uchar tzh_reserved[16]; /* reserved for future use */ 50 uchar tzh_ttisgmtcnt[4]; /* coded number of trans. time flags */ 51 uchar tzh_ttisstdcnt[4]; /* coded number of trans. time flags */ 52 uchar tzh_leapcnt[4]; /* coded number of leap seconds */ 53 uchar tzh_timecnt[4]; /* coded number of transition times */ 54 uchar tzh_typecnt[4]; /* coded number of local time types */ 55 uchar tzh_charcnt[4]; /* coded number of abbr. chars */ 56 }; 57 58 /* 59 . . .followed by. . . 60 61 tzh_timecnt (char [4])s coded transition times a la time(2) 62 tzh_timecnt (unsigned char)s types of local time starting at above 63 tzh_typecnt repetitions of 64 one (char [4]) coded UTC offset in seconds 65 one (unsigned char) used to set tm_isdst 66 one (unsigned char) that's an abbreviation list index 67 tzh_charcnt (char)s '\0'-terminated zone abbreviations 68 tzh_leapcnt repetitions of 69 one (char [4]) coded leap second transition times 70 one (char [4]) total correction after above 71 tzh_ttisstdcnt (char)s indexed by type; if TRUE, transition 72 time is standard time, if FALSE, 73 transition time is wall clock time 74 if absent, transition times are 75 assumed to be wall clock time 76 tzh_ttisgmtcnt (char)s indexed by type; if TRUE, transition 77 time is UTC, if FALSE, 78 transition time is local time 79 if absent, transition times are 80 assumed to be local time 81 */ 82 83 /* 84 In the current implementation, we refuse to deal with files that 85 exceed any of the limits below. 86 */ 87 88 #ifndef TZ_MAX_TIMES 89 /* 90 The TZ_MAX_TIMES value below is enough to handle a bit more than a 91 year's worth of solar time (corrected daily to the nearest second) or 92 138 years of Pacific Presidential Election time 93 (where there are three time zone transitions every fourth year). 94 */ 95 #define TZ_MAX_TIMES 370 96 #endif /* !defined TZ_MAX_TIMES */ 97 98 #ifndef TZ_MAX_TYPES 99 #ifdef SOLAR 100 #define TZ_MAX_TYPES 256 /* Limited by what (unsigned char)'s can hold */ 101 #else 102 /* 103 Must be at least 14 for Europe/Riga as of Jan 12 1995, 104 as noted by Earl Chew <earl@hpato.aus.hp.com>. 105 */ 106 #define TZ_MAX_TYPES 20 /* Maximum number of local time types */ 107 #endif /* defined SOLAR */ 108 #endif /* !defined TZ_MAX_TYPES */ 109 110 #ifndef TZ_MAX_CHARS 111 #define TZ_MAX_CHARS 50 /* Maximum number of abbreviation characters */ 112 /* (limited by what unsigned chars can hold) */ 113 #endif /* !defined TZ_MAX_CHARS */ 114 115 #ifndef TZ_MAX_LEAPS 116 #define TZ_MAX_LEAPS 50 /* Maximum number of leap second corrections */ 117 #endif /* !defined TZ_MAX_LEAPS */ 118 119 #ifndef TZ_MAX_REV_RANGES 120 #ifdef SOLAR 121 /* Solar (Asia/RiyadhXX) zones need significantly bigger TZ_MAX_REV_RANGES */ 122 #define TZ_MAX_REV_RANGES (TZ_MAX_TIMES*2+TZ_MAX_LEAPS*2+2) 123 #else 124 #define TZ_MAX_REV_RANGES (TZ_MAX_TIMES+TZ_MAX_LEAPS+2) 125 #endif 126 #endif 127 128 #define SECS_PER_MIN 60 129 #define MINS_PER_HOUR 60 130 #define HOURS_PER_DAY 24 131 #define DAYS_PER_WEEK 7 132 #define DAYS_PER_NYEAR 365 133 #define DAYS_PER_LYEAR 366 134 #define SECS_PER_HOUR (SECS_PER_MIN * MINS_PER_HOUR) 135 #define SECS_PER_DAY ((long) SECS_PER_HOUR * HOURS_PER_DAY) 136 #define MONS_PER_YEAR 12 137 138 #define TM_YEAR_BASE 1900 139 140 #define EPOCH_YEAR 1970 141 142 /* 143 Accurate only for the past couple of centuries, 144 that will probably do. 145 */ 146 147 #define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0)) 148 149 #endif 150