Strftime's %C and %y formats versus wide-ranging tm_year valu es
Olson, Arthur David (NIH/NCI)
olsona at dc37a.nci.nih.gov
Thu Oct 14 21:34:12 UTC 2004
Below might be a simpler asctime.c fix.
--ado
------- asctime.c -------
*** /tmp/geta7409 Thu Oct 14 17:29:28 2004
--- /tmp/getb7409 Thu Oct 14 17:29:28 2004
***************
*** 5,11 ****
#ifndef lint
#ifndef NOID
! static char elsieid[] = "@(#)asctime.c 7.26";
#endif /* !defined NOID */
#endif /* !defined lint */
--- 5,11 ----
#ifndef lint
#ifndef NOID
! static char elsieid[] = "@(#)asctime.c 7.27";
#endif /* !defined NOID */
#endif /* !defined lint */
***************
*** 83,89 ****
--- 83,96 ----
if (timeptr->tm_mon < 0 || timeptr->tm_mon >= MONSPERYEAR)
mn = "???";
else mn = mon_name[timeptr->tm_mon];
+ #if STRICTLY_STANDARD_ASCTIME
/*
+ ** Be strict, potential overflow problems included.
+ ** In an ideal world, this code is never going to be used.
+ */
+ (void) sprintf(year, "%d", timeptr->tm_year + TM_YEAR_BASE);
+ #else /* !STRICTLY_STANDARD_ASCTIME */
+ /*
** Use strftime's %Y to generate the year, to avoid overflow
problems
** when computing timeptr->tm_year + TM_YEAR_BASE.
** Assume that strftime is unaffected by other out-of-range members
***************
*** 90,95 ****
--- 97,103 ----
** (e.g., timeptr->tm_mday) when processing "%Y".
*/
(void) strftime(year, sizeof year, "%Y", timeptr);
+ #endif /* !STRICTLY_STANDARD_ASCTIME */
/*
** We avoid using snprintf since it's not available on all systems.
*/
More information about the tz
mailing list