+ for (decltype(argc) i(0); i != argc; ++i) {
+ inject << " '";
+ for (const char *arg(argv[i]); *arg != '\0'; ++arg)
+ if (*arg != '\'')
+ inject.put(*arg);
+ else
+ inject << "'\\''";
+ inject << "'";
+ }
+
+ FILE *process(popen(inject.str().c_str(), "r"));
+ _assert(process != NULL);
+
+ for (;;) {
+ char data[1024];
+ auto writ(fread(data, 1, sizeof(data), process));
+ stream.write(data, writ);
+
+ if (writ == sizeof(data))
+ continue;
+ _assert(!ferror(process));
+ if (feof(process))
+ break;
+ }