Print this page
XXXX Update zdump to better-handle POSIX timezones

@@ -2228,36 +2228,30 @@
         t = (zic_t)dayoff * SECSPERDAY;
         return (tadd(t, rp->r_tod));
 }
 
 static void
-newabbr(string)
-const char * const      string;
+newabbr(const char * const string)
 {
         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))
+                while (isalpha(*cp) || ('0' <= *cp && *cp <= '9') ||
+                    *cp == '-' || *cp == '+') {
                         ++cp;
-                if (cp - string == 0)
-                        wp = gettext(("time zone abbreviation lacks "
-                            "alphabetic at start"));
-                if (noise && cp - string > 3)
-                        wp = gettext(("time zone abbreviation has more than 3 "
+                }
+                if (noise && cp - string < 3)
+                        wp = gettext(("time zone abbreviation has less than 3 "
                             "alphabetics"));
                 if (cp - string > ZIC_MAX_ABBR_LEN_WO_WARN)
                         wp = gettext(("time zone abbreviation has too many "
-                            "alphabetics"));
+                            "characters"));
                 if (wp == NULL && (*cp == '+' || *cp == '-')) {
                         ++cp;
                         if (isascii(*cp) && isdigit(*cp))
                                 if (*cp++ == '1' && *cp >= '0' && *cp <= '4')
                                         ++cp;