aboutsummaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/openssl/Makefile.am6
-rw-r--r--apps/openssl/compat/clock_gettime_osx.c26
2 files changed, 32 insertions, 0 deletions
diff --git a/apps/openssl/Makefile.am b/apps/openssl/Makefile.am
index 9b9eb10..f100adb 100644
--- a/apps/openssl/Makefile.am
+++ b/apps/openssl/Makefile.am
@@ -74,6 +74,12 @@ openssl_SOURCES += compat/poll_win.c
74endif 74endif
75endif 75endif
76 76
77if !HAVE_CLOCK_GETTIME
78if HOST_DARWIN
79openssl_SOURCES += compat/clock_gettime_osx.c
80endif
81endif
82
77if !HAVE_STRTONUM 83if !HAVE_STRTONUM
78openssl_SOURCES += compat/strtonum.c 84openssl_SOURCES += compat/strtonum.c
79endif 85endif
diff --git a/apps/openssl/compat/clock_gettime_osx.c b/apps/openssl/compat/clock_gettime_osx.c
new file mode 100644
index 0000000..e0a5f59
--- /dev/null
+++ b/apps/openssl/compat/clock_gettime_osx.c
@@ -0,0 +1,26 @@
1#include <time.h>
2
3#include <mach/mach_time.h>
4#define ORWL_NANO (+1.0E-9)
5#define ORWL_GIGA UINT64_C(1000000000)
6
7int
8clock_gettime(clock_id_t clock_id, struct timespec *tp)
9{
10 static double orwl_timebase = 0.0;
11 static uint64_t orwl_timestart = 0;
12
13 if (!orwl_timestart) {
14 mach_timebase_info_data_t tb = { 0 };
15 mach_timebase_info(&tb);
16 orwl_timebase = tb.numer;
17 orwl_timebase /= tb.denom;
18 orwl_timestart = mach_absolute_time();
19 }
20
21 double diff = (mach_absolute_time() - orwl_timestart) * orwl_timebase;
22 tp->tv_sec = diff * ORWL_NANO;
23 tp->tv_nsec = diff - (tp->tv_sec * ORWL_GIGA);
24
25 return 0;
26}