diff options
Diffstat (limited to 'time')
-rw-r--r-- | time/Makefile | 8 | ||||
-rw-r--r-- | time/settimeofday.c | 24 | ||||
-rw-r--r-- | time/settimezone.c | 28 |
3 files changed, 52 insertions, 8 deletions
diff --git a/time/Makefile b/time/Makefile index ad8844ea34..6de4e418d9 100644 --- a/time/Makefile +++ b/time/Makefile @@ -31,13 +31,13 @@ headers := time.h sys/time.h sys/timeb.h bits/time.h \ routines := offtime asctime clock ctime ctime_r difftime \ gmtime localtime mktime time \ - gettimeofday settimeofday adjtime tzset \ - tzfile getitimer setitimer \ + gettimeofday settimeofday settimezone \ + adjtime tzset tzfile getitimer setitimer \ stime dysize timegm ftime \ getdate strptime strptime_l \ strftime wcsftime strftime_l wcsftime_l \ - timespec_get \ - clock_getcpuclockid clock_getres \ + timespec_get \ + clock_getcpuclockid clock_getres \ clock_gettime clock_settime clock_nanosleep aux := era alt_digit lc-time-cleanup diff --git a/time/settimeofday.c b/time/settimeofday.c index 6aa4832d65..ad57ad41a1 100644 --- a/time/settimeofday.c +++ b/time/settimeofday.c @@ -16,6 +16,7 @@ <https://www.gnu.org/licenses/>. */ #include <errno.h> +#include <time.h> #include <sys/time.h> /* Set the current time of day and timezone information. @@ -23,9 +24,24 @@ int __settimeofday (const struct timeval *tv, const struct timezone *tz) { - __set_errno (ENOSYS); - return -1; + if (__glibc_unlikely (tz != 0)) + { + if (tv != 0) + { + __set_errno (EINVAL); + return -1; + } + return __settimezone (tz); + } + + struct timespec ts; + TIMEVAL_TO_TIMESPEC (tv, &ts); + return __clock_settime (CLOCK_REALTIME, &ts); } -stub_warning (settimeofday) -weak_alias (__settimeofday, settimeofday) +#ifdef VERSION_settimeofday +weak_alias (__settimeofday, __settimeofday_w); +default_symbol_version (__settimeofday_w, settimeofday, VERSION_settimeofday); +#else +weak_alias (__settimeofday, settimeofday); +#endif diff --git a/time/settimezone.c b/time/settimezone.c new file mode 100644 index 0000000000..b9969c9dd5 --- /dev/null +++ b/time/settimezone.c @@ -0,0 +1,28 @@ +/* Copyright (C) 2019 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 <errno.h> +#include <sys/time.h> + +/* Set the system-wide timezone. + This call is restricted to the super-user. */ +int +__settimezone (const struct timezone *tz) +{ + __set_errno (ENOSYS); + return -1; +} |