aboutsummaryrefslogtreecommitdiff
path: root/src/timezone/zic.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/timezone/zic.c')
-rw-r--r--src/timezone/zic.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/timezone/zic.c b/src/timezone/zic.c
index a83cea12ddc..f6beedcab2a 100644
--- a/src/timezone/zic.c
+++ b/src/timezone/zic.c
@@ -2672,6 +2672,9 @@ outzone(const struct zone * zpfirst, ptrdiff_t zonecount)
bool do_extend;
char version;
ptrdiff_t lastatmax = -1;
+ zic_t one = 1;
+ zic_t y2038_boundary = one << 31;
+ zic_t max_year0;
max_abbr_len = 2 + max_format_len + max_abbrvar_len;
max_envvar_len = 2 * max_abbr_len + 5 * 9;
@@ -2781,12 +2784,13 @@ outzone(const struct zone * zpfirst, ptrdiff_t zonecount)
}
/*
- * For the benefit of older systems, generate data from 1900 through 2037.
+ * For the benefit of older systems, generate data from 1900 through 2038.
*/
if (min_year > 1900)
min_year = 1900;
- if (max_year < 2037)
- max_year = 2037;
+ max_year0 = max_year;
+ if (max_year < 2038)
+ max_year = 2038;
for (i = 0; i < zonecount; ++i)
{
/*
@@ -2836,7 +2840,12 @@ outzone(const struct zone * zpfirst, ptrdiff_t zonecount)
year <= rp->r_hiyear &&
yearistype(year, rp->r_yrtype);
if (rp->r_todo)
+ {
rp->r_temp = rpytime(rp, year);
+ rp->r_todo
+ = (rp->r_temp < y2038_boundary
+ || year <= max_year0);
+ }
}
for (;;)
{