PostgreSQL Source Code  git master
pgtz.h
Go to the documentation of this file.
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-2024, 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_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 
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;
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  */
62 };
63 
64 
65 struct 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 */
74 extern int pg_open_tzfile(const char *name, char *canonname);
75 
76 /* in localtime.c */
77 extern int tzload(const char *name, char *canonname, struct state *sp,
78  bool doextend);
79 extern bool tzparse(const char *name, struct state *sp, bool lastditch);
80 
81 #endif /* _PGTZ_H */
signed int int32
Definition: c.h:497
#define TZ_STRLEN_MAX
Definition: pgtime.h:54
int64 pg_time_t
Definition: pgtime.h:23
int tzload(const char *name, char *canonname, struct state *sp, bool doextend)
Definition: localtime.c:586
#define BIGGEST(a, b)
Definition: pgtz.h:24
int pg_open_tzfile(const char *name, char *canonname)
Definition: findtimezone.c:65
bool tzparse(const char *name, struct state *sp, bool lastditch)
Definition: localtime.c:936
Definition: pgtz.h:36
pg_time_t ls_trans
Definition: pgtz.h:37
int64 ls_corr
Definition: pgtz.h:38
Definition: pgtz.h:66
char TZname[TZ_STRLEN_MAX+1]
Definition: pgtz.h:68
Definition: regguts.h:323
int timecnt
Definition: pgtz.h:44
bool goback
Definition: pgtz.h:47
struct ttinfo ttis[TZ_MAX_TYPES]
Definition: pgtz.h:51
int charcnt
Definition: pgtz.h:46
char chars[BIGGEST(BIGGEST(TZ_MAX_CHARS+1, 4),(2 *(TZ_STRLEN_MAX+1)))]
Definition: pgtz.h:53
int typecnt
Definition: pgtz.h:45
int leapcnt
Definition: pgtz.h:43
pg_time_t ats[TZ_MAX_TIMES]
Definition: pgtz.h:49
struct lsinfo lsis[TZ_MAX_LEAPS]
Definition: pgtz.h:54
unsigned char types[TZ_MAX_TIMES]
Definition: pgtz.h:50
int defaulttype
Definition: pgtz.h:61
bool goahead
Definition: pgtz.h:48
Definition: pgtz.h:27
int32 tt_utoff
Definition: pgtz.h:28
bool tt_ttisstd
Definition: pgtz.h:31
int tt_desigidx
Definition: pgtz.h:30
bool tt_isdst
Definition: pgtz.h:29
bool tt_ttisut
Definition: pgtz.h:32
#define TZ_MAX_CHARS
Definition: tzfile.h:105
#define TZ_MAX_TYPES
Definition: tzfile.h:103
#define TZ_MAX_TIMES
Definition: tzfile.h:100
#define TZ_MAX_LEAPS
Definition: tzfile.h:108
const char * name