Update zdump and zic from tzcode 2012b.

This commit is contained in:
Joseph Myers 2012-04-25 18:50:39 +00:00
parent a3cc4f48e9
commit 35d76d5950
4 changed files with 80 additions and 12 deletions

View File

@ -1,5 +1,10 @@
2012-04-25 Joseph Myers <joseph@codesourcery.com> 2012-04-25 Joseph Myers <joseph@codesourcery.com>
* timezone/README: Update upstream location and email address for
tzcode and tzdata.
* timezone/zdump.c: Update from tzcode 2012b.
* timezone/zic.c: Likewise.
* configure.in (libc_cv_as_needed): Remove test. * configure.in (libc_cv_as_needed): Remove test.
* configure: Regenerated. * configure: Regenerated.
* Makeconfig [$(have-as-needed) != yes] (as-needed): Remove * Makeconfig [$(have-as-needed) != yes] (as-needed): Remove

View File

@ -13,5 +13,5 @@ come from the tzdata package by Arthur David Olson et.al.
Please check the ChangeLog files in the top level directory for the Please check the ChangeLog files in the top level directory for the
version of the tzcode and tzdata packages. version of the tzcode and tzdata packages.
These packages may be found at ftp://elsie.nci.nih.gov/pub/. Commentary These packages may be found at ftp://munnari.oz.au/pub/. Commentary
should be addressed to tz@elsie.nci.nih.gov. should be addressed to tz@iana.org.

View File

