]> granicus.if.org Git - postgresql/blob - src/timezone/pgtz.h
Phase 2 of pgindent updates.
[postgresql] / src / timezone / pgtz.h
1 /*-------------------------------------------------------------------------
2  *
3  * pgtz.h
4  *        Timezone Library Integration Functions
5  *
6  * Note: this file contains only definitions that are private to the
7  * timezone library.  Public definitions are in pgtime.h.
8  *
9  * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
10  *
11  * IDENTIFICATION
12  *        src/timezone/pgtz.h
13  *
14  *-------------------------------------------------------------------------
15  */
16 #ifndef _PGTZ_H
17 #define _PGTZ_H
18
19 #include "pgtime.h"
20 #include "tzfile.h"
21
22
23 #define SMALLEST(a, b)  (((a) < (b)) ? (a) : (b))
24 #define BIGGEST(a, b)   (((a) > (b)) ? (a) : (b))
25
26 struct ttinfo
27 {                                                               /* time type information */
28         int32           tt_gmtoff;              /* UT offset in seconds */
29         bool            tt_isdst;               /* used to set tm_isdst */
30         int                     tt_abbrind;             /* abbreviation list index */
31         bool            tt_ttisstd;             /* transition is std time */
32         bool            tt_ttisgmt;             /* transition is UT */
33 };
34
35 struct lsinfo
36 {                                                               /* leap second information */
37         pg_time_t       ls_trans;               /* transition time */
38         int64           ls_corr;                /* correction to apply */
39 };
40
41 struct state
42 {
43         int                     leapcnt;
44         int                     timecnt;
45         int                     typecnt;
46         int                     charcnt;
47         bool            goback;
48         bool            goahead;
49         pg_time_t       ats[TZ_MAX_TIMES];
50         unsigned char types[TZ_MAX_TIMES];
51         struct ttinfo ttis[TZ_MAX_TYPES];
52         char            chars[BIGGEST(BIGGEST(TZ_MAX_CHARS + 1, 3 /* sizeof gmt */ ),
53                                                           (2 * (TZ_STRLEN_MAX + 1)))];
54         struct lsinfo lsis[TZ_MAX_LEAPS];
55         int                     defaulttype;    /* for early times or if no transitions */
56 };
57
58
59 struct pg_tz
60 {
61         /* TZname contains the canonically-cased name of the timezone */
62         char            TZname[TZ_STRLEN_MAX + 1];
63         struct state state;
64 };
65
66
67 /* in pgtz.c */
68 extern int      pg_open_tzfile(const char *name, char *canonname);
69
70 /* in localtime.c */
71 extern int tzload(const char *name, char *canonname, struct state *sp,
72            bool doextend);
73 extern bool tzparse(const char *name, struct state *sp, bool lastditch);
74
75 #endif                                                  /* _PGTZ_H */