| line |
true |
false |
branch |
|
34
|
4 |
0 |
return errno ? 0 : pid; |
|
46
|
0 |
0 |
if (ckWARN(WARN_EXEC)) |
|
64
|
0 |
1 |
Newx(argv, sp - mark + 1, const char*); |
|
68
|
4 |
1 |
while (++mark <= sp) { |
|
69
|
4 |
0 |
if (*mark) { |
|
70
|
3 |
1 |
char *arg = savepv(SvPV_nolen_const(*mark)); |
|
77
|
0 |
1 |
if (really) { |
|
78
|
0 |
0 |
tmps = savepv(SvPV_nolen_const(really)); |
|
81
|
1 |
0 |
if ((!really && argv[0] && *argv[0] != '/') || |
|
|
1 |
0 |
if ((!really && argv[0] && *argv[0] != '/') || |
|
|
1 |
0 |
if ((!really && argv[0] && *argv[0] != '/') || |
|
|
0 |
1 |
if ((!really && argv[0] && *argv[0] != '/') || |
|
82
|
0 |
0 |
(really && *tmps != '/')) /* will posix_spawn use PATH? */ |
|
83
|
0 |
0 |
TAINT_ENV(); /* testing IFS here is overkill, probably */ |
|
85
|
0 |
1 |
if (really && *tmps) { |
|
|
0 |
0 |
if (really && *tmps) { |
|
88
|
1 |
0 |
} else if (argv[0]) { |
|
95
|
0 |
0 |
S_posix_spawn_failed(aTHX_ (really ? tmps : argv[0] ? argv[0] : "")); |
|
|
0 |
0 |
S_posix_spawn_failed(aTHX_ (really ? tmps : argv[0] ? argv[0] : "")); |
|
133
|
3 |
0 |
while (*cmd && isSPACE(*cmd)) |
|
|
0 |
3 |
while (*cmd && isSPACE(*cmd)) |
|
176
|
0 |
3 |
if (*cmd == '.' && isSPACE(cmd[1])) |
|
|
0 |
0 |
if (*cmd == '.' && isSPACE(cmd[1])) |
|
179
|
0 |
3 |
if (strBEGINs(cmd,"exec") && isSPACE(cmd[4])) |
|
|
0 |
0 |
if (strBEGINs(cmd,"exec") && isSPACE(cmd[4])) |
|
183
|
23 |
3 |
while (isWORDCHAR(*s)) |
|
185
|
0 |
3 |
if (*s == '=') |
|
188
|
49 |
1 |
for (s = cmd; *s; s++) { |
|
189
|
46 |
3 |
if (*s != ' ' && !isALPHA(*s) && |
|
|
7 |
39 |
if (*s != ' ' && !isALPHA(*s) && |
|
|
2 |
5 |
if (*s != ' ' && !isALPHA(*s) && |
|
191
|
0 |
2 |
if (*s == '\n' && !s[1]) { |
|
|
0 |
0 |
if (*s == '\n' && !s[1]) { |
|
196
|
0 |
2 |
if (*s == '>' && s[1] == '&' && s[2] == '1' |
|
|
0 |
0 |
if (*s == '>' && s[1] == '&' && s[2] == '1' |
|
|
0 |
0 |
if (*s == '>' && s[1] == '&' && s[2] == '1' |
|
197
|
0 |
0 |
&& s > cmd + 1 && s[-1] == '2' && isSPACE(s[-2]) |
|
|
0 |
0 |
&& s > cmd + 1 && s[-1] == '2' && isSPACE(s[-2]) |
|
|
0 |
0 |
&& s > cmd + 1 && s[-1] == '2' && isSPACE(s[-2]) |
|
198
|
0 |
0 |
&& (!s[3] || isSPACE(s[3]))) |
|
|
0 |
0 |
&& (!s[3] || isSPACE(s[3]))) |
|
202
|
0 |
0 |
while (*t && isSPACE(*t)) |
|
|
0 |
0 |
while (*t && isSPACE(*t)) |
|
204
|
0 |
0 |
if (!*t && (PerlLIO_dup2(1,2) != -1)) { |
|
|
0 |
0 |
if (!*t && (PerlLIO_dup2(1,2) != -1)) { |
|
213
|
2 |
0 |
if (pid) return pid; |
|
219
|
0 |
1 |
Newx(argv, (s - cmd) / 2 + 2, const char*); |
|
224
|
1 |
1 |
for (s = cmd; *s;) { |
|
225
|
0 |
1 |
while (isSPACE(*s)) |
|
227
|
1 |
0 |
if (*s) |
|
229
|
19 |
1 |
while (*s && !isSPACE(*s)) |
|
|
19 |
0 |
while (*s && !isSPACE(*s)) |
|
231
|
0 |
1 |
if (*s) |
|
235
|
1 |
0 |
if (argv[0]) { |
|
239
|
1 |
0 |
if (pid) return pid; |
|
240
|
0 |
0 |
if (errno == ENOEXEC) /* for system V NIH syndrome */ |
|
257
|
0 |
4 |
if (PL_tainting) { |
|
258
|
0 |
0 |
TAINT_ENV(); |
|
259
|
0 |
0 |
while (++MARK <= SP) { |
|
261
|
0 |
0 |
(void)SvPV_nolen_const(*MARK); |
|
262
|
0 |
0 |
if (PL_tainted) |
|
266
|
0 |
0 |
TAINT_PROPER("spawn"); |
|
276
|
1 |
3 |
else if (SP - MARK != 1) |
|
279
|
3 |
0 |
pid = do_posix_spawn1(aTHX_ SvPV_nolen(sv_mortalcopy(*SP))); |
|
283
|
2 |
2 |
XPUSHi(pid); |
|
|
0 |
4 |
XPUSHi(pid); |