Update from tzcode2005k.

This commit is contained in:
Ulrich Drepper 2005-08-06 05:40:57 +00:00
parent bf3534a59e
commit c872f5cc63
6 changed files with 108 additions and 24 deletions

View File

@ -1,8 +1,8 @@
# Check tz tables for consistency. # Check tz tables for consistency.
# @(#)checktab.awk 1.6 # @(#)checktab.awk 1.7
# Contributed by Paul Eggert <eggert@twinsun.com>. # Contributed by Paul Eggert.
BEGIN { BEGIN {
FS = "\t" FS = "\t"

View File

@ -25,6 +25,8 @@ static char privatehid[] = "@(#)private.h 7.55";
#endif /* !defined NOID */ #endif /* !defined NOID */
#endif /* !defined lint */ #endif /* !defined lint */
#define GRANDPARENTED "Local time zone must be set--see zic manual page"
/* /*
** Defaults for preprocessor symbols. ** Defaults for preprocessor symbols.
** You can override these in your C compiler options, e.g. `-DHAVE_ADJTIME=0'. ** You can override these in your C compiler options, e.g. `-DHAVE_ADJTIME=0'.
@ -91,13 +93,13 @@ static char privatehid[] = "@(#)private.h 7.55";
#include "time.h" #include "time.h"
#include "stdlib.h" #include "stdlib.h"
#if HAVE_GETTEXT - 0 #if HAVE_GETTEXT
#include "libintl.h" #include "libintl.h"
#endif /* HAVE_GETTEXT - 0 */ #endif /* HAVE_GETTEXT */
#if HAVE_SYS_WAIT_H - 0 #if HAVE_SYS_WAIT_H
#include <sys/wait.h> /* for WIFEXITED and WEXITSTATUS */ #include <sys/wait.h> /* for WIFEXITED and WEXITSTATUS */
#endif /* HAVE_SYS_WAIT_H - 0 */ #endif /* HAVE_SYS_WAIT_H */
#ifndef WIFEXITED #ifndef WIFEXITED
#define WIFEXITED(status) (((status) & 0xff) == 0) #define WIFEXITED(status) (((status) & 0xff) == 0)
@ -106,18 +108,18 @@ static char privatehid[] = "@(#)private.h 7.55";
#define WEXITSTATUS(status) (((status) >> 8) & 0xff) #define WEXITSTATUS(status) (((status) >> 8) & 0xff)
#endif /* !defined WEXITSTATUS */ #endif /* !defined WEXITSTATUS */
#if HAVE_UNISTD_H - 0 #if HAVE_UNISTD_H
#include "unistd.h" /* for F_OK and R_OK */ #include "unistd.h" /* for F_OK and R_OK */
#endif /* HAVE_UNISTD_H - 0 */ #endif /* HAVE_UNISTD_H */
#if !(HAVE_UNISTD_H - 0) #if !HAVE_UNISTD_H
#ifndef F_OK #ifndef F_OK
#define F_OK 0 #define F_OK 0
#endif /* !defined F_OK */ #endif /* !defined F_OK */
#ifndef R_OK #ifndef R_OK
#define R_OK 4 #define R_OK 4
#endif /* !defined R_OK */ #endif /* !defined R_OK */
#endif /* !(HAVE_UNISTD_H - 0) */ #endif /* !HAVE_UNISTD_H */
/* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX. */ /* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX. */
#define is_digit(c) ((unsigned)(c) - '0' <= 9) #define is_digit(c) ((unsigned)(c) - '0' <= 9)
@ -216,7 +218,7 @@ char * imalloc P((int n));
void * irealloc P((void * pointer, int size)); void * irealloc P((void * pointer, int size));
void icfree P((char * pointer)); void icfree P((char * pointer));
void ifree P((char * pointer)); void ifree P((char * pointer));
char * scheck P((const char *string, const char *format)); char * scheck P((const char *string, char *format));
/* /*
** Finally, some convenience items. ** Finally, some convenience items.
@ -255,7 +257,8 @@ char * scheck P((const char *string, const char *format));
** add one more for a minus sign if the type is signed. ** add one more for a minus sign if the type is signed.
*/ */
#define INT_STRLEN_MAXIMUM(type) \ #define INT_STRLEN_MAXIMUM(type) \
((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + 1 + TYPE_SIGNED(type)) ((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + \
1 + TYPE_SIGNED(type))
#endif /* !defined INT_STRLEN_MAXIMUM */ #endif /* !defined INT_STRLEN_MAXIMUM */
/* /*
@ -289,11 +292,11 @@ char * scheck P((const char *string, const char *format));
*/ */
#ifndef _ #ifndef _
#if HAVE_GETTEXT - 0 #if HAVE_GETTEXT
#define _(msgid) gettext(msgid) #define _(msgid) gettext(msgid)
#else /* !(HAVE_GETTEXT - 0) */ #else /* !HAVE_GETTEXT */
#define _(msgid) msgid #define _(msgid) msgid
#endif /* !(HAVE_GETTEXT - 0) */ #endif /* !HAVE_GETTEXT */
#endif /* !defined _ */ #endif /* !defined _ */
#ifndef TZ_DOMAIN #ifndef TZ_DOMAIN

View File

@ -11,7 +11,7 @@ static char elsieid[] = "@(#)scheck.c 8.16";
char * char *
scheck(string, format) scheck(string, format)
const char * const string; const char * const string;
const char * const format; char * const format;
{ {
register char * fbuf; register char * fbuf;
register const char * fp; register const char * fp;

View File

@ -1,11 +1,11 @@
#! @KSH@ #! @KSH@
# '@(#)tzselect.ksh 1.7' # '@(#)tzselect.ksh 1.8'
# Ask the user about the time zone, and output the resulting TZ value to stdout. # Ask the user about the time zone, and output the resulting TZ value to stdout.
# Interact with the user via stderr and stdin. # Interact with the user via stderr and stdin.
# Contributed by Paul Eggert <eggert@twinsun.com>. # Contributed by Paul Eggert.
# Porting notes: # Porting notes:
# #

View File

@ -1,4 +1,4 @@
static char elsieid[] = "@(#)zdump.c 7.64"; static char elsieid[] = "@(#)zdump.c 7.65";
/* /*
** This code has been made independent of the rest of the time ** This code has been made independent of the rest of the time
@ -144,8 +144,10 @@ static time_t absolute_min_time;
static time_t absolute_max_time; static time_t absolute_max_time;
static size_t longest; static size_t longest;
static char * progname; static char * progname;
static int warned;
static char * abbr P((struct tm * tmp)); static char * abbr P((struct tm * tmp));
static void abbrok P((const char * abbr, const char * zone));
static long delta P((struct tm * newp, struct tm * oldp)); static long delta P((struct tm * newp, struct tm * oldp));
static void dumptime P((const struct tm * tmp)); static void dumptime P((const struct tm * tmp));
static time_t hunt P((char * name, time_t lot, time_t hit)); static time_t hunt P((char * name, time_t lot, time_t hit));
@ -191,6 +193,44 @@ time_t * tp;
} }
#endif /* !defined TYPECHECK */ #endif /* !defined TYPECHECK */
static void
abbrok(abbr, zone)
const char * const abbr;
const char * const zone;
{
register int i;
register const char * cp;
register char * wp;
if (warned)
return;
cp = abbr;
wp = NULL;
while (isascii(*cp) && isalpha(*cp))
++cp;
if (cp - abbr == 0)
wp = _("lacks alphabetic at start");
if (cp - abbr < 3)
wp = _("has fewer than 3 alphabetics");
if (cp - abbr > 6)
wp = _("has more than 6 alphabetics");
if (wp == NULL && (*cp == '+' || *cp == '-')) {
++cp;
if (isascii(*cp) && isdigit(*cp))
if (*cp++ == '1' && *cp >= '0' && *cp <= '4')
++cp;
}
if (*cp != '\0')
wp = _("differs from POSIX standard");
if (wp == NULL)
return;
(void) fflush(stdout);
(void) fprintf(stderr,
"%s: warning: zone \"%s\" abbreviation \"%s\" %s\n",
progname, zone, abbr, wp);
warned = TRUE;
}
int int
main(argc, argv) main(argc, argv)
int argc; int argc;
@ -216,7 +256,7 @@ char * argv[];
INITIALIZE(cutlotime); INITIALIZE(cutlotime);
INITIALIZE(cuthitime); INITIALIZE(cuthitime);
#if HAVE_GETTEXT #if HAVE_GETTEXT
(void) setlocale(LC_MESSAGES, ""); (void) setlocale(LC_ALL, "");
#ifdef TZ_DOMAINDIR #ifdef TZ_DOMAINDIR
(void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR); (void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR);
#endif /* defined TEXTDOMAINDIR */ #endif /* defined TEXTDOMAINDIR */
@ -297,6 +337,7 @@ _("%s: usage is %s [ --version ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n"),
show(argv[i], now, FALSE); show(argv[i], now, FALSE);
continue; continue;
} }
warned = FALSE;
t = absolute_min_time; t = absolute_min_time;
show(argv[i], t, TRUE); show(argv[i], t, TRUE);
t += SECSPERHOUR * HOURSPERDAY; t += SECSPERHOUR * HOURSPERDAY;
@ -527,6 +568,8 @@ int v;
} }
} }
(void) printf("\n"); (void) printf("\n");
if (tmp != NULL && *abbr(tmp) != '\0')
abbrok(abbr(tmp), zone);
} }
static char * static char *

