123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- /*
- * Copyright 2022-2023 The OpenSSL Project Authors. All Rights Reserved.
- *
- * Licensed under the Apache License 2.0 (the "License"). You may not use
- * this file except in compliance with the License. You can obtain a copy
- * in the file LICENSE in the source distribution or at
- * https://www.openssl.org/source/license.html
- */
- #include <errno.h>
- #include <openssl/err.h>
- #include "internal/time.h"
- OSSL_TIME ossl_time_now(void)
- {
- OSSL_TIME r;
- #if defined(_WIN32) && !defined(OPENSSL_SYS_UEFI)
- SYSTEMTIME st;
- union {
- unsigned __int64 ul;
- FILETIME ft;
- } now;
- GetSystemTime(&st);
- SystemTimeToFileTime(&st, &now.ft);
- /* re-bias to 1/1/1970 */
- # ifdef __MINGW32__
- now.ul -= 116444736000000000ULL;
- # else
- now.ul -= 116444736000000000UI64;
- # endif
- r.t = ((uint64_t)now.ul) * (OSSL_TIME_SECOND / 10000000);
- #else /* defined(_WIN32) */
- struct timeval t;
- if (gettimeofday(&t, NULL) < 0) {
- ERR_raise_data(ERR_LIB_SYS, get_last_sys_error(),
- "calling gettimeofday()");
- return ossl_time_zero();
- }
- if (t.tv_sec <= 0)
- r.t = t.tv_usec <= 0 ? 0 : t.tv_usec * OSSL_TIME_US;
- else
- r.t = ((uint64_t)t.tv_sec * 1000000 + t.tv_usec) * OSSL_TIME_US;
- #endif /* defined(_WIN32) */
- return r;
- }
|