Mercurial > gnulib
changeset 39847:7245e73971d4
timespec: new function current_timespec
* lib/gettime.c (gettime): Prefer clock_gettime to nanotime,
and don’t worry about it failing on a CLOCK_REALTIME arg.
POSIX requires it to succeed and I don’t know of any
counterexamples where the fallbacks would work.
(current_timespec): New function, taken from Emacs. It is more
convenient than gettime, and can help register allocation.
* lib/timespec.h: Include arg-nonnull.h.
(current_timespec): New declaration.
(gettime, settime): Declare args to be nonnull.
* modules/timespec (Depends-on): Add snippet/arg-nonnull.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Sun, 16 Sep 2018 14:41:36 -0700 |
parents | dbb326309f2a |
children | b7ec445e40de |
files | ChangeLog lib/gettime.c lib/timespec.h modules/timespec |
diffstat | 4 files changed, 38 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Sun Sep 16 19:12:44 2018 +0200 +++ b/ChangeLog Sun Sep 16 14:41:36 2018 -0700 @@ -1,3 +1,17 @@ +2018-09-16 Paul Eggert <eggert@cs.ucla.edu> + + timespec: new function current_timespec + * lib/gettime.c (gettime): Prefer clock_gettime to nanotime, + and don’t worry about it failing on a CLOCK_REALTIME arg. + POSIX requires it to succeed and I don’t know of any + counterexamples where the fallbacks would work. + (current_timespec): New function, taken from Emacs. It is more + convenient than gettime, and can help register allocation. + * lib/timespec.h: Include arg-nonnull.h. + (current_timespec): New declaration. + (gettime, settime): Declare args to be nonnull. + * modules/timespec (Depends-on): Add snippet/arg-nonnull. + 2018-09-16 Bruno Haible <bruno@clisp.org> setlocale: Improve locale handling on macOS 10.12 or newer.
--- a/lib/gettime.c Sun Sep 16 19:12:44 2018 +0200 +++ b/lib/gettime.c Sun Sep 16 14:41:36 2018 -0700 @@ -28,21 +28,24 @@ void gettime (struct timespec *ts) { -#if HAVE_NANOTIME +#if defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME + clock_gettime (CLOCK_REALTIME, ts); +#elif HAVE_NANOTIME nanotime (ts); #else - -# if defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME - if (clock_gettime (CLOCK_REALTIME, ts) == 0) - return; -# endif - - { - struct timeval tv; - gettimeofday (&tv, NULL); - ts->tv_sec = tv.tv_sec; - ts->tv_nsec = tv.tv_usec * 1000; - } - + struct timeval tv; + gettimeofday (&tv, NULL); + ts->tv_sec = tv.tv_sec; + ts->tv_nsec = tv.tv_usec * 1000; #endif } + +/* Return the current system time as a struct timespec. */ + +struct timespec +current_timespec (void) +{ + struct timespec ts; + gettime (&ts); + return ts; +}
--- a/lib/timespec.h Sun Sep 16 19:12:44 2018 +0200 +++ b/lib/timespec.h Sun Sep 16 14:41:36 2018 -0700 @@ -17,9 +17,9 @@ along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if ! defined TIMESPEC_H -# define TIMESPEC_H +#define TIMESPEC_H -# include <time.h> +#include <time.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." @@ -33,6 +33,7 @@ extern "C" { #endif +#include "arg-nonnull.h" #include "verify.h" /* Inverse resolution of timespec timestamps (in units per second), @@ -122,8 +123,9 @@ return a.tv_sec + a.tv_nsec / 1e9; } -void gettime (struct timespec *); -int settime (struct timespec const *); +struct timespec current_timespec (void); +void gettime (struct timespec *) _GL_ARG_NONNULL ((1)); +int settime (struct timespec const *) _GL_ARG_NONNULL ((1)); #ifdef __cplusplus }