]>
Commit | Line | Data |
---|---|---|
d6bfdf67 | 1 | /* |
da1c088f | 2 | * Copyright 2022-2023 The OpenSSL Project Authors. All Rights Reserved. |
d6bfdf67 P |
3 | * |
4 | * Licensed under the Apache License 2.0 (the "License"). You may not use | |
5 | * this file except in compliance with the License. You can obtain a copy | |
6 | * in the file LICENSE in the source distribution or at | |
7 | * https://www.openssl.org/source/license.html | |
8 | */ | |
9 | ||
10 | #include <errno.h> | |
11 | #include <openssl/err.h> | |
12 | #include "internal/time.h" | |
13 | ||
14 | OSSL_TIME ossl_time_now(void) | |
15 | { | |
d13c8b77 P |
16 | OSSL_TIME r; |
17 | ||
c0e090bd | 18 | #if defined(_WIN32) && !defined(OPENSSL_SYS_UEFI) |
d6bfdf67 P |
19 | SYSTEMTIME st; |
20 | union { | |
21 | unsigned __int64 ul; | |
22 | FILETIME ft; | |
23 | } now; | |
24 | ||
25 | GetSystemTime(&st); | |
26 | SystemTimeToFileTime(&st, &now.ft); | |
27 | /* re-bias to 1/1/1970 */ | |
28 | # ifdef __MINGW32__ | |
29 | now.ul -= 116444736000000000ULL; | |
30 | # else | |
31 | now.ul -= 116444736000000000UI64; | |
32 | # endif | |
d13c8b77 | 33 | r.t = ((uint64_t)now.ul) * (OSSL_TIME_SECOND / 10000000); |
02d0f87a | 34 | #else /* defined(_WIN32) */ |
d6bfdf67 P |
35 | struct timeval t; |
36 | ||
37 | if (gettimeofday(&t, NULL) < 0) { | |
38 | ERR_raise_data(ERR_LIB_SYS, get_last_sys_error(), | |
39 | "calling gettimeofday()"); | |
d13c8b77 | 40 | return ossl_time_zero(); |
d6bfdf67 P |
41 | } |
42 | if (t.tv_sec <= 0) | |
364c3b7b | 43 | r.t = t.tv_usec <= 0 ? 0 : t.tv_usec * OSSL_TIME_US; |
d13c8b77 | 44 | else |
364c3b7b | 45 | r.t = ((uint64_t)t.tv_sec * 1000000 + t.tv_usec) * OSSL_TIME_US; |
02d0f87a | 46 | #endif /* defined(_WIN32) */ |
d13c8b77 | 47 | return r; |
d6bfdf67 | 48 | } |