aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/timezone/Makefile8
-rw-r--r--src/timezone/README5
-rw-r--r--src/timezone/localtime.c58
-rw-r--r--src/tools/msvc/Install.pm8
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 = $_;