1b8daa45aSPetr Hosek //===-- Implementation of timespec_get for Linux --------------------------===// 2b8daa45aSPetr Hosek // 3b8daa45aSPetr Hosek // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4b8daa45aSPetr Hosek // See https://llvm.org/LICENSE.txt for license information. 5b8daa45aSPetr Hosek // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6b8daa45aSPetr Hosek // 7b8daa45aSPetr Hosek //===----------------------------------------------------------------------===// 8b8daa45aSPetr Hosek 9b8daa45aSPetr Hosek #include "src/time/timespec_get.h" 10b8daa45aSPetr Hosek #include "hdr/time_macros.h" 11b8daa45aSPetr Hosek #include "src/__support/common.h" 12b8daa45aSPetr Hosek #include "src/__support/macros/config.h" 13*e6cf5d28SSchrodinger ZHU Yifan #include "src/__support/time/clock_gettime.h" 14b8daa45aSPetr Hosek #include "src/errno/libc_errno.h" 15b8daa45aSPetr Hosek 16b8daa45aSPetr Hosek namespace LIBC_NAMESPACE_DECL { 17b8daa45aSPetr Hosek 18b8daa45aSPetr Hosek LLVM_LIBC_FUNCTION(int, timespec_get, (struct timespec * ts, int base)) { 19b8daa45aSPetr Hosek clockid_t clockid; 20b8daa45aSPetr Hosek switch (base) { 21b8daa45aSPetr Hosek case TIME_UTC: 22b8daa45aSPetr Hosek clockid = CLOCK_REALTIME; 23b8daa45aSPetr Hosek break; 24b8daa45aSPetr Hosek case TIME_MONOTONIC: 25b8daa45aSPetr Hosek clockid = CLOCK_MONOTONIC; 26b8daa45aSPetr Hosek break; 27b8daa45aSPetr Hosek case TIME_ACTIVE: 28b8daa45aSPetr Hosek clockid = CLOCK_PROCESS_CPUTIME_ID; 29b8daa45aSPetr Hosek break; 30b8daa45aSPetr Hosek case TIME_THREAD_ACTIVE: 31b8daa45aSPetr Hosek clockid = CLOCK_THREAD_CPUTIME_ID; 32b8daa45aSPetr Hosek break; 33b8daa45aSPetr Hosek default: 34b8daa45aSPetr Hosek return 0; 35b8daa45aSPetr Hosek } 36b8daa45aSPetr Hosek 37b8daa45aSPetr Hosek auto result = internal::clock_gettime(clockid, ts); 38b8daa45aSPetr Hosek if (!result.has_value()) { 39b8daa45aSPetr Hosek libc_errno = result.error(); 40b8daa45aSPetr Hosek return 0; 41b8daa45aSPetr Hosek } 42b8daa45aSPetr Hosek return base; 43b8daa45aSPetr Hosek } 44b8daa45aSPetr Hosek 45b8daa45aSPetr Hosek } // namespace LIBC_NAMESPACE_DECL 46