From 18065a175d5012a4f1033e8c05c064007494ed3c Mon Sep 17 00:00:00 2001
From: Luigi Rizzo <rizzo@icir.org>
Date: Thu, 15 May 2008 10:56:29 +0000
Subject: [PATCH] Use casts or intermediate variables to remove a number of
 platform/compiler-dependent warnings when handing struct timeval fields, both
 reading and printing them.

It is a lost battle to handle the different ways struct timeval
is handled on the various platforms and compilers, so try
to be pragmatic and go through int/long which are universally
supported.



git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@116557 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 apps/app_waituntil.c | 4 +++-
 funcs/func_timeout.c | 7 +++++--
 main/features.c      | 3 ++-
 main/manager.c       | 2 +-
 main/sched.c         | 2 +-
 main/taskprocessor.c | 2 +-
 main/utils.c         | 4 ++--
 7 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/apps/app_waituntil.c b/apps/app_waituntil.c
index 1334683ce7..98345b141c 100644
--- a/apps/app_waituntil.c
+++ b/apps/app_waituntil.c
@@ -48,6 +48,7 @@ static int waituntil_exec(struct ast_channel *chan, void *data)
 {
 	int res;
 	double fraction;
+	long seconds;
 	struct timeval future = { 0, };
 	struct timeval tv = ast_tvnow();
 	int msec;
@@ -58,12 +59,13 @@ static int waituntil_exec(struct ast_channel *chan, void *data)
 		return 0;
 	}
 
-	if (sscanf(data, "%ld%lf", (long *)&future.tv_sec, &fraction) == 0) {
+	if (sscanf(data, "%ld%lf", &seconds, &fraction) == 0) {
 		ast_log(LOG_WARNING, "WaitUntil called with non-numeric argument\n");
 		pbx_builtin_setvar_helper(chan, "WAITUNTILSTATUS", "FAILURE");
 		return 0;
 	}
 
+	future.tv_sec = seconds;
 	future.tv_usec = fraction * 1000000;
 
 	if ((msec = ast_tvdiff_ms(future, tv)) < 0) {
diff --git a/funcs/func_timeout.c b/funcs/func_timeout.c
index 2f282b336f..77d7c297eb 100644
--- a/funcs/func_timeout.c
+++ b/funcs/func_timeout.c
@@ -84,6 +84,7 @@ static int timeout_write(struct ast_channel *chan, const char *cmd, char *data,
 			 const char *value)
 {
 	double x;
+	long sec;
 	char timestr[64];
 	struct ast_tm myt;
 	struct timeval tv;
@@ -99,10 +100,12 @@ static int timeout_write(struct ast_channel *chan, const char *cmd, char *data,
 	if (!value)
 		return -1;
 
-	if ((sscanf(value, "%ld%lf", (long *)&tv.tv_sec, &x) == 0) || tv.tv_sec < 0)
+	if ((sscanf(value, "%ld%lf", &sec, &x) == 0) || sec < 0)
 		tv.tv_sec = 0;
-	else
+	else {
+		tv.tv_sec = sec;
 		tv.tv_usec = x * 1000000;
+	}
 
 	switch (*data) {
 	case 'a':
diff --git a/main/features.c b/main/features.c
index 0b8797fcc4..333b5a0f21 100644
--- a/main/features.c
+++ b/main/features.c
@@ -3565,7 +3565,8 @@ static char *handle_parkedcalls(struct ast_cli_entry *e, int cmd, struct ast_cli
 		AST_LIST_TRAVERSE(&curlot->parkings, cur, list) {
 			ast_cli(a->fd, "%-10.10s %25s (%-15s %-12s %-4d) %6lds\n"
 				,cur->parkingexten, cur->chan->name, cur->context, cur->exten
-				,cur->priority, cur->start.tv_sec + (cur->parkingtime/1000) - time(NULL));
+				,cur->priority,
+				(long)(cur->start.tv_sec + (cur->parkingtime/1000) - time(NULL)) );
 			numparked++;
 			numparked += lotparked;
 		}
diff --git a/main/manager.c b/main/manager.c
index 2df5e81642..9ad8bd8ca2 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -3105,7 +3105,7 @@ int __manager_event(int category, const char *event,
 		now = ast_tvnow();
 		ast_str_append(&buf, 0,
 				"Timestamp: %ld.%06lu\r\n",
-				 now.tv_sec, (unsigned long) now.tv_usec);
+				 (long)now.tv_sec, (unsigned long) now.tv_usec);
 	}
 	if (manager_debug) {
 		static int seq;
diff --git a/main/sched.c b/main/sched.c
index 91d86164e5..c40375d726 100644
--- a/main/sched.c
+++ b/main/sched.c
@@ -437,7 +437,7 @@ void ast_sched_dump(const struct sched_context *con)
 			q->id,
 			q->callback,
 			q->data,
-			delta.tv_sec,
+			(long)delta.tv_sec,
 			(long int)delta.tv_usec);
 	}
 	ast_debug(1, "=============================================================\n");
diff --git a/main/taskprocessor.c b/main/taskprocessor.c
index cf88bb2e71..171a077257 100644
--- a/main/taskprocessor.c
+++ b/main/taskprocessor.c
@@ -220,7 +220,7 @@ static char *cli_tps_ping(struct ast_cli_entry *e, int cmd, struct ast_cli_args
 	ast_mutex_unlock(&cli_ping_cond_lock);
 	end = ast_tvnow();
 	delta = ast_tvsub(end, begin);
-	ast_cli(a->fd, "\n\t%24s ping time: %.1ld.%.6ld sec\n\n", name, delta.tv_sec, (long int)delta.tv_usec);
+	ast_cli(a->fd, "\n\t%24s ping time: %.1ld.%.6ld sec\n\n", name, (long)delta.tv_sec, (long int)delta.tv_usec);
 	ao2_ref(tps, -1);
 	return CLI_SUCCESS;	
 }
diff --git a/main/utils.c b/main/utils.c
index a34514b981..92da333c3f 100644
--- a/main/utils.c
+++ b/main/utils.c
@@ -1202,12 +1202,12 @@ static struct timeval tvfix(struct timeval a)
 {
 	if (a.tv_usec >= ONE_MILLION) {
 		ast_log(LOG_WARNING, "warning too large timestamp %ld.%ld\n",
-			a.tv_sec, (long int) a.tv_usec);
+			(long)a.tv_sec, (long int) 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_WARNING, "warning negative timestamp %ld.%ld\n",
-			a.tv_sec, (long int) a.tv_usec);
+			(long)a.tv_sec, (long int) a.tv_usec);
 		a.tv_usec = 0;
 	}
 	return a;
-- 
GitLab