changeset 859:151259bd1f64

(AM_FUNC_MKTIME): Fix bug in mktime test -- don't test now, test a couple of thousand times.
author Jim Meyering <jim@meyering.net>
date Wed, 22 Jan 1997 22:38:37 +0000
parents d6b1cfa29509
children 68da68da125e
files m4/mktime.m4
diffstat 1 files changed, 26 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/m4/mktime.m4
+++ b/m4/mktime.m4
@@ -5,7 +5,8 @@
 [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 @@
 #  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,