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-2025, 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{
47 bool goback;
48 bool goahead;
50 unsigned char types[TZ_MAX_TIMES];
52 char chars[BIGGEST(BIGGEST(TZ_MAX_CHARS + 1, 4 /* sizeof gmt */ ),
53 (2 * (TZ_STRLEN_MAX + 1)))];
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
65struct pg_tz
66{
67 /* TZname contains the canonically-cased name of the timezone */
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 */
int64_t int64
Definition: c.h:485
int32_t int32
Definition: c.h:484
#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