Remove if(isGV_with_GP(PL_defoutgv)) checks from mg.c
authorFather Chrysostomos <sprout@cpan.org>
Tue, 13 Sep 2011 06:31:18 +0000 (23:31 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Tue, 13 Sep 2011 06:31:18 +0000 (23:31 -0700)
Commit 099be4f1d added code to cope with this:

    my $x = *STDERR; select($x); $x = 1;

which would cause PL_defoutgv to hold something other than a GV,
resulting in various crashes.

Commit 2acc3314 changed the way rv2gv works on fake globs, and inad-
vertently fixed this problem, too, so PL_defoutgv can no longer end up
holding something other than a GV.

So the code that checks if(isGV_with_GP(PL_defoutgv)) can go.

mg.c

diff --git a/mg.c b/mg.c
index bb4c04a..232db2c 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -1032,9 +1032,7 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
        }
        break;
     case '^':
-       if (!isGV_with_GP(PL_defoutgv))
-           s = "";
-       else if (GvIOp(PL_defoutgv))
+       if (GvIOp(PL_defoutgv))
                s = IoTOP_NAME(GvIOp(PL_defoutgv));
        if (s)
            sv_setpv(sv,s);
@@ -1044,9 +1042,7 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
        }
        break;
     case '~':
-       if (!isGV_with_GP(PL_defoutgv))
-           s = "";
-       else if (GvIOp(PL_defoutgv))
+       if (GvIOp(PL_defoutgv))
            s = IoFMT_NAME(GvIOp(PL_defoutgv));
        if (!s)
            s = GvENAME(PL_defoutgv);
@@ -2669,33 +2665,25 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
            IoLINES(GvIOp(PL_last_in_gv)) = SvIV(sv);
        break;
     case '^':
-       if (isGV_with_GP(PL_defoutgv)) {
-           Safefree(IoTOP_NAME(GvIOp(PL_defoutgv)));
-           s = IoTOP_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
-           IoTOP_GV(GvIOp(PL_defoutgv)) =  gv_fetchsv(sv, GV_ADD, SVt_PVIO);
-       }
+       Safefree(IoTOP_NAME(GvIOp(PL_defoutgv)));
+       s = IoTOP_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
+       IoTOP_GV(GvIOp(PL_defoutgv)) =  gv_fetchsv(sv, GV_ADD, SVt_PVIO);
        break;
     case '~':
-       if (isGV_with_GP(PL_defoutgv)) {
-           Safefree(IoFMT_NAME(GvIOp(PL_defoutgv)));
-           s = IoFMT_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
-           IoFMT_GV(GvIOp(PL_defoutgv)) =  gv_fetchsv(sv, GV_ADD, SVt_PVIO);
-       }
+       Safefree(IoFMT_NAME(GvIOp(PL_defoutgv)));
+       s = IoFMT_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
+       IoFMT_GV(GvIOp(PL_defoutgv)) =  gv_fetchsv(sv, GV_ADD, SVt_PVIO);
        break;
     case '=':
-       if (isGV_with_GP(PL_defoutgv))
-           IoPAGE_LEN(GvIOp(PL_defoutgv)) = (SvIV(sv));
+       IoPAGE_LEN(GvIOp(PL_defoutgv)) = (SvIV(sv));
        break;
     case '-':
-       if (isGV_with_GP(PL_defoutgv)) {
-           IoLINES_LEFT(GvIOp(PL_defoutgv)) = (SvIV(sv));
-           if (IoLINES_LEFT(GvIOp(PL_defoutgv)) < 0L)
+       IoLINES_LEFT(GvIOp(PL_defoutgv)) = (SvIV(sv));
+       if (IoLINES_LEFT(GvIOp(PL_defoutgv)) < 0L)
                IoLINES_LEFT(GvIOp(PL_defoutgv)) = 0L;
-       }
        break;
     case '%':
-       if (isGV_with_GP(PL_defoutgv))
-           IoPAGE(GvIOp(PL_defoutgv)) = (SvIV(sv));
+       IoPAGE(GvIOp(PL_defoutgv)) = (SvIV(sv));
        break;
     case '|':
        {