diff options
Diffstat (limited to 'include/asterisk/time.h')
-rw-r--r-- | include/asterisk/time.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/include/asterisk/time.h b/include/asterisk/time.h index f2382df33..529490630 100644 --- a/include/asterisk/time.h +++ b/include/asterisk/time.h @@ -23,10 +23,16 @@ #ifndef _ASTERISK_TIME_H #define _ASTERISK_TIME_H +#include "asterisk/autoconfig.h" + #ifdef HAVE_SYS_TIME_H #include <sys/time.h> #endif +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif + #include "asterisk/inline_api.h" /* We have to let the compiler learn what types to use for the elements of a @@ -142,6 +148,34 @@ struct timeval ast_tvnow(void), ) /*! + * \brief Returns current timespec. Meant to avoid calling ast_tvnow() just to + * create a timespec from the timeval it returns. + */ +#if defined _POSIX_TIMERS && _POSIX_TIMERS > 0 +AST_INLINE_API( +struct timespec ast_tsnow(void), +{ + struct timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + return ts; +} +) +#else +AST_INLINE_API( +struct timespec ast_tsnow(void), +{ + struct timeval tv = ast_tvnow(); + struct timespec ts; + /* Can't use designated initializer, because it does odd things with + * the AST_INLINE_API macro. Go figure. */ + ts.tv_sec = tv.tv_sec; + ts.tv_nsec = tv.tv_usec * 1000; + return ts; +} +) +#endif + +/*! * \brief Returns the sum of two timevals a + b */ struct timeval ast_tvadd(struct timeval a, struct timeval b); |