Commit 12bfb778 authored by Tom Lane's avatar Tom Lane

Sync our copy of the timezone library with IANA release tzcode2018f.

About half of this is purely cosmetic changes to reduce the diff between
our code and theirs, like inserting "const" markers where they have them.

The other half is tracking actual code changes in zic.c and localtime.c.
I don't think any of these represent near-term compatibility hazards, but
it seems best to stay up to date.

I also fixed longstanding bugs in our code for producing the
known_abbrevs.txt list, which by chance hadn't been exposed before,
but which resulted in some garbage output after applying the upstream
changes in zic.c.  Notably, because upstream removed their old phony
transitions at the Big Bang, it's now necessary to cope with TZif files
containing no DST transition times at all.
parent 13877d30
......@@ -55,7 +55,7 @@ match properly on the old version.
Time Zone code
==============
The code in this directory is currently synced with tzcode release 2018e.
The code in this directory is currently synced with tzcode release 2018f.
There are many cosmetic (and not so cosmetic) differences from the
original tzcode library, but diffs in the upstream version should usually
be propagated to our version. Here are some notes about that.
......
This diff is collapsed.
......@@ -49,10 +49,16 @@ struct state
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, 3 /* sizeof gmt */ ),
char chars[BIGGEST(BIGGEST(TZ_MAX_CHARS + 1, 4 /* sizeof gmt */ ),
(2 * (TZ_STRLEN_MAX + 1)))];
struct lsinfo lsis[TZ_MAX_LEAPS];
int defaulttype; /* for early times or if no transitions */
/*
* 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;
};
......
/* Private header for tzdb code. */
#ifndef PRIVATE_H
#define PRIVATE_H
/*
......
/* Convert a broken-down timestamp to a string. */
/* Convert a broken-down timestamp to a string. */
/*
* Copyright 1989 The Regents of the University of California.
......@@ -115,7 +115,7 @@ static char *_add(const char *, char *, const char *);
static char *_conv(int, const char *, char *, const char *);
static char *_fmt(const char *, const struct pg_tm *, char *, const char *,
enum warn *);
static char *_yconv(int, int, bool, bool, char *, const char *);
static char *_yconv(int, int, bool, bool, char *, char const *);
size_t
......@@ -441,7 +441,8 @@ _fmt(const char *format, const struct pg_tm *t, char *pt,
/*
* C99 and later say that %Z must be replaced by the empty
* string if the time zone is not determinable.
* string if the time zone abbreviation is not
* determinable.
*/
continue;
case 'z':
......@@ -519,6 +520,7 @@ _add(const char *str, char *pt, const char *ptlim)
* same output as %Y, and that %Y contains at least 4 bytes,
* with more only if necessary.
*/
static char *
_yconv(int a, int b, bool convert_top, bool convert_yy,
char *pt, const char *ptlim)
......@@ -526,7 +528,7 @@ _yconv(int a, int b, bool convert_top, bool convert_yy,
int lead;
int trail;
#define DIVISOR 100
#define DIVISOR 100
trail = a % DIVISOR + b % DIVISOR;
lead = a / DIVISOR + b / DIVISOR + trail / DIVISOR;
trail %= DIVISOR;
......
/* Layout and location of TZif files. */
#ifndef TZFILE_H
#define TZFILE_H
/*
......@@ -21,14 +24,14 @@
* Information about time zone files.
*/
#define TZDEFAULT "localtime"
#define TZDEFAULT "/etc/localtime"
#define TZDEFRULES "posixrules"
/*
* Each file begins with. . .
*/
#define TZ_MAGIC "TZif"
#define TZ_MAGIC "TZif"
struct tzhead
{
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment