summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doio.c18
-rw-r--r--pp_sys.c12
-rw-r--r--t/op/tie_fetch_count.t8
3 files changed, 10 insertions, 28 deletions
diff --git a/doio.c b/doio.c
index 7cb00968e4..e2c879c089 100644
--- a/doio.c
+++ b/doio.c
@@ -1619,10 +1619,7 @@ Perl_apply(pTHX_ I32 type, register SV **mark, register SV **sp)
tot = sp - mark;
while (++mark <= sp) {
GV* gv;
- SvGETMAGIC(*mark);
- if (isGV_with_GP(*mark)) {
- gv = MUTABLE_GV(*mark);
- do_fchmod:
+ if ((gv = MAYBE_DEREF_GV(*mark))) {
if (GvIO(gv) && IoIFP(GvIOp(gv))) {
#ifdef HAS_FCHMOD
APPLY_TAINT_PROPER();
@@ -1636,10 +1633,6 @@ Perl_apply(pTHX_ I32 type, register SV **mark, register SV **sp)
tot--;
}
}
- else if (SvROK(*mark) && isGV_with_GP(SvRV(*mark))) {
- gv = MUTABLE_GV(SvRV(*mark));
- goto do_fchmod;
- }
else {
const char *name = SvPV_nomg_const_nolen(*mark);
APPLY_TAINT_PROPER();
@@ -1660,10 +1653,7 @@ Perl_apply(pTHX_ I32 type, register SV **mark, register SV **sp)
tot = sp - mark;
while (++mark <= sp) {
GV* gv;
- SvGETMAGIC(*mark);
- if (isGV_with_GP(*mark)) {
- gv = MUTABLE_GV(*mark);
- do_fchown:
+ if ((gv = MAYBE_DEREF_GV(*mark))) {
if (GvIO(gv) && IoIFP(GvIOp(gv))) {
#ifdef HAS_FCHOWN
APPLY_TAINT_PROPER();
@@ -1677,10 +1667,6 @@ Perl_apply(pTHX_ I32 type, register SV **mark, register SV **sp)
tot--;
}
}
- else if (SvROK(*mark) && isGV_with_GP(SvRV(*mark))) {
- gv = MUTABLE_GV(SvRV(*mark));
- goto do_fchown;
- }
else {
const char *name = SvPV_nomg_const_nolen(*mark);
APPLY_TAINT_PROPER();
diff --git a/pp_sys.c b/pp_sys.c
index e92d13de8e..50c1a12986 100644
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -3466,18 +3466,8 @@ PP(pp_chdir)
if (PL_op->op_flags & OPf_SPECIAL) {
gv = gv_fetchsv(sv, 0, SVt_PVIO);
}
- else {
- SvGETMAGIC(sv);
- if(isGV_with_GP(sv)) {
- gv = MUTABLE_GV(sv);
- }
- else if (SvROK(sv) && isGV_with_GP(SvRV(sv))) {
- gv = MUTABLE_GV(SvRV(sv));
- }
- else {
+ else if (!(gv = MAYBE_DEREF_GV(sv)))
tmps = SvPV_nomg_const_nolen(sv);
- }
- }
}
if( !gv && (!tmps || !*tmps) ) {
diff --git a/t/op/tie_fetch_count.t b/t/op/tie_fetch_count.t
index d55ab5099e..b62f66d1bc 100644
--- a/t/op/tie_fetch_count.t
+++ b/t/op/tie_fetch_count.t
@@ -7,7 +7,7 @@ BEGIN {
chdir 't' if -d 't';
@INC = '../lib';
require './test.pl';
- plan (tests => 223);
+ plan (tests => 226);
}
use strict;
@@ -222,9 +222,15 @@ $var8->bolgy ; check_count '->method';
$var8 = *dummy; $dummy = $var8; $count = 0;
eval { chdir $var8 } ; check_count 'chdir $tied_glob';
$var8 = *dummy; $dummy = $var8; $count = 0;
+eval { chdir \$var8 } ; check_count 'chdir \$tied_glob';
+$var8 = *dummy; $dummy = $var8; $count = 0;
eval { chmod 0, $var8 } ; check_count 'chmod 0,$tied_glob';
$var8 = *dummy; $dummy = $var8; $count = 0;
+eval { chmod 0,\$var8 } ; check_count 'chmod 0,\$tied_glob';
+$var8 = *dummy; $dummy = $var8; $count = 0;
eval { chown 0,0,$var8 }; check_count 'chown 0,0,$tied_glob';
+$var8 = *dummy; $dummy = $var8; $count = 0;
+eval { chown 0,0,\$var8}; check_count 'chown 0,0,\$tied_glob';
###############################################