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); |