metaconfig needs these two symlinks
[p5sagit/p5-mst-13.2.git] / doio.c
diff --git a/doio.c b/doio.c
index 5064705..6135efa 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -9,10 +9,12 @@
  */
 
 /*
- * "Far below them they saw the white waters pour into a foaming bowl, and
- * then swirl darkly about a deep oval basin in the rocks, until they found
- * their way out again through a narrow gate, and flowed away, fuming and
- * chattering, into calmer and more level reaches."
+ *  Far below them they saw the white waters pour into a foaming bowl, and
+ *  then swirl darkly about a deep oval basin in the rocks, until they found
+ *  their way out again through a narrow gate, and flowed away, fuming and
+ *  chattering, into calmer and more level reaches.
+ *
+ *     [p.684 of _The Lord of the Rings_, IV/vi: "The Forbidden Pool"]
  */
 
 /* This file contains functions that do the actual I/O on behalf of ops.
@@ -661,9 +663,9 @@ Perl_do_openn(pTHX_ GV *gv, register const char *oname, I32 len, int as_raw,
     }
 #if defined(HAS_FCNTL) && defined(F_SETFD)
     if (fd >= 0) {
-       const int save_errno = errno;
+       dSAVE_ERRNO;
        fcntl(fd,F_SETFD,fd > PL_maxsysfd); /* can change errno */
-       errno = save_errno;
+       RESTORE_ERRNO;
     }
 #endif
     IoIFP(io) = fp;
@@ -809,8 +811,7 @@ Perl_nextargv(pTHX_ register GV *gv)
                    do_close(gv,FALSE);
                    (void)PerlLIO_unlink(SvPVX_const(sv));
                    (void)PerlLIO_rename(PL_oldname,SvPVX_const(sv));
-                   do_open(gv,(char*)SvPVX_const(sv),SvCUR(sv),PL_inplace!=0,
-                           O_RDONLY,0,NULL);
+                   do_open(gv,(char*)SvPVX_const(sv),SvCUR(sv),TRUE,O_RDONLY,0,NULL);
 #endif /* DOSISH */
 #else
                    (void)UNLINK(SvPVX_const(sv));
@@ -842,18 +843,16 @@ Perl_nextargv(pTHX_ register GV *gv)
 #endif
                }
 
-               sv_setpvn(sv,">",!PL_inplace);
-               sv_catpvn(sv,PL_oldname,oldlen);
+               sv_setpvn(sv,PL_oldname,oldlen);
                SETERRNO(0,0);          /* in case sprintf set errno */
