summaryrefslogtreecommitdiffstats
path: root/src/timezone/pgtz.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/timezone/pgtz.h')
-rw-r--r--src/timezone/pgtz.h81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/timezone/pgtz.h b/src/timezone/pgtz.h
new file mode 100644
index 0000000..ca01722
--- /dev/null
+++ b/src/timezone/pgtz.h
@@ -0,0 +1,81 @@
+/*-------------------------------------------------------------------------
+ *
+ * pgtz.h
+ * Timezone Library Integration Functions
+ *
+ * Note: this file contains only definitions that are private to the
+ * timezone library. Public definitions are in pgtime.h.
+ *
+ * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ * src/timezone/pgtz.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _PGTZ_H
+#define _PGTZ_H
+
+#include "pgtime.h"
+#include "tzfile.h"
+
+
+#define SMALLEST(a, b) (((a) < (b)) ? (a) : (b))
+#define BIGGEST(a, b) (((a) > (b)) ? (a) : (b))
+
+struct ttinfo
+{ /* time type information */
+ int32 tt_utoff; /* UT offset in seconds */
+ bool tt_isdst; /* used to set tm_isdst */
+ int tt_desigidx; /* abbreviation list index */
+ bool tt_ttisstd; /* transition is std time */
+ bool tt_ttisut; /* transition is UT */
+};
+
+struct lsinfo
+{ /* leap second information */
+ pg_time_t ls_trans; /* transition time */
+ int64 ls_corr; /* correction to apply */
+};
+
+struct state
+{
+ int leapcnt;
+ int timecnt;
+ int typecnt;
+ int charcnt;
+ bool goback;
+ bool goahead;
+ pg_time_t ats[TZ_MAX_TIMES];
+ unsigned char types[TZ_MAX_TIMES];
+ struct ttinfo ttis[TZ_MAX_TYPES];
+ char chars[BIGGEST(BIGGEST(TZ_MAX_CHARS + 1, 4 /* sizeof gmt */ ),
+ (2 * (TZ_STRLEN_MAX + 1)))];
+ struct lsinfo lsis[TZ_MAX_LEAPS];
+
+ /*
+ * The time type to use for early times or if no transitions. It is always
+ * zero for recent tzdb releases. It might be nonzero for data from tzdb
+ * 2018e or earlier.
+ */
+ int defaulttype;
+};
+
+
+struct pg_tz
+{
+ /* TZname contains the canonically-cased name of the timezone */
+ char TZname[TZ_STRLEN_MAX + 1];
+ struct state state;
+};
+
+
+/* in pgtz.c */
+extern int pg_open_tzfile(const char *name, char *canonname);
+
+/* in localtime.c */
+extern int tzload(const char *name, char *canonname, struct state *sp,
+ bool doextend);
+extern bool tzparse(const char *name, struct state *sp, bool lastditch);
+
+#endif /* _PGTZ_H */