summaryrefslogtreecommitdiffstats
path: root/lib/timeval.c
diff options
context:
space:
mode:
authorCurl Upstream <curl-library@cool.haxx.se>2018-10-30 16:54:00 (GMT)
committerBrad King <brad.king@kitware.com>2018-10-31 13:41:28 (GMT)
commit9835e9075037db3d23ade0ef865c562b08cf6023 (patch)
tree004b65c185c842dadac199a1ecca1de6bda566a0 /lib/timeval.c
parent18812a9c3d395b368d8f3d85394b346472c8e858 (diff)
downloadCMake-9835e9075037db3d23ade0ef865c562b08cf6023.zip
CMake-9835e9075037db3d23ade0ef865c562b08cf6023.tar.gz
CMake-9835e9075037db3d23ade0ef865c562b08cf6023.tar.bz2
curl 2018-10-30 (19667715)
Code extracted from: https://github.com/curl/curl.git at commit 196677150f711a96c38ed123e621f1d4e995b2e5 (curl-7_62_0).
Diffstat (limited to 'lib/timeval.c')
-rw-r--r--lib/timeval.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/lib/timeval.c b/lib/timeval.c
index f4bf835..dce1a76 100644
--- a/lib/timeval.c
+++ b/lib/timeval.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -33,7 +33,8 @@ struct curltime Curl_now(void)
*/
struct curltime now;
#if !defined(_WIN32_WINNT) || !defined(_WIN32_WINNT_VISTA) || \
- (_WIN32_WINNT < _WIN32_WINNT_VISTA)
+ (_WIN32_WINNT < _WIN32_WINNT_VISTA) || \
+ (defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR))
DWORD milliseconds = GetTickCount();
now.tv_sec = milliseconds / 1000;
now.tv_usec = (milliseconds % 1000) * 1000;
@@ -60,7 +61,23 @@ struct curltime Curl_now(void)
struct timeval now;
struct curltime cnow;
struct timespec tsnow;
- if(0 == clock_gettime(CLOCK_MONOTONIC, &tsnow)) {
+
+ /*
+ ** clock_gettime() may be defined by Apple's SDK as weak symbol thus
+ ** code compiles but fails during run-time if clock_gettime() is
+ ** called on unsupported OS version.
+ */
+#if defined(__APPLE__) && (HAVE_BUILTIN_AVAILABLE == 1)
+ bool have_clock_gettime = FALSE;
+ if(__builtin_available(macOS 10.12, iOS 10, tvOS 10, watchOS 3, *))
+ have_clock_gettime = TRUE;
+#endif
+
+ if(
+#if defined(__APPLE__) && (HAVE_BUILTIN_AVAILABLE == 1)
+ have_clock_gettime &&
+#endif
+ (0 == clock_gettime(CLOCK_MONOTONIC, &tsnow))) {
cnow.tv_sec = tsnow.tv_sec;
cnow.tv_usec = (unsigned int)(tsnow.tv_nsec / 1000);
}