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-2019, 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
26struct ttinfo
27{ /* time type information */
28 int32 tt_utoff; /* UT offset in seconds */
29 bool tt_isdst; /* used to set tm_isdst */
30 int tt_desigidx; /* abbreviation list index */
31 bool tt_ttisstd; /* transition is std time */
32 bool tt_ttisut; /* transition is UT */
33};
34
35struct lsinfo
36{ /* leap second information */
37 pg_time_t ls_trans; /* transition time */
38 int64 ls_corr; /* correction to apply */
39};
40
41struct 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, 4 /* sizeof gmt */ ),
53 (2 * (TZ_STRLEN_MAX + 1)))];
54 struct lsinfo lsis[TZ_MAX_LEAPS];
55
56 /*
57 * The time type to use for early times or if no transitions. It is always
58 * zero for recent tzdb releases. It might be nonzero for data from tzdb
59 * 2018e or earlier.
60 */
61 int defaulttype;
62};
63
64
65struct pg_tz
66{
67 /* TZname contains the canonically-cased name of the timezone */
68 char TZname[TZ_STRLEN_MAX + 1];
69 struct state state;
70};
71
72
73/* in pgtz.c */
74extern int pg_open_tzfile(const char *name, char *canonname);
75
76/* in localtime.c */
77extern int tzload(const char *name, char *canonname, struct state *sp,
78 bool doextend);
79extern bool tzparse(const char *name, struct state *sp, bool lastditch);
80
81#endif /* _PGTZ_H */
82