mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-06 04:30:28 +00:00
add a library of timeval manipulation functions, and change a large number of usses to use the new functions (bug #4504)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6146 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
49
utils.c
49
utils.c
@@ -493,6 +493,55 @@ int ast_false(const char *s)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define ONE_MILLION 1000000
|
||||
/*
|
||||
* put timeval in a valid range. usec is 0..999999
|
||||
* negative values are not allowed and truncated.
|
||||
*/
|
||||
static struct timeval tvfix(struct timeval a)
|
||||
{
|
||||
if (a.tv_usec >= ONE_MILLION) {
|
||||
ast_log(LOG_ERROR, "warning too large timestamp %ld.%ld\n",
|
||||
a.tv_sec, a.tv_usec);
|
||||
a.tv_sec += a.tv_usec % ONE_MILLION;
|
||||
a.tv_usec %= ONE_MILLION;
|
||||
} else if (a.tv_usec < 0) {
|
||||
ast_log(LOG_ERROR, "warning negative timestamp %ld.%ld\n",
|
||||
a.tv_sec, a.tv_usec);
|
||||
a.tv_usec = 0;
|
||||
}
|
||||
return a;
|
||||
}
|
||||
|
||||
struct timeval ast_tvadd(struct timeval a, struct timeval b)
|
||||
{
|
||||
/* consistency checks to guarantee usec in 0..999999 */
|
||||
a = tvfix(a);
|
||||
b = tvfix(b);
|
||||
a.tv_sec += b.tv_sec;
|
||||
a.tv_usec += b.tv_usec;
|
||||
if (a.tv_usec >= ONE_MILLION) {
|
||||
a.tv_sec++;
|
||||
a.tv_usec -= ONE_MILLION;
|
||||
}
|
||||
return a;
|
||||
}
|
||||
|
||||
struct timeval ast_tvsub(struct timeval a, struct timeval b)
|
||||
{
|
||||
/* consistency checks to guarantee usec in 0..999999 */
|
||||
a = tvfix(a);
|
||||
b = tvfix(b);
|
||||
a.tv_sec -= b.tv_sec;
|
||||
a.tv_usec -= b.tv_usec;
|
||||
if (a.tv_usec < 0) {
|
||||
a.tv_sec-- ;
|
||||
a.tv_usec += ONE_MILLION;
|
||||
}
|
||||
return a;
|
||||
}
|
||||
#undef ONE_MILLION
|
||||
|
||||
#ifndef HAVE_STRCASESTR
|
||||
static char *upper(const char *orig, char *buf, int bufsize)
|
||||
{
|
||||
|
Reference in New Issue
Block a user