1 /* Copyright (C) 1999-2022 Free Software Foundation, Inc. 2 This file is part of the GNU C Library. 3 4 The GNU C Library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Lesser General Public 6 License as published by the Free Software Foundation; either 7 version 2.1 of the License, or (at your option) any later version. 8 9 The GNU C Library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public 15 License along with the GNU C Library; if not, see 16 <https://www.gnu.org/licenses/>. */ 17 18 #define ntp_gettime ntp_gettime_redirect 19 20 #include <time.h> 21 #include <sys/timex.h> 22 23 #undef ntp_gettime 24 25 #ifndef MOD_OFFSET 26 # define modes mode 27 #endif 28 29 /* clock_adjtime64 with CLOCK_REALTIME does not trigger EINVAL, 30 ENODEV, or EOPNOTSUPP. It might still trigger EPERM. */ 31 32 int __ntp_gettime64(struct __ntptimeval64 * ntv)33__ntp_gettime64 (struct __ntptimeval64 *ntv) 34 { 35 struct __timex64 tntx; 36 int result; 37 38 tntx.modes = 0; 39 result = __clock_adjtime64 (CLOCK_REALTIME, &tntx); 40 ntv->time = tntx.time; 41 ntv->maxerror = tntx.maxerror; 42 ntv->esterror = tntx.esterror; 43 ntv->tai = tntx.tai; 44 return result; 45 } 46 47 #if __TIMESIZE != 64 libc_hidden_def(__ntp_gettime64)48libc_hidden_def (__ntp_gettime64) 49 50 int 51 __ntp_gettime (struct ntptimeval *ntv) 52 { 53 struct __ntptimeval64 ntv64; 54 int result; 55 56 result = __ntp_gettime64 (&ntv64); 57 *ntv = valid_ntptimeval64_to_ntptimeval (ntv64); 58 59 return result; 60 } 61 #endif 62 strong_alias (__ntp_gettime, ntp_gettime) 63