diff options
Diffstat (limited to 'src/pulse/timeval.c')
-rw-r--r-- | src/pulse/timeval.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/pulse/timeval.c b/src/pulse/timeval.c index 70ceb71e..9708a735 100644 --- a/src/pulse/timeval.c +++ b/src/pulse/timeval.c @@ -1,5 +1,3 @@ -/* $Id$ */ - /*** This file is part of PulseAudio. @@ -140,7 +138,7 @@ struct timeval* pa_timeval_add(struct timeval *tv, pa_usec_t v) { tv->tv_usec += (suseconds_t) v; /* Normalize */ - while (tv->tv_usec >= PA_USEC_PER_SEC) { + while ((unsigned) tv->tv_usec >= PA_USEC_PER_SEC) { tv->tv_sec++; tv->tv_usec -= PA_USEC_PER_SEC; } @@ -148,6 +146,24 @@ struct timeval* pa_timeval_add(struct timeval *tv, pa_usec_t v) { return tv; } +struct timeval* pa_timeval_sub(struct timeval *tv, pa_usec_t v) { + unsigned long secs; + pa_assert(tv); + + secs = (unsigned long) (v/PA_USEC_PER_SEC); + tv->tv_sec -= secs; + v -= ((pa_usec_t) secs) * PA_USEC_PER_SEC; + + if (tv->tv_usec >= (suseconds_t) v) + tv->tv_usec -= (suseconds_t) v; + else { + tv->tv_sec --; + tv->tv_usec = tv->tv_usec + PA_USEC_PER_SEC - v; + } + + return tv; +} + struct timeval* pa_timeval_store(struct timeval *tv, pa_usec_t v) { pa_assert(tv); |