Use casts or intermediate variables to remove a number
authorLuigi Rizzo <rizzo@icir.org>
Thu, 15 May 2008 10:56:29 +0000 (10:56 +0000)
committerLuigi Rizzo <rizzo@icir.org>
Thu, 15 May 2008 10:56:29 +0000 (10:56 +0000)
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
funcs/func_timeout.c
main/features.c
main/manager.c
main/sched.c
main/taskprocessor.c
main/utils.c

index 1334683..98345b1 100644 (file)
@@ -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) {
index 2f282b3..77d7c29 100644 (file)
@@ -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':
index 0b8797f..333b5a0 100644 (file)
@@ -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;
                }
index 2df5e81..9ad8bd8 100644 (file)
@@ -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;
index 91d8616..c40375d 100644 (file)
@@ -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");
index cf88bb2..171a077 100644 (file)
@@ -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;     
 }
index a34514b..92da333 100644 (file)
@@ -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;