#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
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;
}
if (MAXARG < 2) {
pgrp = 0;
pid = 0;
+ XPUSHi(-1);
}
else {
pgrp = POPi;
{
dVAR;
dSP;
-#ifdef PERL_MICRO
+#if defined(PERL_MICRO) || !defined(Quad_t)
Time_t when;
const struct tm *err;
struct tm tmbuf;
{"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
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);
}
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);
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);
}
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