From: Adhemerval Zanella Date: Mon, 2 Nov 2020 19:18:29 +0000 (-0300) Subject: linux: Allow adjtime with NULL argument [BZ #26833] X-Git-Tag: upstream/2.34~1325 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=75a193b7611bade31a150dfcc528b973e3d46231;p=platform%2Fupstream%2Fglibc.git linux: Allow adjtime with NULL argument [BZ #26833] The adjtime interface allows return the amount of time remaining from any previous adjustment that has not yet been completed by passing a NULL as first argument. This was introduced with y2038 support 0308077e3a. Checked on i686-linux-gnu. Reviewed-by: Lukasz Majewski --- diff --git a/sysdeps/unix/sysv/linux/adjtime.c b/sysdeps/unix/sysv/linux/adjtime.c index 3f9a4ea..6d1d1b6 100644 --- a/sysdeps/unix/sysv/linux/adjtime.c +++ b/sysdeps/unix/sysv/linux/adjtime.c @@ -68,11 +68,16 @@ libc_hidden_def (__adjtime64) int __adjtime (const struct timeval *itv, struct timeval *otv) { - struct __timeval64 itv64, otv64; + struct __timeval64 itv64, *pitv64 = NULL; + struct __timeval64 otv64; int retval; - itv64 = valid_timeval_to_timeval64 (*itv); - retval = __adjtime64 (&itv64, otv != NULL ? &otv64 : NULL); + if (itv != NULL) + { + itv64 = valid_timeval_to_timeval64 (*itv); + pitv64 = &itv64; + } + retval = __adjtime64 (pitv64, otv != NULL ? &otv64 : NULL); if (otv != NULL) *otv = valid_timeval64_to_timeval (otv64); diff --git a/time/Makefile b/time/Makefile index 26aa835..f27a75a 100644 --- a/time/Makefile +++ b/time/Makefile @@ -47,7 +47,8 @@ tests := test_time clocktest tst-posixtz tst-strptime tst_wcsftime \ tst-mktime3 tst-strptime2 bug-asctime bug-asctime_r bug-mktime1 \ tst-strptime3 bug-getdate1 tst-strptime-whitespace tst-ftime \ tst-tzname tst-y2039 bug-mktime4 tst-strftime2 tst-strftime3 \ - tst-clock tst-clock2 tst-clock_nanosleep tst-cpuclock1 + tst-clock tst-clock2 tst-clock_nanosleep tst-cpuclock1 \ + tst-adjtime include ../Rules diff --git a/time/tst-adjtime.c b/time/tst-adjtime.c new file mode 100644 index 0000000..ae2b37c --- /dev/null +++ b/time/tst-adjtime.c @@ -0,0 +1,44 @@ +/* Basic tests for adjtime. + Copyright (C) 2020 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 + . */ + +#include +#include + +#include +#include + + +static int +do_test (void) +{ + /* Check if the interface allows getting the amount of time remaining + from any previous adjustment that has not yet been completed. This + is a non-privileged function of adjtime. */ + struct timeval tv; + int r = adjtime (NULL, &tv); + if (r == -1) + { + if (errno == ENOSYS) + FAIL_UNSUPPORTED ("adjtime unsupported"); + FAIL_EXIT1 ("adjtime (NULL, ...) failed: %m"); + } + + return 0; +} + +#include