Print this page
6869 Update zdump to better-handle POSIX timezones
Reviewed by: Jason King <jason.brian.king@gmail.com>
Reviewed by: Igor Kozhukhov <ikozhukhov@gmail.com>
*** 1,12 ****
/*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
- #pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* zdump 7.24
* Taken from elsie.nci.nih.gov to replace the existing Solaris zdump,
* which was based on an earlier version of the elsie code.
*
--- 1,10 ----
*** 140,197 ****
return (tmp);
}
#endif /* !defined TYPECHECK */
static void
! abbrok(abbrp, zone)
! const char * const abbrp;
! const char * const zone;
{
register const char *cp;
int error = 0;
if (warned)
return;
cp = abbrp;
! while (isascii(*cp) && isalpha((unsigned char)*cp))
++cp;
(void) fflush(stdout);
! if (cp - abbrp == 0) {
! /*
! * TRANSLATION_NOTE
! * The first %s prints for the program name (zdump),
! * the second %s prints the timezone name, the third
! * %s prints the timezone abbreviation (tzname[0] or
! * tzname[1]).
! */
(void) fprintf(stderr, gettext("%s: warning: zone \"%s\" "
- "abbreviation \"%s\" lacks alphabetic at start\n"),
- progname, zone, abbrp);
- error = 1;
- } else if (cp - abbrp < 3) {
- (void) fprintf(stderr, gettext("%s: warning: zone \"%s\" "
"abbreviation \"%s\" has fewer than 3 alphabetics\n"),
progname, zone, abbrp);
error = 1;
} else if (cp - abbrp > 6) {
(void) fprintf(stderr, gettext("%s: warning: zone \"%s\" "
! "abbreviation \"%s\" has more than 6 alphabetics\n"),
progname, zone, abbrp);
error = 1;
! }
! if (error == 0 && (*cp == '+' || *cp == '-')) {
! ++cp;
! if (isascii(*cp) && isdigit((unsigned char)*cp))
! if (*cp++ == '1' && *cp >= '0' && *cp <= '4')
! ++cp;
! if (*cp != '\0') {
! (void) fprintf(stderr, gettext("%s: warning: "
! "zone \"%s\" abbreviation \"%s\" differs from "
! "POSIX standard\n"), progname, zone, abbrp);
error = 1;
}
- }
if (error)
warned = TRUE;
}
int
--- 138,174 ----
return (tmp);
}
#endif /* !defined TYPECHECK */
static void
! abbrok(const char * const abbrp, const char * const zone)
{
register const char *cp;
int error = 0;
if (warned)
return;
cp = abbrp;
! while (isalpha(*cp) || isdigit(*cp) || *cp == '-' || *cp == '+')
++cp;
(void) fflush(stdout);
! if (cp - abbrp < 3) {
(void) fprintf(stderr, gettext("%s: warning: zone \"%s\" "
"abbreviation \"%s\" has fewer than 3 alphabetics\n"),
progname, zone, abbrp);
error = 1;
} else if (cp - abbrp > 6) {
(void) fprintf(stderr, gettext("%s: warning: zone \"%s\" "
! "abbreviation \"%s\" has more than 6 characters\n"),
progname, zone, abbrp);
error = 1;
! } else if (*cp != '\0') {
! (void) fprintf(stderr, gettext("%s: warning: zone \"%s\" "
! "abbreviation \"%s\" has characters other than "
! "alphanumerics\n"), progname, zone, abbrp);
error = 1;
}
if (error)
warned = TRUE;
}
int