mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-06 12:36:58 +00:00
Portably sscanf tv_usec
In a timeval, tv_usec is defined as a suseconds_t, which could be different underlying types on different platforms. Instead of trying to scanf directly into the timeval, scanf into a long int, then copy that into the timeval. Change-Id: I29f22d049d3f7746b6c0cc23fbf4293bdaa5eb95
This commit is contained in:
committed by
David M. Lee
parent
49461f37b7
commit
feb1a43412
@@ -223,9 +223,11 @@ STASIS_MESSAGE_TYPE_DEFN_LOCAL(cdr_prop_write_message_type);
|
|||||||
|
|
||||||
static struct timeval cdr_retrieve_time(struct ast_channel *chan, const char *time_name)
|
static struct timeval cdr_retrieve_time(struct ast_channel *chan, const char *time_name)
|
||||||
{
|
{
|
||||||
struct timeval time;
|
struct timeval time = { 0 };
|
||||||
char *value = NULL;
|
char *value = NULL;
|
||||||
char tempbuf[128];
|
char tempbuf[128];
|
||||||
|
long int tv_sec;
|
||||||
|
long int tv_usec;
|
||||||
|
|
||||||
if (ast_strlen_zero(ast_channel_name(chan))) {
|
if (ast_strlen_zero(ast_channel_name(chan))) {
|
||||||
/* Format request on a dummy channel */
|
/* Format request on a dummy channel */
|
||||||
@@ -234,7 +236,11 @@ static struct timeval cdr_retrieve_time(struct ast_channel *chan, const char *ti
|
|||||||
ast_cdr_getvar(ast_channel_name(chan), time_name, tempbuf, sizeof(tempbuf));
|
ast_cdr_getvar(ast_channel_name(chan), time_name, tempbuf, sizeof(tempbuf));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sscanf(tempbuf, "%ld.%ld", &time.tv_sec, &time.tv_usec) != 2) {
|
/* time.tv_usec is suseconds_t, which could be int or long */
|
||||||
|
if (sscanf(tempbuf, "%ld.%ld", &tv_sec, &tv_usec) == 2) {
|
||||||
|
time.tv_sec = tv_sec;
|
||||||
|
time.tv_usec = tv_usec;
|
||||||
|
} else {
|
||||||
ast_log(AST_LOG_WARNING, "Failed to fully extract '%s' from CDR\n", time_name);
|
ast_log(AST_LOG_WARNING, "Failed to fully extract '%s' from CDR\n", time_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user