perl
view release on metacpan or search on metacpan
if (*s++ == '\'') {
char * const ncmd = s;
while (*s)
s++;
if (s[-1] == '\n')
*--s = '\0';
if (s[-1] == '\'') {
*--s = '\0';
PERL_FPU_PRE_EXEC
PerlProc_execl(PL_cshname, "csh", flags, ncmd, (char*)NULL);
PERL_FPU_POST_EXEC
*s = '\'';
S_exec_failed(aTHX_ PL_cshname, fd, do_report);
goto leave;
}
}
}
}
#endif /* CSH */
/* see if there are shell metacharacters in it */
if (*cmd == '.' && isSPACE(cmd[1]))
goto doshell;
if (strBEGINs(cmd,"exec") && isSPACE(cmd[4]))
goto doshell;
s = cmd;
while (isWORDCHAR(*s))
s++; /* catch VAR=val gizmo */
if (*s == '=')
goto doshell;
for (s = cmd; *s; s++) {
if (*s != ' ' && !isALPHA(*s) &&
memCHRs("$&*(){}[]'\";\\|?<>~`\n",*s)) {
if (*s == '\n' && !s[1]) {
*s = '\0';
break;
}
/* handle the 2>&1 construct at the end */
if (*s == '>' && s[1] == '&' && s[2] == '1'
&& s > cmd + 1 && s[-1] == '2' && isSPACE(s[-2])
&& (!s[3] || isSPACE(s[3])))
{
const char *t = s + 3;
while (*t && isSPACE(*t))
++t;
if (!*t && (PerlLIO_dup2(1,2) != -1)) {
s[-2] = '\0';
break;
}
}
doshell:
PERL_FPU_PRE_EXEC
#if defined(OEMVS)
#if (__CHARSET_LIB == 1)
unsetenv("_TAG_REDIR_ERR");
#endif
#endif
PerlProc_execl(PL_sh_path, "sh", "-c", cmd, (char *)NULL);
PERL_FPU_POST_EXEC
S_exec_failed(aTHX_ PL_sh_path, fd, do_report);
goto leave;
}
}
Newx(argv, (s - cmd) / 2 + 2, const char*);
SAVEFREEPV(argv);
cmd = savepvn(cmd, s-cmd);
SAVEFREEPV(cmd);
a = argv;
for (s = cmd; *s;) {
while (isSPACE(*s))
s++;
if (*s)
*(a++) = s;
while (*s && !isSPACE(*s))
s++;
if (*s)
*s++ = '\0';
}
*a = NULL;
if (argv[0]) {
PERL_FPU_PRE_EXEC
PerlProc_execvp(argv[0],EXEC_ARGV_CAST(argv));
PERL_FPU_POST_EXEC
if (errno == ENOEXEC) /* for system V NIH syndrome */
goto doshell;
S_exec_failed(aTHX_ argv[0], fd, do_report);
}
leave:
LEAVE;
return FALSE;
}
#endif /* OS2 || WIN32 */
SSize_t
Perl_apply(pTHX_ I32 type, SV **mark, SV **sp)
{
PERL_ARGS_ASSERT_APPLY;
I32 val;
SSize_t tot = 0;
const char *const what = PL_op_name[type];
const char *s;
STRLEN len;
SV ** const oldmark = mark;
bool killgp = FALSE;
PERL_UNUSED_VAR(what); /* may not be used depending on compile options */
/* Doing this ahead of the switch statement preserves the old behaviour,
where attempting to use kill as a taint test would fail on
platforms where kill was not defined. */
#ifndef HAS_KILL
if (type == OP_KILL)
( run in 1.101 second using v1.01-cache-2.11-cpan-5c0b1e786e0 )