
Below find proposed changes to date.c to improve handling of locales and to avoid overflow problems on systems with both 64-bit time_t values. These are variations on Paul Eggert's theme. --ado ------- date.c ------- *** /tmp/geta8752 Mon Nov 8 10:43:48 2004 --- /tmp/getb8752 Mon Nov 8 10:43:48 2004 *************** *** 1,6 **** #ifndef lint #ifndef NOID ! static char elsieid[] = "@(#)date.c 7.38"; /* ** Modified from the UCB version with the SCCS ID appearing below. */ --- 1,6 ---- #ifndef lint #ifndef NOID ! static char elsieid[] = "@(#)date.c 7.40"; /* ** Modified from the UCB version with the SCCS ID appearing below. */ *************** *** 116,129 **** INITIALIZE(dsttime); INITIALIZE(adjust); INITIALIZE(t); ! #if HAVE_GETTEXT - 0 ! (void) setlocale(LC_MESSAGES, ""); #ifdef TZ_DOMAINDIR (void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR); #endif /* defined(TEXTDOMAINDIR) */ (void) textdomain(TZ_DOMAIN); ! #endif /* HAVE_GETTEXT - 0 */ ! (void) setlocale(LC_TIME, ""); (void) time(&now); format = value = NULL; while ((ch = getopt(argc, argv, "ucnd:t:a:")) != EOF && ch != -1) { --- 116,130 ---- INITIALIZE(dsttime); INITIALIZE(adjust); INITIALIZE(t); ! #ifdef LC_ALL ! (void) setlocale(LC_ALL, ""); ! #endif /* defined(LC_ALL) */ ! #if HAVE_GETTEXT #ifdef TZ_DOMAINDIR (void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR); #endif /* defined(TEXTDOMAINDIR) */ (void) textdomain(TZ_DOMAIN); ! #endif /* HAVE_GETTEXT */ (void) time(&now); format = value = NULL; while ((ch = getopt(argc, argv, "ucnd:t:a:")) != EOF && ch != -1) { *************** *** 630,637 **** time_t outt; tm = *localtime(&t); ! cent = (tm.tm_year + TM_YEAR_BASE) / 100; ! year_in_cent = (tm.tm_year + TM_YEAR_BASE) - cent * 100; month = tm.tm_mon + 1; day = tm.tm_mday; hour = tm.tm_hour; --- 631,645 ---- time_t outt; tm = *localtime(&t); ! #define DIVISOR 100 ! year_in_cent = tm.tm_year % DIVISOR + TM_YEAR_BASE % DIVISOR; ! cent = tm.tm_year / DIVISOR + TM_YEAR_BASE / DIVISOR + ! year_in_cent / DIVISOR; ! year_in_cent %= DIVISOR; ! if (year_in_cent < 0) { ! year_in_cent += DIVISOR; ! --cent; ! } month = tm.tm_mon + 1; day = tm.tm_mday; hour = tm.tm_hour;
participants (1)
-
Olson, Arthur David (NIH/NCI)