diff options
-rw-r--r-- | sysdeps/unix/sysv/linux/Makefile | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/tst-ntp_gettime.c | 56 |
2 files changed, 57 insertions, 1 deletions
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index e42bc7f13b..a6c087b5ea 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -108,7 +108,7 @@ tests += tst-clone tst-clone2 tst-clone3 tst-fanotify tst-personality \ tst-rlimit-infinity tst-ofdlocks tst-gettid tst-gettid-kill \ tst-tgkill tst-sysvsem-linux tst-sysvmsg-linux tst-sysvshm-linux \ tst-timerfd tst-ppoll tst-futimens tst-utime tst-utimes \ - tst-clock_adjtime tst-adjtimex tst-ntp_adjtime + tst-clock_adjtime tst-adjtimex tst-ntp_adjtime tst-ntp_gettime # Test for the symbol version of fcntl that was replaced in glibc 2.28. ifeq ($(have-GLIBC_2.27)$(build-shared),yesyes) diff --git a/sysdeps/unix/sysv/linux/tst-ntp_gettime.c b/sysdeps/unix/sysv/linux/tst-ntp_gettime.c new file mode 100644 index 0000000000..90cff8aea1 --- /dev/null +++ b/sysdeps/unix/sysv/linux/tst-ntp_gettime.c @@ -0,0 +1,56 @@ +/* Test for ntp_gettime. + Copyright (C) 2021 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <time.h> +#include <stdlib.h> +#include <sys/timex.h> +#include <support/check.h> +#include <support/xtime.h> + +#ifndef NTP_GETTIME_SYSCALL +# define NTP_GETTIME_SYSCALL ntp_gettime +#endif + +#define STR(__s) #__s + +static int +do_test (void) +{ + struct timespec tv_before_ntp, tv_after_ntp; + struct ntptimeval ntv; + + /* To prevent seconds rollover (which is very unlikely though), + loop until we do match seconds values before and after + call to ntp_gettime. */ + do + { + tv_before_ntp = xclock_now (CLOCK_REALTIME); + + int ret = NTP_GETTIME_SYSCALL (&ntv); + if (ret == -1) + FAIL_EXIT1 (STR(NTP_GETTIME_SYSCALL)" failed: %m\n"); + + tv_after_ntp = xclock_now (CLOCK_REALTIME); + } + while (tv_after_ntp.tv_sec != tv_before_ntp.tv_sec); + + TEST_COMPARE (tv_after_ntp.tv_sec, ntv.time.tv_sec); + return 0; +} + +#include <support/test-driver.c> |