# HG changeset patch # User Paul Eggert # Date 1537134096 25200 # Node ID 7245e73971d44c6435a239ecdde96ce8fc8fc06a # Parent dbb326309f2afa7e410061a0cf3ec4e4bb8d67ee 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. diff -r dbb326309f2a -r 7245e73971d4 ChangeLog --- 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 + + 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 setlocale: Improve locale handling on macOS 10.12 or newer. diff -r dbb326309f2a -r 7245e73971d4 lib/gettime.c --- 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; +} diff -r dbb326309f2a -r 7245e73971d4 lib/timespec.h --- 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 . */ #if ! defined TIMESPEC_H -# define TIMESPEC_H +#define TIMESPEC_H -# include +#include #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 } diff -r dbb326309f2a -r 7245e73971d4 modules/timespec --- a/modules/timespec Sun Sep 16 19:12:44 2018 +0200 +++ b/modules/timespec Sun Sep 16 14:41:36 2018 -0700 @@ -8,6 +8,7 @@ Depends-on: extern-inline +snippet/arg-nonnull time verify