From e30b6ac5d1127c368184232dc749cef28d0cbb6c Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Fri, 13 Jul 2012 12:21:04 +0200 Subject: timer: Add function osmo_timer_remaining() to determine remainign time --- src/timer.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/timer.c') diff --git a/src/timer.c b/src/timer.c index cca2a239..6d4abc26 100644 --- a/src/timer.c +++ b/src/timer.c @@ -126,6 +126,34 @@ int osmo_timer_pending(struct osmo_timer_list *timer) return timer->active; } +/*! \brief compute the remaining time of a timer + * \param[in] timer the to-be-checked timer + * \param[in] the current time (NULL if not known) + * \param[out] remaining remaining time until timer fires + * \return 0 if timer has not expired yet, -1 if it has + * + * This function can be used to determine the amount of time + * remaining until the expiration of the timer. + */ +int osmo_timer_remaining(const struct osmo_timer_list *timer, + const struct timeval *now, + struct timeval *remaining) +{ + struct timeval current_time; + + if (!now) { + gettimeofday(¤t_time, NULL); + now = ¤t_time; + } + + timersub(&timer->timeout, ¤t_time, remaining); + + if (remaining->tv_sec < 0) + return -1; + + return 0; +} + /* * if we have a nearest time return the delta between the current * time and the time of the nearest timer. -- cgit v1.2.3