Use PERL=../miniperl
[p5sagit/p5-mst-13.2.git] / doio.c
diff --git a/doio.c b/doio.c
index 7f2aee1..0e8713e 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -344,7 +344,7 @@ register GV *gv;
            if (inplace) {
                TAINT_PROPER("inplace open");
                if (strEQ(oldname,"-")) {
-                   defoutgv = gv_fetchpv("STDOUT",TRUE,SVt_PVIO);
+                   setdefout(gv_fetchpv("STDOUT",TRUE,SVt_PVIO));
                    return IoIFP(GvIOp(gv));
                }
 #ifndef FLEXFILENAMES
@@ -423,7 +423,7 @@ register GV *gv;
                    do_close(gv,FALSE);
                    continue;
                }
-               defoutgv = argvoutgv;
+               setdefout(argvoutgv);
                lastfd = fileno(IoIFP(GvIOp(argvoutgv)));
                (void)Fstat(lastfd,&statbuf);
 #ifdef HAS_FCHMOD
@@ -448,7 +448,7 @@ register GV *gv;
     }
     if (inplace) {
        (void)do_close(argvoutgv,FALSE);
-       defoutgv = gv_fetchpv("STDOUT",TRUE,SVt_PVIO);
+       setdefout(gv_fetchpv("STDOUT",TRUE,SVt_PVIO));
     }
     return Nullfp;
 }
@@ -577,7 +577,7 @@ GV *gv;
            (void)ungetc(ch, IoIFP(io));
            return FALSE;
        }
-#ifdef USE_STDIO_PTR
+#if defined(USE_STDIO_PTR) && defined(STDIO_CNT_LVALUE)
        if (FILE_cnt(IoIFP(io)) < -1)
            FILE_cnt(IoIFP(io)) = -1;
 #endif
@@ -1071,6 +1071,36 @@ register SV **sp;
        }
        else
            val = SvIVx(*mark);
+#ifdef VMS
+       /* kill() doesn't do process groups (job trees?) under VMS */
+       if (val < 0) val = -val;
+       if (val == SIGKILL) {
+#          include <starlet.h>
+           /* Use native sys$delprc() to insure that target process is
+            * deleted; supervisor-mode images don't pay attention to
+            * CRTL's emulation of Unix-style signals and kill()
+            */
+           while (++mark <= sp) {
+               I32 proc = SvIVx(*mark);
+               register unsigned long int __vmssts;
+               if (!((__vmssts = sys$delprc(&proc,0)) & 1)) {
+                   tot--;
+                   switch (__vmssts) {
+                       case SS$_NONEXPR:
+                       case SS$_NOSUCHNODE:
+                           SETERRNO(ESRCH,__vmssts);
+                           break;
+                       case SS$_NOPRIV:
+                           SETERRNO(EPERM,__vmssts);
+                           break;
+                       default:
+                           SETERRNO(EVMSERR,__vmssts);
+                   }
+               }
+           }
+           break;
+       }
+#endif
        if (val < 0) {
            val = -val;
            while (++mark <= sp) {