+               if (!Perl_do_openn(aTHX_ PL_argvoutgv, (char*)SvPVX_const(sv),
+                                  SvCUR(sv), TRUE,
 #ifdef VMS
-               if (!do_open(PL_argvoutgv,(char*)SvPVX_const(sv),SvCUR(sv),
-                            PL_inplace!=0,O_WRONLY|O_CREAT|O_TRUNC,0,NULL))
+                                  O_WRONLY|O_CREAT|O_TRUNC,0,
 #else
-                   if (!do_open(PL_argvoutgv,(char*)SvPVX_const(sv),SvCUR(sv),
-                            PL_inplace!=0,O_WRONLY|O_CREAT|OPEN_EXCL,0666,
-                            NULL))
+                                  O_WRONLY|O_CREAT|OPEN_EXCL,0600,
 #endif
-               {
+                                  NULL, NULL, 0)) {
                    if (ckWARN_d(WARN_INPLACE)) 
                        Perl_warner(aTHX_ packWARN(WARN_INPLACE), "Can't do inplace edit on %s: %s",
                          PL_oldname, Strerror(errno) );
@@ -906,7 +905,7 @@ Perl_nextargv(pTHX_ register GV *gv)
        if (io && (IoFLAGS(io) & IOf_ARGV)
            && PL_argvout_stack && AvFILLp(PL_argvout_stack) >= 0)
        {
-           GV * const oldout = (GV*)av_pop(PL_argvout_stack);
+           GV * const oldout = MUTABLE_GV(av_pop(PL_argvout_stack));
            setdefout(oldout);
            SvREFCNT_dec(oldout);
            return NULL;
@@ -1012,14 +1011,14 @@ Perl_do_eof(pTHX_ GV *gv)
 
        {
             /* getc and ungetc can stomp on errno */
-           const int saverrno = errno;
+           dSAVE_ERRNO;
            const int ch = PerlIO_getc(IoIFP(io));
            if (ch != EOF) {
                (void)PerlIO_ungetc(IoIFP(io),ch);
-               errno = saverrno;
+               RESTORE_ERRNO;
                return FALSE;
            }
-           errno = saverrno;
+           RESTORE_ERRNO;
        }
 
         if (PerlIO_has_cntptr(IoIFP(io)) && PerlIO_canset_cnt(IoIFP(io))) {
@@ -1308,11 +1307,11 @@ Perl_my_stat(pTHX)
        STRLEN len;
        PUTBACK;
        if (isGV_with_GP(sv)) {
-           gv = (GV*)sv;
+           gv = MUTABLE_GV(sv);
            goto do_fstat;
        }
        else if (SvROK(sv) && isGV_with_GP(SvRV(sv))) {
-           gv = (GV*)SvRV(sv);
+           gv = MUTABLE_GV(SvRV(sv));
            goto do_fstat;
        }
         else if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVIO) {
@@ -1365,7 +1364,7 @@ Perl_my_lstat(pTHX)
     PUTBACK;
     if (SvROK(sv) && isGV_with_GP(SvRV(sv)) && ckWARN(WARN_IO)) {
        Perl_warner(aTHX_ packWARN(WARN_IO), "Use of -l on filehandle %s",
-               GvENAME((GV*) SvRV(sv)));
+               GvENAME((const GV *)SvRV(sv)));
        return (PL_laststatval = -1);
     }
     file = SvPV_nolen_const(sv);
@@ -1625,7 +1624,7 @@ Perl_apply(pTHX_ I32 type, register SV **mark, register SV **sp)
            while (++mark <= sp) {
                 GV* gv;
                 if (isGV_with_GP(*mark)) {
-                    gv = (GV*)*mark;
+                    gv = MUTABLE_GV(*mark);
                do_fchmod:
                    if (GvIO(gv) && IoIFP(GvIOp(gv))) {
 #ifdef HAS_FCHMOD
@@ -1641,7 +1640,7 @@ Perl_apply(pTHX_ I32 type, register SV **mark, register SV **sp)
                    }
                }
                else if (SvROK(*mark) && isGV_with_GP(SvRV(*mark))) {
-                   gv = (GV*)SvRV(*mark);
+                   gv = MUTABLE_GV(SvRV(*mark));
                    goto do_fchmod;
                }
                else {
@@ -1665,7 +1664,7 @@ Perl_apply(pTHX_ I32 type, register SV **mark, register SV **sp)
            while (++mark <= sp) {
                 GV* gv;
                 if (isGV_with_GP(*mark)) {
-                    gv = (GV*)*mark;
+                    gv = MUTABLE_GV(*mark);
                do_fchown:
                    if (GvIO(gv) && IoIFP(GvIOp(gv))) {
 #ifdef HAS_FCHOWN
@@ -1681,7 +1680,7 @@ Perl_apply(pTHX_ I32 type, register SV **mark, register SV **sp)
                    }
                }
                else if (SvROK(*mark) && isGV_with_GP(SvRV(*mark))) {
-                   gv = (GV*)SvRV(*mark);
+                   gv = MUTABLE_GV(SvRV(*mark));
                    goto do_fchown;
                }
                else {
@@ -1837,7 +1836,7 @@ nothing in the core.
            while (++mark <= sp) {
                 GV* gv;
                 if (isGV_with_GP(*mark)) {
-                    gv = (GV*)*mark;
+                    gv = MUTABLE_GV(*mark);
                do_futimes:
                    if (GvIO(gv) && IoIFP(GvIOp(gv))) {
 #ifdef HAS_FUTIMES
@@ -1854,7 +1853,7 @@ nothing in the core.
                    }
                }
                else if (SvROK(*mark) && isGV_with_GP(SvRV(*mark))) {
-                   gv = (GV*)SvRV(*mark);
+                   gv = MUTABLE_GV(SvRV(*mark));
                    goto do_futimes;
                }
                else {
@@ -1941,8 +1940,8 @@ Perl_cando(pTHX_ Mode_t mode, bool effective, register const Stat_t *statbufp)
 }
 #endif /* ! VMS */
 
-bool
-Perl_ingroup(pTHX_ Gid_t testgid, bool effective)
+static bool
+S_ingroup(pTHX_ Gid_t testgid, bool effective)
 {
 #ifdef MACOS_TRADITIONAL
     /* This is simply not correct for AppleShare, but fix it yerself. */