summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYann Collet <Cyan4973@users.noreply.github.com>2018-01-17 20:45:09 (GMT)
committerGitHub <noreply@github.com>2018-01-17 20:45:09 (GMT)
commitad12efa4e80855eb6267f5d3a7c50669e0565919 (patch)
treefb83de92cb51470a8a5fa2ee1bff36a7e32928f0
parentcd63b97f963b5d079b0fe6f1a0bd3868b1d034e4 (diff)
parent7dba09af47dd3daa1562a6332a643a1a59dba4a8 (diff)
downloadlz4-ad12efa4e80855eb6267f5d3a7c50669e0565919.zip
lz4-ad12efa4e80855eb6267f5d3a7c50669e0565919.tar.gz
lz4-ad12efa4e80855eb6267f5d3a7c50669e0565919.tar.bz2
Merge pull request #453 from lz4/clockfix
fix #450 : use more restrictive conditions for clock_gettime()
-rw-r--r--programs/util.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/programs/util.h b/programs/util.h
index fc7f63e..a3576d7 100644
--- a/programs/util.h
+++ b/programs/util.h
@@ -141,6 +141,7 @@ extern "C" {
* Time functions
******************************************/
#if defined(_WIN32) /* Windows */
+
typedef LARGE_INTEGER UTIL_time_t;
UTIL_STATIC UTIL_time_t UTIL_getTime(void) { UTIL_time_t x; QueryPerformanceCounter(&x); return x; }
UTIL_STATIC U64 UTIL_getSpanTimeMicro(UTIL_time_t clockStart, UTIL_time_t clockEnd)
@@ -165,7 +166,9 @@ extern "C" {
}
return 1000000000ULL*(clockEnd.QuadPart - clockStart.QuadPart)/ticksPerSecond.QuadPart;
}
+
#elif defined(__APPLE__) && defined(__MACH__)
+
#include <mach/mach_time.h>
typedef U64 UTIL_time_t;
UTIL_STATIC UTIL_time_t UTIL_getTime(void) { return mach_absolute_time(); }
@@ -189,7 +192,9 @@ extern "C" {
}
return ((clockEnd - clockStart) * (U64)rate.numer) / ((U64)rate.denom);
}
-#elif (PLATFORM_POSIX_VERSION >= 200112L)
+
+#elif (PLATFORM_POSIX_VERSION >= 200112L) && (defined __UCLIBC__ || ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 17) || __GLIBC__ > 2))
+
#include <time.h>
typedef struct timespec UTIL_time_t;
UTIL_STATIC UTIL_time_t UTIL_getTime(void)
@@ -227,7 +232,9 @@ extern "C" {
nano += diff.tv_nsec;
return nano;
}
+
#else /* relies on standard C (note : clock_t measurements can be wrong when using multi-threading) */
+
typedef clock_t UTIL_time_t;
UTIL_STATIC UTIL_time_t UTIL_getTime(void) { return clock(); }
UTIL_STATIC U64 UTIL_getSpanTimeMicro(UTIL_time_t clockStart, UTIL_time_t clockEnd) { return 1000000ULL * (clockEnd - clockStart) / CLOCKS_PER_SEC; }