aboutsummaryrefslogtreecommitdiff
path: root/src/xz
diff options
context:
space:
mode:
authorLasse Collin <lasse.collin@tukaani.org>2023-09-24 22:58:53 +0300
committerLasse Collin <lasse.collin@tukaani.org>2023-10-22 18:59:45 +0300
commit46fd991cd2808ef62554853864c946232e7547f0 (patch)
tree183cc21c1651ae03746a83add25724fd8bdfa422 /src/xz
parentxz/Windows: Use GetTickCount64() with MinGW-w64 if using Vista threads. (diff)
downloadxz-46fd991cd2808ef62554853864c946232e7547f0.tar.xz
xz/Windows: Ensure that clock_gettime() isn't used with MinGW-w64.
This commit alone doesn't change anything in the real-world: - configure.ac currently checks for clock_gettime() only when using pthreads. - CMakeLists.txt doesn't check for clock_gettime() on Windows. So clock_gettime() wasn't used with MinGW-w64 before either. clock_gettime() provides monotonic time and it's better than gettimeofday() in this sense. But clock_gettime() is defined in winpthreads, and liblzma or xz needs nothing else from winpthreads. By avoiding clock_gettime(), we avoid the dependency on libwinpthread-1.dll or the need to link against the static version. As a bonus, GetTickCount64() and MinGW-w64's gettimeofday() can be faster than clock_gettime(CLOCK_MONOTONIC, &tv). The resolution is more than good enough for the progress indicator in xz.
Diffstat (limited to 'src/xz')
-rw-r--r--src/xz/mytime.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/xz/mytime.c b/src/xz/mytime.c
index ddfd5deb..4d8da513 100644
--- a/src/xz/mytime.c
+++ b/src/xz/mytime.c
@@ -14,7 +14,7 @@
#if defined(MYTHREAD_VISTA) || defined(_MSC_VER)
// Nothing
-#elif defined(HAVE_CLOCK_GETTIME)
+#elif defined(HAVE_CLOCK_GETTIME) && !defined(__MINGW32__)
# include <time.h>
#else
# include <sys/time.h>
@@ -59,7 +59,12 @@ mytime_now(void)
// there's no reason to avoid a WinVista API here either.
return GetTickCount64();
-#elif defined(HAVE_CLOCK_GETTIME)
+#elif defined(HAVE_CLOCK_GETTIME) && !defined(__MINGW32__)
+ // MinGW-w64: clock_gettime() is defined in winpthreads but we need
+ // nothing else from winpthreads. By avoiding clock_gettime(), we
+ // avoid the dependency on libwinpthread-1.dll or the need to link
+ // against the static version. The downside is that the fallback
+ // method, gettimeofday(), doesn't provide monotonic time.
struct timespec tv;
# ifdef HAVE_CLOCK_MONOTONIC