MPE/iX tweaks from Mark Bixby.
[p5sagit/p5-mst-13.2.git] / pp_sys.c
index 826a588..c61f09e 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -510,7 +510,7 @@ PP(pp_open)
     if (GvIOp(gv))
        IoFLAGS(GvIOp(gv)) &= ~IOf_UNTAINT;
 
-    if ((mg = SvTIED_mg((SV*)gv, 'q'))) {
+    if ((mg = SvTIED_mg((SV*)gv, PERL_MAGIC_tiedscalar))) {
        /* Method's args are same as ours ... */
        /* ... except handle is replaced by the object */
        *MARK-- = SvTIED_obj((SV*)gv, mg);
@@ -553,7 +553,7 @@ PP(pp_close)
     else
        gv = (GV*)POPs;
 
-    if ((mg = SvTIED_mg((SV*)gv, 'q'))) {
+    if ((mg = SvTIED_mg((SV*)gv, PERL_MAGIC_tiedscalar))) {
        PUSHMARK(SP);
        XPUSHs(SvTIED_obj((SV*)gv, mg));
        PUTBACK;
@@ -635,7 +635,7 @@ PP(pp_fileno)
        RETPUSHUNDEF;
     gv = (GV*)POPs;
 
-    if (gv && (mg = SvTIED_mg((SV*)gv, 'q'))) {
+    if (gv && (mg = SvTIED_mg((SV*)gv, PERL_MAGIC_tiedscalar))) {
        PUSHMARK(SP);
        XPUSHs(SvTIED_obj((SV*)gv, mg));
        PUTBACK;
@@ -703,7 +703,7 @@ PP(pp_binmode)
 
     gv = (GV*)POPs;
 
-    if (gv && (mg = SvTIED_mg((SV*)gv, 'q'))) {
+    if (gv && (mg = SvTIED_mg((SV*)gv, PERL_MAGIC_tiedscalar))) {
        PUSHMARK(SP);
        XPUSHs(SvTIED_obj((SV*)gv, mg));
        if (discp)
@@ -744,7 +744,7 @@ PP(pp_tie)
     SV *sv;
     I32 markoff = MARK - PL_stack_base;
     char *methname;
-    int how = 'P';
+    int how = PERL_MAGIC_tied;
     U32 items;
     STRLEN n_a;
 
@@ -763,11 +763,11 @@ PP(pp_tie)
            }
 #endif
            methname = "TIEHANDLE";
-           how = 'q';
+           how = PERL_MAGIC_tiedscalar;
            break;
        default:
            methname = "TIESCALAR";
-           how = 'q';
+           how = PERL_MAGIC_tiedscalar;
            break;
     }
     items = SP - MARK++;
@@ -823,7 +823,8 @@ PP(pp_untie)
 {
     dSP;
     SV *sv = POPs;
-    char how = (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV) ? 'P' : 'q';
+    char how = (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV)
+               ? PERL_MAGIC_tied : PERL_MAGIC_tiedscalar;
 
         MAGIC * mg ;
         if ((mg = SvTIED_mg(sv, how))) {
@@ -856,7 +857,8 @@ PP(pp_tied)
 {
     dSP;
     SV *sv = POPs;
-    char how = (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV) ? 'P' : 'q';
+    char how = (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV)
+               ? PERL_MAGIC_tied : PERL_MAGIC_tiedscalar;
     MAGIC *mg;
 
     if ((mg = SvTIED_mg(sv, how))) {
@@ -919,8 +921,8 @@ PP(pp_dbmopen)
     }
 
     if (sv_isobject(TOPs)) {
-       sv_unmagic((SV *) hv, 'P');
-       sv_magic((SV*)hv, TOPs, 'P', Nullch, 0);
+       sv_unmagic((SV *) hv, PERL_MAGIC_tied);
+       sv_magic((SV*)hv, TOPs, PERL_MAGIC_tied, Nullch, 0);
     }
     LEAVE;
     RETURN;
@@ -1127,7 +1129,7 @@ PP(pp_getc)
     else
        gv = (GV*)POPs;
 
-    if ((mg = SvTIED_mg((SV*)gv, 'q'))) {
+    if ((mg = SvTIED_mg((SV*)gv, PERL_MAGIC_tiedscalar))) {
        I32 gimme = GIMME_V;
        PUSHMARK(SP);
        XPUSHs(SvTIED_obj((SV*)gv, mg));
@@ -1384,7 +1386,7 @@ PP(pp_prtf)
     else
        gv = PL_defoutgv;
 
-    if ((mg = SvTIED_mg((SV*)gv, 'q'))) {
+    if ((mg = SvTIED_mg((SV*)gv, PERL_MAGIC_tiedscalar))) {
        if (MARK == ORIGMARK) {
            MEXTEND(SP, 1);
            ++MARK;
@@ -1503,7 +1505,7 @@ PP(pp_sysread)
 
     gv = (GV*)*++MARK;
     if ((PL_op->op_type == OP_READ || PL_op->op_type == OP_SYSREAD) &&
-       (mg = SvTIED_mg((SV*)gv, 'q')))
+       (mg = SvTIED_mg((SV*)gv, PERL_MAGIC_tiedscalar)))
     {
        SV *sv;
        
@@ -1533,7 +1535,7 @@ PP(pp_sysread)
     io = GvIO(gv);
     if (!io || !IoIFP(io))
        goto say_undef;
-    if ((fp_utf8 = PerlIO_isutf8(IoIFP(io))) && !IN_BYTE) {
+    if ((fp_utf8 = PerlIO_isutf8(IoIFP(io))) && !IN_BYTES) {
        buffer = SvPVutf8_force(bufsv, blen);
        /* UTF8 may not have been set if they are all low bytes */
        SvUTF8_on(bufsv);
@@ -1661,7 +1663,7 @@ PP(pp_sysread)
     SvCUR_set(bufsv, count+(buffer - SvPVX(bufsv)));
     *SvEND(bufsv) = '\0';
     (void)SvPOK_only(bufsv);
-    if (fp_utf8 && !IN_BYTE) {
+    if (fp_utf8 && !IN_BYTES) {
        /* Look at utf8 we got back and count the characters */
        char *bend = buffer + count;
        while (buffer < bend) {
@@ -1729,7 +1731,9 @@ PP(pp_send)
     MAGIC *mg;
 
     gv = (GV*)*++MARK;
-    if (PL_op->op_type == OP_SYSWRITE && (mg = SvTIED_mg((SV*)gv, 'q'))) {
+    if (PL_op->op_type == OP_SYSWRITE
+               && (mg = SvTIED_mg((SV*)gv, PERL_MAGIC_tiedscalar)))
+    {
        SV *sv;
        
        PUSHMARK(MARK-1);
@@ -1874,7 +1878,7 @@ PP(pp_eof)
     else
        gv = PL_last_in_gv = (GV*)POPs;         /* eof(FH) */
 
-    if (gv && (mg = SvTIED_mg((SV*)gv, 'q'))) {
+    if (gv && (mg = SvTIED_mg((SV*)gv, PERL_MAGIC_tiedscalar))) {
        PUSHMARK(SP);
        XPUSHs(SvTIED_obj((SV*)gv, mg));
        PUTBACK;
@@ -1900,7 +1904,7 @@ PP(pp_tell)
     else
        gv = PL_last_in_gv = (GV*)POPs;
 
-    if (gv && (mg = SvTIED_mg((SV*)gv, 'q'))) {
+    if (gv && (mg = SvTIED_mg((SV*)gv, PERL_MAGIC_tiedscalar))) {
        PUSHMARK(SP);
        XPUSHs(SvTIED_obj((SV*)gv, mg));
        PUTBACK;
@@ -1938,7 +1942,7 @@ PP(pp_sysseek)
 
     gv = PL_last_in_gv = (GV*)POPs;
 
-    if (gv && (mg = SvTIED_mg((SV*)gv, 'q'))) {
+    if (gv && (mg = SvTIED_mg((SV*)gv, PERL_MAGIC_tiedscalar))) {
        PUSHMARK(SP);
        XPUSHs(SvTIED_obj((SV*)gv, mg));
 #if LSEEKSIZE > IVSIZE
@@ -1984,9 +1988,6 @@ PP(pp_truncate)
      * at least as wide as size_t, so using an off_t should be okay. */
     /* XXX Configure probe for the length type of *truncate() needed XXX */
     Off_t len;
-    int result = 1;
-    GV *tmpgv;
-    STRLEN n_a;
 
 #if Size_t_size > IVSIZE
     len = (Off_t)POPn;
@@ -1998,60 +1999,67 @@ PP(pp_truncate)
     /* XXX Configure probe for the signedness of the length type of *truncate() needed? XXX */
     SETERRNO(0,0);
 #if defined(HAS_TRUNCATE) || defined(HAS_CHSIZE) || defined(F_FREESP)
-    if (PL_op->op_flags & OPf_SPECIAL) {
-       tmpgv = gv_fetchpv(POPpx, FALSE, SVt_PVIO);
-    do_ftruncate:
-       TAINT_PROPER("truncate");
-       if (!GvIO(tmpgv) || !IoIFP(GvIOp(tmpgv)))
-           result = 0;
-       else {
-           PerlIO_flush(IoIFP(GvIOp(tmpgv)));
+    {
+        STRLEN n_a;
+       int result = 1;
+       GV *tmpgv;
+       
+       if (PL_op->op_flags & OPf_SPECIAL) {
+           tmpgv = gv_fetchpv(POPpx, FALSE, SVt_PVIO);
+
+       do_ftruncate:
+           TAINT_PROPER("truncate");
+           if (!GvIO(tmpgv) || !IoIFP(GvIOp(tmpgv)))
+               result = 0;
+           else {
+               PerlIO_flush(IoIFP(GvIOp(tmpgv)));
 #ifdef HAS_TRUNCATE
-           if (ftruncate(PerlIO_fileno(IoIFP(GvIOn(tmpgv))), len) < 0)
+               if (ftruncate(PerlIO_fileno(IoIFP(GvIOn(tmpgv))), len) < 0)
 #else
-           if (my_chsize(PerlIO_fileno(IoIFP(GvIOn(tmpgv))), len) < 0)
+               if (my_chsize(PerlIO_fileno(IoIFP(GvIOn(tmpgv))), len) < 0)
 #endif
-               result = 0;
-       }
-    }
-    else {
-       SV *sv = POPs;
-       char *name;
-       STRLEN n_a;
-
-       if (SvTYPE(sv) == SVt_PVGV) {
-           tmpgv = (GV*)sv;            /* *main::FRED for example */
-           goto do_ftruncate;
-       }
-       else if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVGV) {
-           tmpgv = (GV*) SvRV(sv);     /* \*main::FRED for example */
-           goto do_ftruncate;
+                   result = 0;
+           }
        }
+       else {
+           SV *sv = POPs;
+           char *name;
+         
+           if (SvTYPE(sv) == SVt_PVGV) {
+               tmpgv = (GV*)sv;                /* *main::FRED for example */
+               goto do_ftruncate;
+           }
+           else if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVGV) {
+               tmpgv = (GV*) SvRV(sv); /* \*main::FRED for example */
+               goto do_ftruncate;
+           }
 
-       name = SvPV(sv, n_a);
-       TAINT_PROPER("truncate");
+           name = SvPV(sv, n_a);
+           TAINT_PROPER("truncate");
 #ifdef HAS_TRUNCATE
-       if (truncate(name, len) < 0)
-           result = 0;
+           if (truncate(name, len) < 0)
+               result = 0;
 #else
-       {
-           int tmpfd;
-           if ((tmpfd = PerlLIO_open(name, O_RDWR)) < 0)
-               result = 0;
-           else {
-               if (my_chsize(tmpfd, len) < 0)
+           {
+               int tmpfd;
+
+               if ((tmpfd = PerlLIO_open(name, O_RDWR)) < 0)
                    result = 0;
-               PerlLIO_close(tmpfd);
+               else {
+                   if (my_chsize(tmpfd, len) < 0)
+                       result = 0;
+                   PerlLIO_close(tmpfd);
+               }
            }
-       }
 #endif
-    }
+       }
 
-    if (result)
-       RETPUSHYES;
-    if (!errno)
-       SETERRNO(EBADF,RMS$_IFI);
-    RETPUSHUNDEF;
+       if (result)
+           RETPUSHYES;
+       if (!errno)
+           SETERRNO(EBADF,RMS$_IFI);
+       RETPUSHUNDEF;
+    }
 #else
     DIE(aTHX_ "truncate not implemented");
 #endif
@@ -2066,7 +2074,7 @@ PP(pp_ioctl)
 {
     dSP; dTARGET;
     SV *argsv = POPs;
-    unsigned int func = U_I(POPn);
+    unsigned int func = POPu;
     int optype = PL_op->op_type;
     char *s;
     IV retval;
@@ -3296,7 +3304,7 @@ PP(pp_fttext)
 #else
        else if (*s & 128) {
 #ifdef USE_LOCALE
-           if ((PL_op->op_private & OPpLOCALE) && isALPHA_LC(*s))
+           if (IN_LOCALE_RUNTIME && isALPHA_LC(*s))
                continue;
 #endif
            /* utf8 characters don't count as odd */
@@ -3392,10 +3400,9 @@ PP(pp_chown)
 PP(pp_chroot)
 {
     dSP; dTARGET;
-    char *tmps;
 #ifdef HAS_CHROOT
     STRLEN n_a;
-    tmps = POPpx;
+    char *tmps = POPpx;
     TAINT_PROPER("chroot");
     PUSHi( chroot(tmps) >= 0 );
     RETURN;
@@ -3966,7 +3973,7 @@ PP(pp_system)
 
     if (SP - MARK == 1) {
        if (PL_tainting) {
-           char *junk = SvPV(TOPs, n_a);
+           (void)SvPV_nolen(TOPs);      /* stringify for taint check */
            TAINT_ENV();
            TAINT_PROPER("system");
        }
@@ -4092,7 +4099,7 @@ PP(pp_exec)
 #endif
     else {
        if (PL_tainting) {
-           char *junk = SvPV(*SP, n_a);
+           (void)SvPV_nolen(*SP);      /* stringify for taint check */
            TAINT_ENV();
            TAINT_PROPER("exec");
        }
@@ -4203,11 +4210,9 @@ PP(pp_setpgrp)
 PP(pp_getpriority)
 {
     dSP; dTARGET;
-    int which;
-    int who;
 #ifdef HAS_GETPRIORITY
-    who = POPi;
-    which = TOPi;
+    int who = POPi;
+    int which = TOPi;
     SETi( getpriority(which, who) );
     RETURN;
 #else
@@ -4218,13 +4223,10 @@ PP(pp_getpriority)
 PP(pp_setpriority)
 {
     dSP; dTARGET;
-    int which;
-    int who;
-    int niceval;
 #ifdef HAS_SETPRIORITY
-    niceval = POPi;
-    who = POPi;
-    which = TOPi;
+    int niceval = POPi;
+    int who = POPi;
+    int which = TOPi;
     TAINT_PROPER("setpriority");
     SETi( setpriority(which, who, niceval) >= 0 );
     RETURN;
@@ -4654,7 +4656,7 @@ PP(pp_gnetent)
     else if (which == OP_GNBYADDR) {
 #ifdef HAS_GETNETBYADDR
        int addrtype = POPi;
-       Netdb_net_t addr = (Netdb_net_t) U_L(POPn);
+       Netdb_net_t addr = (Netdb_net_t) (U32)POPu;
        nent = PerlSock_getnetbyaddr(addr, addrtype);
 #else
        DIE(aTHX_ PL_no_sock_func, "getnetbyaddr");