Mercurial > emacs
diff lib-src/fakemail.c @ 69790:1e68e7f3b824
* lib-src/b2m.c (main): Don't include <limits.h>.
(TM_YEAR_BASE): New macro.
(TM_YEAR_IN_ASCTIME_RANGE): Don't define if already defined, so
that s/ files can override this. Use the more-conservative range
1000-9999.
(main): Check for asctime returning NULL.
* lib-src/fakemail.c: Likewise.
* src/editfns.c (TM_YEAR_IN_ASCTIME_RANGE): New macro, identical to
../lib-src/b2m.c and ../lib-src/editfns.c.
(Fcurrent_time_string): Use it.
Document that the year might not consume 4 columns if it's outside
the range 1000-9999.
Check for asctime failure.
Don't assume that the output string length is always exactly 24.
author | Paul Eggert <eggert@twinsun.com> |
---|---|
date | Tue, 04 Apr 2006 04:13:02 +0000 |
parents | e112ec9aa49b |
children | 8e7233f487a3 65ca8fb66a0d |
line wrap: on
line diff
--- a/lib-src/fakemail.c Tue Apr 04 03:39:23 2006 +0000 +++ b/lib-src/fakemail.c Tue Apr 04 04:13:02 2006 +0000 @@ -53,7 +53,6 @@ #include "ntlib.h" #endif -#include <limits.h> #include <stdio.h> #include <string.h> #include <ctype.h> @@ -71,15 +70,13 @@ #define true 1 #define false 0 -/* True if TM_YEAR is a struct tm's tm_year value that is acceptable - to asctime. Glibc asctime returns a useful string unless TM_YEAR - is nearly INT_MAX, but the C Standard lets C libraries overrun a - buffer if TM_YEAR needs more than 4 bytes. */ -#ifdef __GLIBC__ -# define TM_YEAR_IN_ASCTIME_RANGE(tm_year) ((tm_year) <= INT_MAX - 1900) -#else +#define TM_YEAR_BASE 1900 + +/* Nonzero if TM_YEAR is a struct tm's tm_year value that causes + asctime to have well-defined behavior. */ +#ifndef TM_YEAR_IN_ASCTIME_RANGE # define TM_YEAR_IN_ASCTIME_RANGE(tm_year) \ - (-999 - 1900 <= (tm_year) && (tm_year) <= 9999 - 1900) + (1000 - TM_YEAR_BASE <= (tm_year) && (tm_year) <= 9999 - TM_YEAR_BASE) #endif /* Various lists */ @@ -378,9 +375,9 @@ Don't use 'ctime', as that might dump core if the hardware clock is set to a bizarre value. */ tm = localtime (&idiotic_interface); - if (! (tm && TM_YEAR_IN_ASCTIME_RANGE (tm->tm_year))) + if (! (tm && TM_YEAR_IN_ASCTIME_RANGE (tm->tm_year) + && (the_date = asctime (tm)))) fatal ("current time is out of range", 0); - the_date = asctime (tm); /* the_date has an unwanted newline at the end */ date_length = strlen (the_date) - 1; the_date[date_length] = '\0';