int ismodifying;
if (num_svs != 0) {
- Perl_croak(aTHX_ "panic: sysopen with multiple args");
+ Perl_croak(aTHX_ "panic: sysopen with multiple args, num_svs=%ld",
+ (long) num_svs);
}
/* It's not always
io = GvIO(gv);
do_fstat_have_io:
PL_laststype = OP_STAT;
- PL_statgv = gv;
+ PL_statgv = gv ? gv : (GV *)io;
sv_setpvs(PL_statname, "");
if(io) {
if (IoIFP(io)) {
return (PL_laststatval = PerlLIO_fstat(PerlIO_fileno(IoIFP(io)), &PL_statcache));
} else if (IoDIRP(io)) {
return (PL_laststatval = PerlLIO_fstat(my_dirfd(IoDIRP(io)), &PL_statcache));
- } else {
- report_evil_fh(gv);
- return (PL_laststatval = -1);
}
- } else {
- report_evil_fh(gv);
- return (PL_laststatval = -1);
}
- }
- else if (PL_op->op_private & OPpFT_STACKED) {
- return PL_laststatval;
+ PL_laststatval = -1;
+ report_evil_fh(gv);
+ return -1;
}
else {
- SV* const sv = POPs;
+ SV* const sv = PL_op->op_private & OPpFT_STACKING ? TOPs : POPs;
+ PUTBACK;
+ if ((PL_op->op_private & (OPpFT_STACKED|OPpFT_AFTER_t))
+ == OPpFT_STACKED)
+ return PL_laststatval;
+ else {
const char *s;
STRLEN len;
- PUTBACK;
if ((gv = MAYBE_DEREF_GV_flags(sv,flags))) {
goto do_fstat;
}
if (PL_laststatval < 0 && ckWARN(WARN_NEWLINE) && strchr(s, '\n'))
Perl_warner(aTHX_ packWARN(WARN_NEWLINE), PL_warn_nl, "stat");
return PL_laststatval;
+ }
}
}
Perl_croak(aTHX_ no_prev_lstat);
return PL_laststatval;
}
+ PL_laststatval = -1;
if (ckWARN(WARN_IO)) {
Perl_warner(aTHX_ packWARN(WARN_IO),
"Use of -l on filehandle %"HEKf,
HEKfARG(GvENAME_HEK(cGVOP_gv)));
}
- return (PL_laststatval = -1);
+ return -1;
}
- else if (PL_op->op_private & OPpFT_STACKED) {
+ sv = PL_op->op_private & OPpFT_STACKING ? TOPs : POPs;
+ PUTBACK;
+ if ((PL_op->op_private & (OPpFT_STACKED|OPpFT_AFTER_t))
+ == OPpFT_STACKED) {
if (PL_laststype != OP_LSTAT)
Perl_croak(aTHX_ no_prev_lstat);
return PL_laststatval;
PL_laststype = OP_LSTAT;
PL_statgv = NULL;
- sv = POPs;
- PUTBACK;
file = SvPV_flags_const_nolen(sv, flags);
sv_setpv(PL_statname,file);
PL_laststatval = PerlLIO_lstat(file,&PL_statcache);
while (++mark <= sp) {
s = SvPV_nolen_const(*mark);
APPLY_TAINT_PROPER();
- if (PL_euid || PL_unsafe) {
+ if (PerlProc_geteuid() || PL_unsafe) {
if (UNLINK(s))
tot--;
}
# ifdef __CYGWIN__
if (ingroup(544,effective)) { /* member of Administrators */
# else
- if ((effective ? PL_euid : PL_uid) == 0) { /* root is special */
+ if ((effective ? PerlProc_geteuid() : PerlProc_getuid()) == 0) { /* root is special */
# endif
if (mode == S_IXUSR) {
if (statbufp->st_mode & 0111 || S_ISDIR(statbufp->st_mode))
return TRUE; /* root reads and writes anything */
return FALSE;
}
- if (statbufp->st_uid == (effective ? PL_euid : PL_uid) ) {
+ if (statbufp->st_uid == (effective ? PerlProc_geteuid() : PerlProc_getuid()) ) {
if (statbufp->st_mode & mode)
return TRUE; /* ok as "user" */
}
S_ingroup(pTHX_ Gid_t testgid, bool effective)
{
dVAR;
- if (testgid == (effective ? PL_egid : PL_gid))
+ if (testgid == (effective ? PerlProc_getegid() : PerlProc_getgid()))
return TRUE;
#ifdef HAS_GETGROUPS
{