Changeset: d9610ff40a51 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d9610ff40a51
Modified Files:
        clients/mapiclient/mclient.c
Branch: Feb2013
Log Message:

avoid use of non-portable type long and thus potential overflow
when down-casting usecs from 64-bit timertype to 32-bit long.

Ceterum censeo type long MUST NOT be used as it is everything but portable;
for instance, on our beloved Windows platforms, long is always 32-bit,
even on 64-bit systems.


diffs (71 lines):

diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -126,6 +126,7 @@ int csvheader = 0;          /* include header li
 
 /* use a 64 bit integer for the timer */
 typedef lng timertype;
+#define TTFMT LLFMT
 #if 0
 static char *mark, *mark2;
 #endif
@@ -279,7 +280,7 @@ timerEnd(void)
        assert(t1 >= t0);
 #if 0
        if (mark && specials == NOmodifier) {
-               fprintf(stderr, "%s %7ld.%03ld msec %s\n", mark, (long) ((t1 - 
t0) / 1000), (long) ((t1 - t0) % 1000), mark2 ? mark2 : "");
+               fprintf(stderr, "%s " TTFMT ".%03d msec %s\n", mark, (t1 - t0) 
/ 1000, (int) ((t1 - t0) % 1000), mark2 ? mark2 : "");
                fflush(stderr);
        }
 #endif
@@ -308,18 +309,18 @@ timerHuman(void)
        assert(th >= t0);
 
        if (itimemode == T_MILLIS || (itimemode == T_HUMAN && t / 1000 < 950)) {
-               snprintf(htimbuf, 32, "%ld.%03ldms", (long) (t / 1000), (long) 
(t % 1000));
+               snprintf(htimbuf, 32, TTFMT ".%03dms", t / 1000, (int) (t % 
1000));
                return(htimbuf);
        }
        t /= 1000;
        if (itimemode == T_SECS || (itimemode == T_HUMAN && t / 1000 < 60)) {
-               snprintf(htimbuf, 32, "%ld.%lds", (long) (t / 1000),
-                               (long) ((t % 1000) / 100));
+               snprintf(htimbuf, 32, TTFMT ".%ds", t / 1000,
+                               (int) ((t % 1000) / 100));
                return(htimbuf);
        }
        t /= 1000;
        /* itimemode == T_MINSECS || itimemode == T_HUMAN */
-       snprintf(htimbuf, 32, "%ldm %lds", (long) (t / 60), (long) (t % 60));
+       snprintf(htimbuf, 32, TTFMT "m %ds", t / 60, (int) (t % 60));
        return(htimbuf);
 }
 
@@ -2550,7 +2551,7 @@ set_timezone(Mapi mid)
        char buf[128];
        time_t t, lt, gt;
        struct tm *tmp;
-       long tzone;
+       int tzone;
        MapiHdl hdl;
 
        /* figure out our current timezone */
@@ -2559,14 +2560,15 @@ set_timezone(Mapi mid)
        gt = mktime(tmp);
        tmp = localtime(&t);
        lt = mktime(tmp);
-       tzone = (long) (gt - lt);
+       assert((lng) (gt - lt) >= (lng) INT_MIN && (lng) (gt - lt) <= (lng) 
INT_MAX);
+       tzone = (int) (gt - lt);
        if (tzone < 0)
                snprintf(buf, sizeof(buf),
-                        "SET TIME ZONE INTERVAL '+%02ld:%02ld' HOUR TO MINUTE",
+                        "SET TIME ZONE INTERVAL '+%02d:%02d' HOUR TO MINUTE",
                         -tzone / 3600, (-tzone % 3600) / 60);
        else
                snprintf(buf, sizeof(buf),
-                        "SET TIME ZONE INTERVAL '-%02ld:%02ld' HOUR TO MINUTE",
+                        "SET TIME ZONE INTERVAL '-%02d:%02d' HOUR TO MINUTE",
                         tzone / 3600, (tzone % 3600) / 60);
        if ((hdl = mapi_query(mid, buf)) == NULL) {
                if (formatter == TABLEformatter || formatter == CLEANformatter) 
{
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to