summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/overload.t12
-rw-r--r--pp_sys.c24
2 files changed, 15 insertions, 21 deletions
diff --git a/lib/overload.t b/lib/overload.t
index d59c33daf7..d116925f15 100644
--- a/lib/overload.t
+++ b/lib/overload.t
@@ -1815,17 +1815,7 @@ foreach my $op (qw(<=> == != < <= > >=)) {
# long as the tied and untied versions return the same value.
# The flags below are chosen to test all uses of tryAMAGICftest_MG
for (qw(r e f l t T)) {
- # XXX TODO -X overload with fallback calls FETCH too often
- # XXX and -t calls "" too often too
- #push @tests, [ 'TEST', "-$_ (%s)", '(-X)', '("")', [ 1, 2, 0 ], 0 ];
- if ($_ eq 't') {
- push @tests, [ 'TEST', "-$_ (%s)", '(-X)', '("")("")',
- [ 1, 2, 0, 1, 5, 0 ], 0 ];
- }
- else {
- push @tests, [ 'TEST', "-$_ (%s)", '(-X)', '("")',
- [ 1, 2, 0, 1, 3, 0 ], 0 ];
- }
+ push @tests, [ 'TEST', "-$_ (%s)", '(-X)', '("")', [ 1, 2, 0 ], 0 ];
}
$subs{'${}'} = '%s';
diff --git a/pp_sys.c b/pp_sys.c
index 8af9799b00..fbac57691f 100644
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -3133,7 +3133,7 @@ PP(pp_ftrread)
#endif
}
- result = my_stat_flags(SV_GMAGIC);
+ result = my_stat_flags(0);
SPAGAIN;
if (result < 0)
RETPUSHUNDEF;
@@ -3161,7 +3161,7 @@ PP(pp_ftis)
STACKED_FTEST_CHECK;
- result = my_stat_flags(SV_GMAGIC);
+ result = my_stat_flags(0);
SPAGAIN;
if (result < 0)
RETPUSHUNDEF;
@@ -3233,7 +3233,7 @@ PP(pp_ftrowned)
STACKED_FTEST_CHECK;
- result = my_stat_flags(SV_GMAGIC);
+ result = my_stat_flags(0);
SPAGAIN;
if (result < 0)
RETPUSHUNDEF;
@@ -3303,7 +3303,7 @@ PP(pp_ftlink)
I32 result;
tryAMAGICftest_MG('l');
- result = my_lstat_flags(SV_GMAGIC);
+ result = my_lstat_flags(0);
SPAGAIN;
if (result < 0)
@@ -3320,6 +3320,8 @@ PP(pp_fttty)
int fd;
GV *gv;
SV *tmpsv = NULL;
+ char *name;
+ STRLEN namelen;
tryAMAGICftest_MG('t');
@@ -3331,15 +3333,17 @@ PP(pp_fttty)
gv = MUTABLE_GV(POPs);
else if (SvROK(TOPs) && isGV(SvRV(TOPs)))
gv = MUTABLE_GV(SvRV(POPs));
- else
- gv = gv_fetchsv(tmpsv = POPs, 0, SVt_PVIO);
+ else {
+ tmpsv = POPs;
+ name = SvPV_nomg(tmpsv, namelen);
+ gv = gv_fetchpvn_flags(name, namelen, SvUTF8(tmpsv), SVt_PVIO);
+ }
if (GvIO(gv) && IoIFP(GvIOp(gv)))
fd = PerlIO_fileno(IoIFP(GvIOp(gv)));
else if (tmpsv && SvOK(tmpsv)) {
- const char *tmps = SvPV_nolen_const(tmpsv);
- if (isDIGIT(*tmps))
- fd = atoi(tmps);
+ if (isDIGIT(*name))
+ fd = atoi(name);
else
RETPUSHUNDEF;
}
@@ -3440,7 +3444,7 @@ PP(pp_fttext)
really_filename:
PL_statgv = NULL;
PL_laststype = OP_STAT;
- sv_setpv(PL_statname, SvPV_nolen_const(sv));
+ sv_setpv(PL_statname, SvPV_nomg_const_nolen(sv));
if (!(fp = PerlIO_open(SvPVX_const(PL_statname), "r"))) {
if (ckWARN(WARN_NEWLINE) && strchr(SvPV_nolen_const(PL_statname),
'\n'))