@ -3,7 +3,7 @@
** 2009-05-17 by Arthur David Olson. ** 2009-05-17 by Arthur David Olson.
*/ */
static char elsieid[] = "@(#)zdump.c 8.9"; static char elsieid[] = "@(#)zdump.c 8.10";
/* /*
** This code has been made independent of the rest of the time ** This code has been made independent of the rest of the time
@ -236,7 +236,9 @@ const char * const zone;
} }
static void static void
usage(const char *progname, FILE *stream, int status) usage(stream, status)
FILE * const stream;
const int status;
{ {
(void) fprintf(stream, (void) fprintf(stream,
_("%s: usage is %s [ --version ] [ --help ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n\ _("%s: usage is %s [ --version ] [ --help ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n\
@ -283,7 +285,7 @@ char * argv[];
(void) printf("%s\n", elsieid); (void) printf("%s\n", elsieid);
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
} else if (strcmp(argv[i], "--help") == 0) { } else if (strcmp(argv[i], "--help") == 0) {
usage(progname, stdout, EXIT_SUCCESS); usage(stdout, EXIT_SUCCESS);
} }
vflag = 0; vflag = 0;
cutarg = NULL; cutarg = NULL;
@ -293,7 +295,7 @@ char * argv[];
else cutarg = optarg; else cutarg = optarg;
if ((c != EOF && c != -1) || if ((c != EOF && c != -1) ||
(optind == argc - 1 && strcmp(argv[optind], "=") == 0)) { (optind == argc - 1 && strcmp(argv[optind], "=") == 0)) {
usage(progname, stderr, EXIT_FAILURE); usage(stderr, EXIT_FAILURE);
} }
if (vflag) { if (vflag) {
if (cutarg != NULL) { if (cutarg != NULL) {

View File

@ -3,7 +3,7 @@
** 2006-07-17 by Arthur David Olson. ** 2006-07-17 by Arthur David Olson.
*/ */
static char elsieid[] = "@(#)zic.c 8.19"; static char elsieid[] = "@(#)zic.c 8.25";
#include "private.h" #include "private.h"
#include "locale.h" #include "locale.h"
@ -1621,6 +1621,53 @@ const char * const string;
if (thistimei == 0) if (thistimei == 0)
writetype[0] = TRUE; writetype[0] = TRUE;
} }
#ifndef LEAVE_SOME_PRE_2011_SYSTEMS_IN_THE_LURCH
/*
** For some pre-2011 systems: if the last-to-be-written
** standard (or daylight) type has an offset different from the
** most recently used offset,
** append an (unused) copy of the most recently used type
** (to help get global "altzone" and "timezone" variables
** set correctly).
*/
{
register int mrudst, mrustd, hidst, histd, type;
hidst = histd = mrudst = mrustd = -1;
for (i = thistimei; i < thistimelim; ++i)
if (isdsts[types[i]])
mrudst = types[i];
else mrustd = types[i];
for (i = 0; i < typecnt; ++i)
if (writetype[i]) {
if (isdsts[i])
hidst = i;
else histd = i;
}
if (hidst >= 0 && mrudst >= 0 && hidst != mrudst &&
gmtoffs[hidst] != gmtoffs[mrudst]) {
isdsts[mrudst] = -1;
type = addtype(gmtoffs[mrudst],
&chars[abbrinds[mrudst]],
TRUE,
ttisstds[mrudst],
ttisgmts[mrudst]);
isdsts[mrudst] = TRUE;
writetype[type] = TRUE;
}
if (histd >= 0 && mrustd >= 0 && histd != mrustd &&
gmtoffs[histd] != gmtoffs[mrustd]) {
isdsts[mrustd] = -1;
type = addtype(gmtoffs[mrustd],
&chars[abbrinds[mrustd]],
FALSE,
ttisstds[mrustd],
ttisgmts[mrustd]);
isdsts[mrustd] = FALSE;
writetype[type] = TRUE;
}
}
#endif /* !defined LEAVE_SOME_PRE_2011_SYSTEMS_IN_THE_LURCH */
thistypecnt = 0; thistypecnt = 0;
for (i = 0; i < typecnt; ++i) for (i = 0; i < typecnt; ++i)
typemap[i] = writetype[i] ? thistypecnt++ : -1; typemap[i] = writetype[i] ? thistypecnt++ : -1;
@ -1835,16 +1882,16 @@ const long gmtoff;
register int week; register int week;
if (rp->r_dycode == DC_DOWGEQ) { if (rp->r_dycode == DC_DOWGEQ) {
week = 1 + rp->r_dayofmonth / DAYSPERWEEK; if ((rp->r_dayofmonth % DAYSPERWEEK) != 1)
if ((week - 1) * DAYSPERWEEK + 1 != rp->r_dayofmonth)
return -1; return -1;
week = 1 + rp->r_dayofmonth / DAYSPERWEEK;
} else if (rp->r_dycode == DC_DOWLEQ) { } else if (rp->r_dycode == DC_DOWLEQ) {
if (rp->r_dayofmonth == len_months[1][rp->r_month]) if (rp->r_dayofmonth == len_months[1][rp->r_month])
week = 5; week = 5;
else { else {
week = 1 + rp->r_dayofmonth / DAYSPERWEEK; if ((rp->r_dayofmonth % DAYSPERWEEK) != 0)
if (week * DAYSPERWEEK - 1 != rp->r_dayofmonth)
return -1; return -1;
week = rp->r_dayofmonth / DAYSPERWEEK;
} }
} else return -1; /* "cannot happen" */ } else return -1; /* "cannot happen" */
(void) sprintf(result, "M%d.%d.%d", (void) sprintf(result, "M%d.%d.%d",
@ -1921,7 +1968,7 @@ const int zonecount;
if (stdrp != NULL && stdrp->r_hiyear == 2037) if (stdrp != NULL && stdrp->r_hiyear == 2037)
return; return;
} }
if (stdrp == NULL && zp->z_nrules != 0) if (stdrp == NULL && (zp->z_nrules != 0 || zp->z_stdoff != 0))
return; return;
abbrvar = (stdrp == NULL) ? "" : stdrp->r_abbrvar; abbrvar = (stdrp == NULL) ? "" : stdrp->r_abbrvar;
doabbr(result, zp->z_format, abbrvar, FALSE, TRUE); doabbr(result, zp->z_format, abbrvar, FALSE, TRUE);
@ -1972,6 +2019,7 @@ const int zonecount;
register char * envvar; register char * envvar;
register int max_abbr_len; register int max_abbr_len;
register int max_envvar_len; register int max_envvar_len;
register int prodstic; /* all rules are min to max */
max_abbr_len = 2 + max_format_len + max_abbrvar_len; max_abbr_len = 2 + max_format_len + max_abbrvar_len;
max_envvar_len = 2 * max_abbr_len + 5 * 9; max_envvar_len = 2 * max_abbr_len + 5 * 9;
@ -1986,6 +2034,7 @@ const int zonecount;
timecnt = 0; timecnt = 0;
typecnt = 0; typecnt = 0;
charcnt = 0; charcnt = 0;
prodstic = zonecount == 1;
/* /*
** Thanks to Earl Chew ** Thanks to Earl Chew
** for noting the need to unconditionally initialize startttisstd. ** for noting the need to unconditionally initialize startttisstd.
@ -2007,6 +2056,8 @@ const int zonecount;
updateminmax(rp->r_loyear); updateminmax(rp->r_loyear);
if (rp->r_hiwasnum) if (rp->r_hiwasnum)
updateminmax(rp->r_hiyear); updateminmax(rp->r_hiyear);
if (rp->r_lowasnum || rp->r_hiwasnum)
prodstic = FALSE;
} }
} }
/* /*
@ -2029,6 +2080,16 @@ wp = ecpyalloc(_("no POSIX environment variable for zone"));
if (max_year <= INT_MAX - YEARSPERREPEAT) if (max_year <= INT_MAX - YEARSPERREPEAT)
max_year += YEARSPERREPEAT; max_year += YEARSPERREPEAT;
else max_year = INT_MAX; else max_year = INT_MAX;
/*
** Regardless of any of the above,
** for a "proDSTic" zone which specifies that its rules
** always have and always will be in effect,
** we only need one cycle to define the zone.
*/
if (prodstic) {
min_year = 1900;
max_year = min_year + YEARSPERREPEAT;
}
} }
/* /*
** For the benefit of older systems, ** For the benefit of older systems,