pike.git
/
lib
/
modules
/
Search.pmod
/
Filter.pmod
/
Base.pike
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/lib/modules/Search.pmod/Filter.pmod/Base.pike:1:
+
#pike __REAL_VERSION__
-
+
//! The MIME content types this class can filter.
+
constant contenttypes = ({ });
+
+
//!
+
.Output filter(Standards.URI uri, string|Stdio.File data,
+
string content_type, mixed ... more);
+
+
+
string my_popen(array(string) args, string|void cwd, int|void wait_for_exit,
+
array(string)|void watchdog_args)
+
// A smarter version of Process.popen: No need to quote arguments.
+
{
+
Stdio.File pipe0 = Stdio.File();
+
Stdio.File pipe1 = pipe0->pipe(Stdio.PROP_IPC);
+
if(!pipe1)
+
if(!pipe1) error("my_popen failed (couldn't create pipe).\n");
+
mapping setup = ([ "env":getenv(), "stdout":pipe1, "nice": 20 ]);
+
if (cwd)
+
setup["cwd"] = cwd;
+
Process.create_process proc = Process.create_process(args, setup);
+
pipe1->close();
+
+
// Launch watchdog if provided (requires wait_for_exit)
+
Process.Process watchdog;
+
if (wait_for_exit && watchdog_args) {
+
// Insert pid of running process where caller used "%p"
+
array(string) wd_args =
+
replace(watchdog_args + ({ }), "%p", (string) proc->pid());
+
watchdog = Process.spawn_pike(wd_args);
+
}
+
+
string result = pipe0->read();
+
if(!result)
+
error("my_popen failed with error "+pipe0->errno()+".\n");
+
pipe0->close();
+
if (wait_for_exit)
+
proc->wait();
+
+
if (watchdog)
+
watchdog->kill(9);
+
+
return result;
+
}
Newline at end of file added.