summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2016-12-05 23:13:16 +0000
committerglebius <glebius@FreeBSD.org>2016-12-05 23:13:16 +0000
commit4b8ebaec5b2d6f186c36f1570b1d0ff6c4561d4d (patch)
treedf41fbae3235d21bd4f07005f84fc3b4c49a19eb
parent2f81d935658287026e614a5edf74ae47f5c54f3f (diff)
downloadFreeBSD-src-4b8ebaec5b2d6f186c36f1570b1d0ff6c4561d4d.zip
FreeBSD-src-4b8ebaec5b2d6f186c36f1570b1d0ff6c4561d4d.tar.gz
Merge r307359 from stable/10:
Incorporate a change from OpenBSD by millert@OpenBSD.org Don't warn about valid time zone abbreviations. POSIX through 2000 says that an abbreviation cannot start with ':', and cannot contain ',', '-', '+', NUL, or a digit. POSIX from 2001 on changes this rule to say that an abbreviation can contain only '-', '+', and alphanumeric characters from the portable character set in the current locale. To be portable to both sets of rules, an abbreviation must therefore use only ASCII letters." Adapted from tzcode2015f. Errata Notice: EN-16:19.tzcode Submitted by: bapt Approved by: so
-rw-r--r--contrib/tzcode/zic/zdump.c24
-rw-r--r--contrib/tzcode/zic/zic.c20
2 files changed, 11 insertions, 33 deletions
diff --git a/contrib/tzcode/zic/zdump.c b/contrib/tzcode/zic/zdump.c
index 2878a70..01111fe 100644
--- a/contrib/tzcode/zic/zdump.c
+++ b/contrib/tzcode/zic/zdump.c
@@ -212,24 +212,16 @@ const char * const zone;
return;
cp = abbrp;
wp = NULL;
- while (isascii((unsigned char) *cp) && isalpha((unsigned char) *cp))
+ while (isascii((unsigned char) *cp) &&
+ (isalnum((unsigned char)*cp) || *cp == '-' || *cp == '+'))
++cp;
- if (cp - abbrp == 0)
- wp = _("lacks alphabetic at start");
- else if (cp - abbrp < 3)
- wp = _("has fewer than 3 alphabetics");
+ if (cp - abbrp < 3)
+ wp = _("has fewer than 3 characters");
else if (cp - abbrp > 6)
- wp = _("has more than 6 alphabetics");
- if (wp == NULL && (*cp == '+' || *cp == '-')) {
- ++cp;
- if (isascii((unsigned char) *cp) &&
- isdigit((unsigned char) *cp))
- if (*cp++ == '1' && *cp >= '0' && *cp <= '4')
- ++cp;
- if (*cp != '\0')
- wp = _("differs from POSIX standard");
- }
- if (wp == NULL)
+ wp = _("has more than 6 characters");
+ else if (*cp)
+ wp = "has characters other than ASCII alphanumerics, '-' or '+'";
+ else
return;
(void) fflush(stdout);
(void) fprintf(stderr,
diff --git a/contrib/tzcode/zic/zic.c b/contrib/tzcode/zic/zic.c
index 5fb8b53..00043b7 100644
--- a/contrib/tzcode/zic/zic.c
+++ b/contrib/tzcode/zic/zic.c
@@ -2615,29 +2615,15 @@ const char * const string;
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((unsigned char) *cp) &&
- isalpha((unsigned char) *cp))
+ (isalnum((unsigned char)*cp) || *cp == '-' || *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");
+wp = _("time zone abbreviation has more than 3 characters");
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((unsigned char) *cp) &&
- isdigit((unsigned char) *cp))
- if (*cp++ == '1' &&
- *cp >= '0' && *cp <= '4')
- ++cp;
- }
+wp = _("time zone abbreviation has too many characters");
if (*cp != '\0')
wp = _("time zone abbreviation differs from POSIX standard");
if (wp != NULL) {
OpenPOWER on IntegriCloud