View File

@ -1,4 +1,4 @@
static char elsieid[] = "@(#)zic.c 7.122"; static char elsieid[] = "@(#)zic.c 7.124";
/* /*
** Regardless of the type of time_t, we do our work using this type. ** Regardless of the type of time_t, we do our work using this type.
@ -10,6 +10,10 @@ typedef int zic_t;
#include "locale.h" #include "locale.h"
#include "tzfile.h" #include "tzfile.h"
#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 #if HAVE_SYS_STAT_H
#include "sys/stat.h" #include "sys/stat.h"
#endif #endif
@ -475,8 +479,7 @@ char * argv[];
(void) umask(umask(S_IWGRP | S_IWOTH) | (S_IWGRP | S_IWOTH)); (void) umask(umask(S_IWGRP | S_IWOTH) | (S_IWGRP | S_IWOTH));
#endif /* defined unix */ #endif /* defined unix */
#if HAVE_GETTEXT #if HAVE_GETTEXT
(void) setlocale(LC_CTYPE, ""); (void) setlocale(LC_ALL, "");
(void) setlocale(LC_MESSAGES, "");
#ifdef TZ_DOMAINDIR #ifdef TZ_DOMAINDIR
(void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR); (void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR);
#endif /* defined TEXTDOMAINDIR */ #endif /* defined TEXTDOMAINDIR */
@ -2197,6 +2200,41 @@ const char * const string;
{ {
register int i; 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; i = strlen(string) + 1;
if (charcnt + i > TZ_MAX_CHARS) { if (charcnt + i > TZ_MAX_CHARS) {
error(_("too many, or too long, time zone abbreviations")); error(_("too many, or too long, time zone abbreviations"));