On Sat, Feb 6, 2010 at 11:49 AM, Arthur David Olson < olsona@elsie.nci.nih.gov> wrote:
Here are the proposed changes, revised to incorporate KRE's suggestion on how to handle NULLs passed to asctime_r.
--ado
------- asctime.c ------- *** /tmp/geta27327 Sat Feb 6 14:46:35 2010 --- /tmp/getb27327 Sat Feb 6 14:46:35 2010 [...]
*************** *** 91,96 **** --- 91,101 ---- char year[INT_STRLEN_MAXIMUM(int) + 2]; char result[MAX_ASCTIME_BUF_SIZE];
+ if (timeptr == NULL) { + errno = EINVAL; + (void) strcpy(buf, "??? ??? ?? ??:??:?? ????\n"); + return buf; + } if (timeptr->tm_wday < 0 || timeptr->tm_wday >= DAYSPERWEEK) wn = "???"; else wn = wday_name[timeptr->tm_wday];
You could avoid the cast by using: return strcpy(buf, "??? ??? ?? ??:??:?? ????\n"); This is one of the few occasions when the return value from strcpy() actually is useful. (So often, it would be more useful if it returned a pointer to the NUL '\0' at the end of the string.) -- Jonathan Leffler <jonathan.leffler@gmail.com> #include <disclaimer.h> Guardian of DBD::Informix - v2008.0513 - http://dbi.perl.org "Blessed are we who can laugh at ourselves, for we shall never cease to be amused."