bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

time: Fix test failure on native Windows


From: Bruno Haible
Subject: time: Fix test failure on native Windows
Date: Fri, 17 Mar 2023 13:36:49 +0100

The recently added unit test that checks the consistency between time(NULL)
and gettimeofday() fails on native Windows. Both on mingw (which has a
gettimeofday function) and on MSVC (which does not have gettimeofday and
therefore uses gnulib's replacement).

Here, after gettimeofday() reports a new second, it takes about 5 msec
until time(NULL) reports that new second as well.

This patch fixes it, by implementing time(NULL) based on gettimeofday().
Note that the mingw gettimeofday() and the gnulib replacement are equivalent.


2023-03-17  Bruno Haible  <bruno@clisp.org>

        time: Fix test failure on native Windows.
        * m4/time.m4 (gl_FUNC_TIME): Guess that it does not work on native
        Windows.
        * modules/time (Depends-on): Add gettimeofday.
        * doc/posix-functions/time.texi: Mention the bug on Windows.

diff --git a/doc/posix-functions/time.texi b/doc/posix-functions/time.texi
index a8e9abcddf..5d7c719594 100644
--- a/doc/posix-functions/time.texi
+++ b/doc/posix-functions/time.texi
@@ -12,10 +12,11 @@
 This function is not consistent with @code{gettimeofday} and 
@code{timespec_get}
 on some platforms:
 @c https://sourceware.org/bugzilla/show_bug.cgi?id=30200
-glibc 2.31 or newer on Linux.
-Namely, in the first 1 to 2.5 milliseconds of every second, @code{time}
-returns a value that is one less than the @code{tv_sec} part of the return
-value of @code{gettimeofday} or @code{timespec_get}.
+glibc 2.31 or newer on Linux, native Windows.
+Namely, in the first 1 to 2.5 milliseconds of every second (or, on Windows,
+in the first 5 milliseconds of every second), @code{time} returns a value
+that is one less than the @code{tv_sec} part of the return value of
+@code{gettimeofday} or @code{timespec_get}.
 @end itemize
 
 Portability problems not fixed by Gnulib:
diff --git a/m4/time.m4 b/m4/time.m4
index 0dbb6011ed..504ec77f88 100644
--- a/m4/time.m4
+++ b/m4/time.m4
@@ -1,4 +1,4 @@
-# time.m4 serial 1
+# time.m4 serial 2
 dnl Copyright (C) 2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -12,9 +12,11 @@ AC_DEFUN([gl_FUNC_TIME]
   dnl glibc has the bug https://sourceware.org/bugzilla/show_bug.cgi?id=30200 .
   AC_CACHE_CHECK([whether time() works],
     [gl_cv_func_time_works],
-    [dnl Guess that it works except on glibc >= 2.31 with Linux.
-     dnl And binaries produced on glibc < 2.31 need to run fine on newer
-     dnl glibc versions as well; therefore ignore __GLIBC_MINOR__.
+    [dnl Guess that it works except on
+     dnl   - glibc >= 2.31 with Linux. And binaries produced on glibc < 2.31
+     dnl     need to run fine on newer glibc versions as well; therefore ignore
+     dnl     __GLIBC_MINOR__.
+     dnl   - native Windows.
      case "$host_os" in
        linux*-gnu*)
          AC_EGREP_CPP([Unlucky], [
@@ -28,6 +30,7 @@ AC_DEFUN([gl_FUNC_TIME]
            [gl_cv_func_time_works="guessing no"],
            [gl_cv_func_time_works="guessing yes"])
          ;;
+       mingw*) gl_cv_func_time_works="guessing no";;
        *) gl_cv_func_time_works="guessing yes";;
      esac
     ])
diff --git a/modules/time b/modules/time
index 45f5ffd35f..2729ad06ea 100644
--- a/modules/time
+++ b/modules/time
@@ -7,6 +7,7 @@ m4/time.m4
 
 Depends-on:
 time-h
+gettimeofday    [test $REPLACE_TIME = 1]
 
 configure.ac:
 gl_FUNC_TIME






reply via email to

[Prev in Thread] Current Thread [Next in Thread]