Add a parameter to win32_get_{priv,site,vendor}lib(), to return the length,
[p5sagit/p5-mst-13.2.git] / pp_sys.c
index 5b2edea..08c1f83 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
 #include "EXTERN.h"
 #define PERL_IN_PP_SYS_C
 #include "perl.h"
-#include "time64.h"
-#include "time64.c"
+#ifndef PERL_MICRO
+#  include "time64.h"
+#  include "time64.c"
+#endif
 
 #ifdef I_SHADOW
 /* Shadow password support for solaris - pdo@cs.umd.edu
@@ -1816,9 +1818,8 @@ PP(pp_send)
            SV *sv;
 
            if (MARK == SP - 1) {
-               EXTEND(SP, 1000);
-               sv = sv_2mortal(newSViv(sv_len(*SP)));
-               PUSHs(sv);
+               sv = *SP;
+               mXPUSHi(sv_len(sv));
                PUTBACK;
            }
 
@@ -4316,6 +4317,7 @@ PP(pp_setpgrp)
     if (MAXARG < 2) {
        pgrp = 0;
        pid = 0;
+       XPUSHi(-1);
     }
     else {
        pgrp = POPi;
@@ -4422,16 +4424,36 @@ PP(pp_gmtime)
 {
     dVAR;
     dSP;
+#ifdef PERL_MICRO
+    Time_t when;
+    const struct tm *err;
+    struct tm tmbuf;
+#else
     Time64_T when;
     struct TM tmbuf;
     struct TM *err;
-    char *opname = PL_op->op_type == OP_LOCALTIME ? "localtime" : "gmtime";
+#endif
+    const char *opname = PL_op->op_type == OP_LOCALTIME ? "localtime" : "gmtime";
     static const char * const dayname[] =
        {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
     static const char * const monname[] =
        {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
         "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
 
+#ifdef PERL_MICRO
+    if (MAXARG < 1)
+       (void)time(&when);
+    else
+       when = (Time_t)SvIVx(POPs);
+
+    if (PL_op->op_type == OP_LOCALTIME)
+       err = localtime(&when);
+    else
+       err = gmtime(&when);
+
+    if (!err)
+       tmbuf = *err;
+#else
     if (MAXARG < 1) {
        time_t now;
        (void)time(&now);
@@ -4454,6 +4476,7 @@ PP(pp_gmtime)
         err = localtime64_r(&when, &tmbuf);
     else
        err = gmtime64_r(&when, &tmbuf);
+#endif
 
     if( err == NULL ) {
        /* XXX %lld broken for quads */