[Asterisk-code-review] Portably sscanf tv usec (asterisk[14])

Anonymous Coward asteriskteam at digium.com
Thu Jul 28 12:47:17 CDT 2016


Anonymous Coward #1000019 has submitted this change and it was merged.

Change subject: Portably sscanf tv_usec
......................................................................


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
---
M funcs/func_cdr.c
1 file changed, 8 insertions(+), 2 deletions(-)

Approvals:
  George Joseph: Looks good to me, approved
  Anonymous Coward #1000019: Verified
  Joshua Colp: Looks good to me, but someone else must approve



diff --git a/funcs/func_cdr.c b/funcs/func_cdr.c
index ae15f6a..8dcb2bd 100644
--- a/funcs/func_cdr.c
+++ b/funcs/func_cdr.c
@@ -223,9 +223,11 @@
 
 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 tempbuf[128];
+	long int tv_sec;
+	long int tv_usec;
 
 	if (ast_strlen_zero(ast_channel_name(chan))) {
 		/* Format request on a dummy channel */
@@ -234,7 +236,11 @@
 		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);
 	}
 

-- 
To view, visit https://gerrit.asterisk.org/3357
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I29f22d049d3f7746b6c0cc23fbf4293bdaa5eb95
Gerrit-PatchSet: 2
Gerrit-Project: asterisk
Gerrit-Branch: 14
Gerrit-Owner: David M. Lee <dlee at digium.com>
Gerrit-Reviewer: Anonymous Coward #1000019
Gerrit-Reviewer: George Joseph <gjoseph at digium.com>
Gerrit-Reviewer: Joshua Colp <jcolp at digium.com>



More information about the asterisk-code-review mailing list