Add support for using time64 on big-endian machines.
[uclibc-ng.git] / libc / sysdeps / linux / common / clock_getres.c
blobfd0f8c14cdbe62806b853f71b3fe099a60952e01
1 /*
2 * clock_getres() for uClibc
4 * Copyright (C) 2005 by Peter Kjellerstedt <pkj@axis.com>
5 * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
7 * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
8 */
10 #include <sys/syscall.h>
11 #include <time.h>
13 #if defined(__UCLIBC_USE_TIME64__) && defined(__NR_clock_getres_time64)
14 #include "internal/time64_helpers.h"
16 int clock_getres(clockid_t clock_id, struct timespec *res)
18 struct __ts64_struct __ts64;
19 int __ret = INLINE_SYSCALL(clock_getres_time64, 2, clock_id, &__ts64);
20 if (__ret == 0 && res) {
21 res->tv_sec = __ts64.tv_sec;
22 res->tv_nsec = __ts64.tv_nsec;
25 return __ret;
27 #elif defined(__NR_clock_getres)
28 _syscall2(int, clock_getres, clockid_t, clock_id, struct timespec*, res)
29 #else
30 # include <unistd.h>
32 int clock_getres(clockid_t clock_id, struct timespec* res)
34 int retval = -1;
36 switch (clock_id) {
37 case CLOCK_REALTIME:
38 if (res) {
39 long clk_tck;
41 if ((clk_tck = sysconf(_SC_CLK_TCK)) < 0)
42 clk_tck = 100;
43 res->tv_sec = 0;
44 res->tv_nsec = 1000000000 / clk_tck;
46 retval = 0;
47 break;
49 default:
50 errno = EINVAL;
51 break;
54 return retval;
56 #endif
57 libc_hidden_def(clock_getres)