This is 5.8.0.
[p5sagit/p5-mst-13.2.git] / pp_sys.c
index 88f45c3..bd2334a 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -2053,7 +2053,7 @@ PP(pp_truncate)
     /* XXX Configure probe for the length type of *truncate() needed XXX */
     Off_t len;
 
-#if Size_t_size > IVSIZE
+#if Off_t_size > IVSIZE
     len = (Off_t)POPn;
 #else
     len = (Off_t)POPi;
@@ -2178,7 +2178,9 @@ PP(pp_ioctl)
        DIE(aTHX_ "ioctl is not implemented");
 #endif
     else
-#ifdef HAS_FCNTL
+#ifndef HAS_FCNTL
+      DIE(aTHX_ "fcntl is not implemented");
+#else
 #if defined(OS2) && defined(__EMX__)
        retval = fcntl(PerlIO_fileno(IoIFP(io)), func, (int)s);
 #else
@@ -2201,11 +2203,8 @@ PP(pp_ioctl)
     else {
        PUSHp(zero_but_true, ZBTLEN);
     }
-    RETURN;
-
-#else
-    DIE(aTHX_ "fcntl is not implemented");
 #endif
+    RETURN;
 }
 
 PP(pp_flock)
@@ -4049,18 +4048,21 @@ PP(pp_system)
     I32 did_pipes = 0;
 
     if (PL_tainting) {
+       int some_arg_tainted = 0;
        TAINT_ENV();
        while (++MARK <= SP) {
            (void)SvPV_nolen(*MARK);      /* stringify for taint check */
-           if (PL_tainted)
+           if (PL_tainted) {
+               some_arg_tainted = 1;
                break;
+           }
        }
        MARK = ORIGMARK;
        /* XXX Remove warning at end of deprecation cycle --RD 2002-02  */
        if (SP - MARK == 1) {
            TAINT_PROPER("system");
        }
-       else if (ckWARN2(WARN_TAINT, WARN_DEPRECATED)) {
+       else if (some_arg_tainted && ckWARN2(WARN_TAINT, WARN_DEPRECATED)) {
            Perl_warner(aTHX_ packWARN2(WARN_TAINT, WARN_DEPRECATED),
                "Use of tainted arguments in %s is deprecated", "system");
        }
@@ -4151,10 +4153,19 @@ PP(pp_system)
     result = 0;
     if (PL_op->op_flags & OPf_STACKED) {
        SV *really = *++MARK;
+#  ifdef WIN32
+       value = (I32)do_aspawn(really, MARK, SP);
+#  else
        value = (I32)do_aspawn(really, (void **)MARK, (void **)SP);
+#  endif
     }
-    else if (SP - MARK != 1)
+    else if (SP - MARK != 1) {
+#  ifdef WIN32
+       value = (I32)do_aspawn(Nullsv, MARK, SP);
+#  else
        value = (I32)do_aspawn(Nullsv, (void **)MARK, (void **)SP);
+#  endif
+    }
     else {
        value = (I32)do_spawn(SvPVx(sv_mortalcopy(*SP), n_a));
     }
@@ -4175,18 +4186,21 @@ PP(pp_exec)
     STRLEN n_a;
 
     if (PL_tainting) {
+       int some_arg_tainted = 0;
        TAINT_ENV();
        while (++MARK <= SP) {
            (void)SvPV_nolen(*MARK);      /* stringify for taint check */
-           if (PL_tainted)
+           if (PL_tainted) {
+               some_arg_tainted = 1;
                break;
+           }
        }
        MARK = ORIGMARK;
        /* XXX Remove warning at end of deprecation cycle --RD 2002-02  */
        if (SP - MARK == 1) {
            TAINT_PROPER("exec");
        }
-       else if (ckWARN2(WARN_TAINT, WARN_DEPRECATED)) {
+       else if (some_arg_tainted && ckWARN2(WARN_TAINT, WARN_DEPRECATED)) {
            Perl_warner(aTHX_ packWARN2(WARN_TAINT, WARN_DEPRECATED),
                "Use of tainted arguments in %s is deprecated", "exec");
        }