summaryrefslogtreecommitdiff
path: root/m4
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>1997-01-22 22:38:37 +0000
committerJim Meyering <jim@meyering.net>1997-01-22 22:38:37 +0000
commit74cb2ee31448c176cb12bff3e14ac81909682fdf (patch)
treef8a45931b0f7586078b23d534c45d0bc4b1ab806 /m4
parent6d24eee92646f3be41168f3955a339abd785891e (diff)
downloadcoreutils-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.m430
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,