mirror of https://gerrit.osmocom.org/libosmocore
core: Add timespec helper macros and make timer_compat.h public
If a monotonic clock must be used, then the clock_gettime API is used which uses timespec structures. Linux systems by default don't provide helpers to calculate time using timespecs, so let's add them here. Let's also make this header public so these helpers can be used in other projects using libosmocore (expected user: libosmo-netif). Change-Id: I45fc993b9bb0a343763238bf463c8640f47b00f1changes/48/6948/2
parent
cc81722736
commit
726ba36201
|
@ -47,6 +47,7 @@ nobase_include_HEADERS = \
|
|||
osmocom/core/strrb.h \
|
||||
osmocom/core/talloc.h \
|
||||
osmocom/core/timer.h \
|
||||
osmocom/core/timer_compat.h \
|
||||
osmocom/core/utils.h \
|
||||
osmocom/core/write_queue.h \
|
||||
osmocom/crypt/auth.h \
|
||||
|
@ -148,7 +149,6 @@ nobase_include_HEADERS += \
|
|||
endif
|
||||
|
||||
noinst_HEADERS = \
|
||||
osmocom/core/timer_compat.h \
|
||||
osmocom/gsm/kasumi.h osmocom/gsm/gea.h
|
||||
|
||||
osmocom/core/bit%gen.h: osmocom/core/bitXXgen.h.tpl
|
||||
|
|
|
@ -71,5 +71,49 @@
|
|||
} while (0)
|
||||
#endif
|
||||
|
||||
/* Convenience macros for operations on timespecs.
|
||||
NOTE: `timercmp' does not work for >= or <=. */
|
||||
|
||||
#ifndef timespecisset
|
||||
# define timespecisset(tvp) ((tvp)->tv_sec || (tvp)->tv_nsec)
|
||||
#endif
|
||||
|
||||
#ifndef timespecclear
|
||||
# define timespecclear(tvp) ((tvp)->tv_sec = (tvp)->tv_nsec = 0)
|
||||
#endif
|
||||
|
||||
#ifndef timespeccmp
|
||||
# define timespeccmp(a, b, CMP) \
|
||||
(((a)->tv_sec == (b)->tv_sec) ? \
|
||||
((a)->tv_nsec CMP (b)->tv_nsec) : \
|
||||
((a)->tv_sec CMP (b)->tv_sec))
|
||||
#endif
|
||||
|
||||
#ifndef timespecadd
|
||||
# define timespecadd(a, b, result) \
|
||||
do { \
|
||||
(result)->tv_sec = (a)->tv_sec + (b)->tv_sec; \
|
||||
(result)->tv_nsec = (a)->tv_nsec + (b)->tv_nsec; \
|
||||
if ((result)->tv_nsec >= 1000000000) \
|
||||
{ \
|
||||
++(result)->tv_sec; \
|
||||
(result)->tv_nsec -= 1000000000; \
|
||||
} \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#ifndef timespecsub
|
||||
# define timespecsub(a, b, result) \
|
||||
do { \
|
||||
(result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \
|
||||
(result)->tv_nsec = (a)->tv_nsec - (b)->tv_nsec; \
|
||||
if ((result)->tv_nsec < 0) { \
|
||||
--(result)->tv_sec; \
|
||||
(result)->tv_nsec += 1000000000; \
|
||||
} \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/*! @} */
|
||||
|
|
Loading…
Reference in New Issue