diff options
author | Jim Meyering <jim@meyering.net> | 1997-01-22 22:38:37 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 1997-01-22 22:38:37 +0000 |
commit | 74cb2ee31448c176cb12bff3e14ac81909682fdf (patch) | |
tree | f8a45931b0f7586078b23d534c45d0bc4b1ab806 /m4 | |
parent | 6d24eee92646f3be41168f3955a339abd785891e (diff) | |
download | coreutils-74cb2ee31448c176cb12bff3e14ac81909682fdf.tar.xz |
(AM_FUNC_MKTIME): Fix bug in mktime test -- don't
test now, test a couple of thousand times.
Diffstat (limited to 'm4')
-rw-r--r-- | m4/mktime.m4 | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/m4/mktime.m4 b/m4/mktime.m4 index 3f03b1e0c..c0fcf198b 100644 --- a/m4/mktime.m4 +++ b/m4/mktime.m4 @@ -5,7 +5,8 @@ AC_DEFUN(AM_FUNC_MKTIME, [AC_REQUIRE([AC_HEADER_TIME])dnl AC_CHECK_HEADERS(sys/time.h) AC_CACHE_CHECK([for working mktime], am_cv_func_working_mktime, - [AC_TRY_RUN([/* Test program from Tony Leneis (tony@plaza.ds.adp.com). */ + [AC_TRY_RUN([/* Test program from Paul Eggert (eggert@twinsun.com) + and Tony Leneis (tony@plaza.ds.adp.com). */ #if TIME_WITH_SYS_TIME # include <sys/time.h> # include <time.h> @@ -16,12 +17,33 @@ AC_DEFUN(AM_FUNC_MKTIME, # include <time.h> # endif #endif + +static time_t time_t_max; + +static void +mktime_test (now) + time_t now; +{ + if (mktime (localtime (&now)) != now) + exit (1); + now = time_t_max - now; + if (mktime (localtime (&now)) != now) + exit (1); +} + int main () { - time_t today = time (0); - struct tm *local = localtime (&today); - exit (mktime (local) != today); + time_t t, delta; + for (time_t_max = 1; 0 < time_t_max; time_t_max *= 2) + continue; + time_t_max--; + delta = time_t_max / 997; /* a suitable prime number */ + for (t = 0; t <= time_t_max - delta; t += delta) + mktime_test (t); + mktime_test ((time_t) 60 * 60); + mktime_test ((time_t) 60 * 60 * 24); + exit (0); } ], am_cv_func_working_mktime=yes, am_cv_func_working_mktime=no, |