summaryrefslogtreecommitdiff
path: root/lib/system.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/system.c')
-rw-r--r--lib/system.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/system.c b/lib/system.c
index 1a17974d58..1bbbf79c84 100644
--- a/lib/system.c
+++ b/lib/system.c
@@ -44,6 +44,26 @@ static HMODULE Crypt32_dll;
/* System specific function wrappers for certificate stores.
*/
gnutls_time_func gnutls_time;
+gnutls_gettime_func gnutls_gettime;
+
+/* emulate gnulib's gettime using gettimeofday to avoid linking to
+ * librt */
+static void _gnutls_gettime(struct timespec *t)
+{
+#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_REALTIME)
+ clock_gettime(CLOCK_REALTIME, t);
+#else
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ t->tv_sec = tv.tv_sec;
+ t->tv_nsec = tv.tv_usec * 1000;
+#endif
+}
+
+void _gnutls_global_set_gettime_function(gnutls_gettime_func gettime_func)
+{
+ gnutls_gettime = gettime_func;
+}
int gnutls_system_global_init(void)
{
@@ -66,6 +86,7 @@ int gnutls_system_global_init(void)
Crypt32_dll = crypto;
#endif
gnutls_time = time;
+ gnutls_gettime = _gnutls_gettime;
return 0;
}
@@ -75,6 +96,7 @@ void gnutls_system_global_deinit(void)
FreeLibrary(Crypt32_dll);
#endif
gnutls_time = time;
+ gnutls_gettime = _gnutls_gettime;
}