zic warnings about odd time zone abbreviations
Arthur David Olson
olsona at lecserver.nci.nih.gov
Tue May 24 17:33:56 UTC 2005
Here are changes to zic.c to produce warnings about non-POSIX time zone
abbreviations. I've also included changes to the "solar" files to use a
POSIX-compliant "zzz" abbreviation (rather than the non-compliant "??")
for the zone whose name we don't know.
--ado
------- Makefile -------
*** /tmp/geta10569 Tue May 24 13:21:00 2005
--- /tmp/getb10569 Tue May 24 13:21:00 2005
***************
*** 1,4 ****
! # @(#)Makefile 7.108
# Change the line below for your time zone (after finding the zone you want in
# the time zone files, or adding it to a time zone file).
--- 1,4 ----
! # @(#)Makefile 7.109
# Change the line below for your time zone (after finding the zone you want in
# the time zone files, or adding it to a time zone file).
***************
*** 111,117 ****
# -DNO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU=1
# if you do not want run time warnings about formats that may cause
# year 2000 grief
! #
GCC_DEBUG_FLAGS = -Dlint -g -O -fno-common \
-Wall -Wcast-qual -Wconversion -Wmissing-prototypes \
-Wnested-externs -Wpointer-arith -Wshadow \
--- 111,119 ----
# -DNO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU=1
# if you do not want run time warnings about formats that may cause
# year 2000 grief
! # -DZIC_MAX_ABBR_LEN_WO_WARN=3
! # (or some other number) to set the maximum time zone abbreviation length
! # that zic will accept without a warning (the default is 6)
GCC_DEBUG_FLAGS = -Dlint -g -O -fno-common \
-Wall -Wcast-qual -Wconversion -Wmissing-prototypes \
-Wnested-externs -Wpointer-arith -Wshadow \
------- zic.c -------
*** /tmp/geta10785 Tue May 24 13:32:28 2005
--- /tmp/getb10785 Tue May 24 13:32:29 2005
***************
*** 1,4 ****
! static char elsieid[] = "@(#)zic.c 7.122";
/*
** Regardless of the type of time_t, we do our work using this type.
--- 1,4 ----
! static char elsieid[] = "@(#)zic.c 7.123";
/*
** Regardless of the type of time_t, we do our work using this type.
***************
*** 10,15 ****
--- 10,21 ----
#include "locale.h"
#include "tzfile.h"
+ #define GRANDPARENTED "Local time zone must be set--see zic manual page"
+
+ #ifndef ZIC_MAX_ABBR_LEN_WO_WARN
+ #define ZIC_MAX_ABBR_LEN_WO_WARN 6
+ #endif /* !defined ZIC_MAX_ABBR_LEN_WO_WARN */
+
#if HAVE_SYS_STAT_H
#include "sys/stat.h"
#endif
***************
*** 2196,2201 ****
--- 2202,2242 ----
{
register int i;
+ if (strcmp(string, GRANDPARENTED) != 0) {
+ register const char * cp;
+ register char * wp;
+
+ /*
+ ** Want one to ZIC_MAX_ABBR_LEN_WO_WARN alphabetics
+ ** optionally followed by a + or - and a number from 1 to 14.
+ */
+ cp = string;
+ wp = NULL;
+ while (isascii(*cp) && isalpha(*cp))
+ ++cp;
+ if (cp - string == 0)
+ wp = _("time zone abbreviation lacks alphabetic at start");
+ if (noise && cp - string > 3)
+ wp = _("time zone abbreviation has more than 3 alphabetics");
+ if (cp - string > ZIC_MAX_ABBR_LEN_WO_WARN)
+ wp = _("time zone abbreviation has too many alphabetics");
+ if (wp == NULL && (*cp == '+' || *cp == '-')) {
+ ++cp;
+ if (isascii(*cp) && isdigit(*cp))
+ if (*cp++ == '1' && *cp >= '0' && *cp <= '4')
+ ++cp;
+ }
+ if (*cp != '\0')
+ wp = _("time zone abbreviation differs from POSIX standard");
+ if (wp != NULL) {
+ wp = ecpyalloc(wp);
+ wp = ecatalloc(wp, " (");
+ wp = ecatalloc(wp, string);
+ wp = ecatalloc(wp, ")");
+ warning(wp);
+ ifree(wp);
+ }
+ }
i = strlen(string) + 1;
if (charcnt + i > TZ_MAX_CHARS) {
error(_("too many, or too long, time zone abbreviations"));
------- solar87 -------
*** /tmp/geta10623 Tue May 24 13:21:32 2005
--- /tmp/getb10623 Tue May 24 13:21:32 2005
***************
*** 1,4 ****
! # @(#)solar87 7.3
# So much for footnotes about Saudi Arabia.
# Apparent noon times below are for Riyadh; your mileage will vary.
--- 1,4 ----
! # @(#)solar87 7.4
# So much for footnotes about Saudi Arabia.
# Apparent noon times below are for Riyadh; your mileage will vary.
***************
*** 381,388 ****
# Before and after 1987, we'll operate on local mean solar time.
# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
! Zone Asia/Riyadh87 3:07:04 - ?? 1987
! 3:07:04 sol87 ?? 1988
! 3:07:04 - ??
# For backward compatibility...
Link Asia/Riyadh87 Mideast/Riyadh87
--- 381,388 ----
# Before and after 1987, we'll operate on local mean solar time.
# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
! Zone Asia/Riyadh87 3:07:04 - zzz 1987
! 3:07:04 sol87 zzz 1988
! 3:07:04 - zzz
# For backward compatibility...
Link Asia/Riyadh87 Mideast/Riyadh87
------- solar88 -------
*** /tmp/geta10642 Tue May 24 13:21:36 2005
--- /tmp/getb10642 Tue May 24 13:21:36 2005
***************
*** 1,4 ****
! # @(#)solar88 7.3
# Apparent noon times below are for Riyadh; they're a bit off for other places.
# Times were computed using formulas in the U.S. Naval Observatory's
--- 1,4 ----
! # @(#)solar88 7.4
# Apparent noon times below are for Riyadh; they're a bit off for other places.
# Times were computed using formulas in the U.S. Naval Observatory's
***************
*** 381,388 ****
# Before and after 1988, we'll operate on local mean solar time.
# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
! Zone Asia/Riyadh88 3:07:04 - ?? 1988
! 3:07:04 sol88 ?? 1989
! 3:07:04 - ??
# For backward compatibility...
Link Asia/Riyadh88 Mideast/Riyadh88
--- 381,388 ----
# Before and after 1988, we'll operate on local mean solar time.
# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
! Zone Asia/Riyadh88 3:07:04 - zzz 1988
! 3:07:04 sol88 zzz 1989
! 3:07:04 - zzz
# For backward compatibility...
Link Asia/Riyadh88 Mideast/Riyadh88
------- solar89 -------
*** /tmp/geta10661 Tue May 24 13:21:44 2005
--- /tmp/getb10661 Tue May 24 13:21:44 2005
***************
*** 1,4 ****
! # @(#)solar89 7.4
# Apparent noon times below are for Riyadh; they're a bit off for other places.
# Times were computed using a formula provided by the U. S. Naval Observatory:
--- 1,4 ----
! # @(#)solar89 7.5
# Apparent noon times below are for Riyadh; they're a bit off for other places.
# Times were computed using a formula provided by the U. S. Naval Observatory:
***************
*** 386,393 ****
# Before and after 1989, we'll operate on local mean solar time.
# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
! Zone Asia/Riyadh89 3:07:04 - ?? 1989
! 3:07:04 sol89 ?? 1990
! 3:07:04 - ??
# For backward compatibility...
Link Asia/Riyadh89 Mideast/Riyadh89
--- 386,393 ----
# Before and after 1989, we'll operate on local mean solar time.
# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
! Zone Asia/Riyadh89 3:07:04 - zzz 1989
! 3:07:04 sol89 zzz 1990
! 3:07:04 - zzz
# For backward compatibility...
Link Asia/Riyadh89 Mideast/Riyadh89
More information about the tz
mailing list