(AM_FUNC_MKTIME): Fix bug in mktime test -- don't
authorJim Meyering <jim@meyering.net>
Wed, 22 Jan 1997 22:38:37 +0000 (22:38 +0000)
committerJim Meyering <jim@meyering.net>
Wed, 22 Jan 1997 22:38:37 +0000 (22:38 +0000)
test now, test a couple of thousand times.

m4/mktime.m4

index 3f03b1e0c4a72ce6d366c320f5ef136bd0c2360c..c0fcf198bd60d5f1f2ccf1b170878dbdec8b6741 100644 (file)
@@ -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,