summaryrefslogtreecommitdiff
path: root/include/asterisk/time.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asterisk/time.h')
-rw-r--r--include/asterisk/time.h34
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);