diff options
| author | Brent Cook <busterb@gmail.com> | 2018-03-22 20:50:24 -0500 |
|---|---|---|
| committer | Brent Cook <busterb@gmail.com> | 2018-03-22 21:04:43 -0500 |
| commit | 987aa6a084312be8501bdda42b0e5aab3b84d52a (patch) | |
| tree | 9c3cf68f0ca3cb172d5d2238563c979b29543d08 /apps | |
| parent | 78600e9bec2b52f0f8a0f7ce376f3783999bb824 (diff) | |
| download | portable-987aa6a084312be8501bdda42b0e5aab3b84d52a.tar.gz portable-987aa6a084312be8501bdda42b0e5aab3b84d52a.tar.bz2 portable-987aa6a084312be8501bdda42b0e5aab3b84d52a.zip | |
add clock_gettime for macos 10.11 and earlier
Diffstat (limited to 'apps')
| -rw-r--r-- | apps/openssl/Makefile.am | 6 | ||||
| -rw-r--r-- | apps/openssl/compat/clock_gettime_osx.c | 26 |
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 | |||
| 74 | endif | 74 | endif |
| 75 | endif | 75 | endif |
| 76 | 76 | ||
| 77 | if !HAVE_CLOCK_GETTIME | ||
| 78 | if HOST_DARWIN | ||
| 79 | openssl_SOURCES += compat/clock_gettime_osx.c | ||
| 80 | endif | ||
| 81 | endif | ||
| 82 | |||
| 77 | if !HAVE_STRTONUM | 83 | if !HAVE_STRTONUM |
| 78 | openssl_SOURCES += compat/strtonum.c | 84 | openssl_SOURCES += compat/strtonum.c |
| 79 | endif | 85 | endif |
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 | |||
| 7 | int | ||
| 8 | clock_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 | } | ||
