Upgrade to ExtUtils-MakeMaker-6.50
[p5sagit/p5-mst-13.2.git] / pp_sys.c
index 08c1f83..b42cced 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -29,7 +29,7 @@
 #include "EXTERN.h"
 #define PERL_IN_PP_SYS_C
 #include "perl.h"
-#ifndef PERL_MICRO
+#if !defined(PERL_MICRO) && defined(Quad_t)
 #  include "time64.h"
 #  include "time64.c"
 #endif
@@ -4424,7 +4424,7 @@ PP(pp_gmtime)
 {
     dVAR;
     dSP;
-#ifdef PERL_MICRO
+#if defined(PERL_MICRO) || !defined(Quad_t)
     Time_t when;
     const struct tm *err;
     struct tm tmbuf;
@@ -4440,7 +4440,7 @@ PP(pp_gmtime)
        {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
         "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
 
-#ifdef PERL_MICRO
+#if defined(PERL_MICRO) || !defined(Quad_t)
     if (MAXARG < 1)
        (void)time(&when);
     else
@@ -4464,9 +4464,9 @@ PP(pp_gmtime)
           using a double causes an unfortunate loss of accuracy on high numbers.
           What we really need is an SvQV.
        */
-       double input = POPn;
+       double input = Perl_floor(POPn);
        when = (Time64_T)input;
-       if( when != input ) {
+       if (when != input && ckWARN(WARN_OVERFLOW)) {
            Perl_warner(aTHX_ packWARN(WARN_OVERFLOW),
                        "%s(%.0f) too large", opname, input);
        }
@@ -4478,7 +4478,7 @@ PP(pp_gmtime)
        err = gmtime64_r(&when, &tmbuf);
 #endif
 
-    if( err == NULL ) {
+    if (err == NULL && ckWARN(WARN_OVERFLOW)) {
        /* XXX %lld broken for quads */
        Perl_warner(aTHX_ packWARN(WARN_OVERFLOW),
                    "%s(%.0f) failed", opname, (double)when);
@@ -5328,7 +5328,11 @@ PP(pp_ggrent)
        PUSHs(sv);
        if (grent) {
            if (which == OP_GGRNAM)
+#if Gid_t_sign <= 0
                sv_setiv(sv, (IV)grent->gr_gid);
+#else
+               sv_setuv(sv, (UV)grent->gr_gid);
+#endif
            else
                sv_setpv(sv, grent->gr_name);
        }
@@ -5344,7 +5348,11 @@ PP(pp_ggrent)
        PUSHs(sv_mortalcopy(&PL_sv_no));
 #endif
 
+#if Gid_t_sign <= 0
        mPUSHi(grent->gr_gid);
+#else
+       mPUSHu(grent->gr_gid);
+#endif
 
 #if !(defined(_CRAYMPP) && defined(USE_REENTRANT_API))
        /* In UNICOS/mk (_CRAYMPP) the multithreading