diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/timezone/Makefile | 8 | ||||
-rw-r--r-- | src/timezone/README | 5 | ||||
-rw-r--r-- | src/timezone/localtime.c | 58 | ||||
-rw-r--r-- | src/tools/msvc/Install.pm | 8 |
4 files changed, 15 insertions, 64 deletions
diff --git a/src/timezone/Makefile b/src/timezone/Makefile index bf23ac9da97..715b63cee0c 100644 --- a/src/timezone/Makefile +++ b/src/timezone/Makefile @@ -29,10 +29,6 @@ ZICOBJS = \ # we now distribute the timezone data as a single file TZDATAFILES = $(srcdir)/data/tzdata.zi -# which zone should determine the DST rules (not the specific UTC offset!) -# for POSIX-style timezone specs -POSIXRULES = US/Eastern - # any custom options you might want to pass to zic while installing data files ZIC_OPTIONS = @@ -60,13 +56,13 @@ zic: $(ZICOBJS) | submake-libpgport install: all installdirs ifeq (,$(with_system_tzdata)) - $(ZIC) -d '$(DESTDIR)$(datadir)/timezone' -p '$(POSIXRULES)' -b slim $(ZIC_OPTIONS) $(TZDATAFILES) + $(ZIC) -d '$(DESTDIR)$(datadir)/timezone' -b slim $(ZIC_OPTIONS) $(TZDATAFILES) endif $(MAKE) -C tznames $@ abbrevs.txt: zic $(TZDATAFILES) mkdir junkdir - $(ZIC) -P -d junkdir -p '$(POSIXRULES)' $(TZDATAFILES) | LANG=C sort | uniq >abbrevs.txt + $(ZIC) -P -d junkdir $(TZDATAFILES) | LANG=C sort | uniq >abbrevs.txt rm -rf junkdir installdirs: diff --git a/src/timezone/README b/src/timezone/README index 9939aa6dd7e..8af44449329 100644 --- a/src/timezone/README +++ b/src/timezone/README @@ -93,10 +93,7 @@ in some other files where we have variables named that. slightly modified the API of the former, in part because it now relies on our own pg_open_tzfile() rather than opening files for itself. -* tzparse() is adjusted to avoid loading the TZDEFRULES zone unless -really necessary, and to ignore any leap-second data it may supply. -We also cache the result of loading the TZDEFRULES zone, so that -that's not repeated more than once per process. +* tzparse() is adjusted to never try to load the TZDEFRULES zone. * There's a fair amount of code we don't need and have removed, including all the nonstandard optional APIs. We have also added diff --git a/src/timezone/localtime.c b/src/timezone/localtime.c index 0f65f3c648e..fa3c059038c 100644 --- a/src/timezone/localtime.c +++ b/src/timezone/localtime.c @@ -53,14 +53,7 @@ static const char wildabbr[] = WILDABBR; static const char gmt[] = "GMT"; /* - * PG: We cache the result of trying to load the TZDEFRULES zone here. - * tzdefrules_loaded is 0 if not tried yet, +1 if good, -1 if failed. - */ -static struct state *tzdefrules_s = NULL; -static int tzdefrules_loaded = 0; - -/* - * The DST rules to use if TZ has no rules and we can't load TZDEFRULES. + * The DST rules to use if a POSIX TZ string has no rules. * Default to US rules as of 2017-05-07. * POSIX does not specify the default DST rules; * for historical reasons, US rules are a common default. @@ -986,14 +979,15 @@ tzparse(const char *name, struct state *sp, bool lastditch) return false; /* - * The IANA code always tries tzload(TZDEFRULES) here. We do not want to - * do that; it would be bad news in the lastditch case, where we can't - * assume pg_open_tzfile() is sane yet. Moreover, the only reason to do - * it unconditionally is to absorb the TZDEFRULES zone's leap second info, - * which we don't want to do anyway. Without that, we only need to load - * TZDEFRULES if the zone name specifies DST but doesn't incorporate a - * POSIX-style transition date rule, which is not a common case. + * The IANA code always tries to tzload(TZDEFRULES) here. We do not want + * to do that; it would be bad news in the lastditch case, where we can't + * assume pg_open_tzfile() is sane yet. Moreover, if we did load it and + * it contains leap-second-dependent info, that would cause problems too. + * Finally, IANA has deprecated the TZDEFRULES feature, so it presumably + * will die at some point. Desupporting it now seems like good + * future-proofing. */ + load_ok = false; sp->goback = sp->goahead = false; /* simulate failed tzload() */ sp->leapcnt = 0; /* intentionally assume no leap seconds */ @@ -1027,38 +1021,8 @@ tzparse(const char *name, struct state *sp, bool lastditch) } else dstoffset = stdoffset - SECSPERHOUR; - if (*name == '\0') - { - /* - * The POSIX zone name does not provide a transition-date rule. - * Here we must load the TZDEFRULES zone, if possible, to serve as - * source data for the transition dates. Unlike the IANA code, we - * try to cache the data so it's only loaded once. - */ - if (tzdefrules_loaded == 0) - { - /* Allocate on first use */ - if (tzdefrules_s == NULL) - tzdefrules_s = (struct state *) malloc(sizeof(struct state)); - if (tzdefrules_s != NULL) - { - if (tzload(TZDEFRULES, NULL, tzdefrules_s, false) == 0) - tzdefrules_loaded = 1; - else - tzdefrules_loaded = -1; - /* In any case, we ignore leap-second data from the file */ - tzdefrules_s->leapcnt = 0; - } - } - load_ok = (tzdefrules_loaded > 0); - if (load_ok) - memcpy(sp, tzdefrules_s, sizeof(struct state)); - else - { - /* If we can't load TZDEFRULES, fall back to hard-wired rule */ - name = TZDEFRULESTRING; - } - } + if (*name == '\0' && !load_ok) + name = TZDEFRULESTRING; if (*name == ',' || *name == ';') { struct rule start; diff --git a/src/tools/msvc/Install.pm b/src/tools/msvc/Install.pm index 9bf111c41ef..b6d0cfd39b4 100644 --- a/src/tools/msvc/Install.pm +++ b/src/tools/msvc/Install.pm @@ -366,16 +366,10 @@ sub GenerateTimezoneFiles || die "Could not find TZDATAFILES line in timezone makefile\n"; my @tzfiles = split /\s+/, $1; - $mf =~ /^POSIXRULES\s*:?=\s*(.*)$/m - || die "Could not find POSIXRULES line in timezone makefile\n"; - my $posixrules = $1; - $posixrules =~ s/\s+//g; - print "Generating timezone files..."; my @args = ( - "$conf/zic/zic", '-d', "$target/share/timezone", '-p', - "$posixrules", '-b', 'slim'); + "$conf/zic/zic", '-d', "$target/share/timezone", '-b', 'slim'); foreach (@tzfiles) { my $tzfile = $_; |