avoid truncating time values when long is smaller than time_t
authorTony Cook <tony@develop-help.com>
Wed, 18 Jan 2012 03:36:12 +0000 (14:36 +1100)
committerTony Cook <tony@develop-help.com>
Wed, 18 Jan 2012 03:40:47 +0000 (14:40 +1100)
long is only 32-bits on x64 Win32, but time_t is 64-bits.  This was warning:

POSIX.xs(1777) : warning C4244: 'initializing' : conversion from 'time_t' to 'const long', possible loss of data

The check against (time_t)-1 is the approved check from ANSI C 89 and
99.

ext/POSIX/POSIX.xs

index f9a91ca..3e23433 100644 (file)
@@ -1774,8 +1774,8 @@ asctime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = -1)
            mytm.tm_yday = yday;
            mytm.tm_isdst = isdst;
            if (ix) {
            mytm.tm_yday = yday;
            mytm.tm_isdst = isdst;
            if (ix) {
-               const long result = mktime(&mytm);
-               if (result == -1)
+               const time_t result = mktime(&mytm);
+               if (result == (time_t)-1)
                    SvOK_off(TARG);
                else if (result == 0)
                    sv_setpvn(TARG, "0 but true", 10);
                    SvOK_off(TARG);
                else if (result == 0)
                    sv_setpvn(TARG, "0 but true", 10);