The routine BufferOutputCommand can run an arbitrary command in a
separate process, and collects its output in a buffer of the requested
size. It will kill the process when it doesn't terminate spontaneously,
and return the allocated buffer.
int StartChildProcess P((char *cmdLine, char *dir, ProcRef *pr));
void DestroyChildProcess P((ProcRef pr, int/*boolean*/ signal));
void InterruptChildProcess P((ProcRef pr));
+char *BufferCommandOutput P((char *command, int size));
void RunCommand P((char *buf));
int OpenTelnet P((char *host, char *port, ProcRef *pr));
close(cp->fdTo);
}
+char *
+BufferCommandOutput (char *command, int size)
+{
+ ChildProc *pr;
+ char *res = (char *) calloc(1, size);
+ if(res) {
+ int count;
+ StartChildProcess(command, ".", (ProcRef) &pr); // run command in daughter process
+ count = read(pr->fdFrom, res, size-1); // read its output
+ res[count > 0 ? count : 0] = NULLCHAR;
+ DestroyChildProcess((ProcRef) pr, 9);
+ free(pr);
+ }
+ return res; // return buffer with output
+}
+
void
InterruptChildProcess (ProcRef pr)
{