#include #include #include #include #include static void carpsysargs(char *args[]) { buffer_puts(buffer_2, "failed to exec"); while (*args) { buffer_puts(buffer_2, " \'"); buffer_puts(buffer_2, *args); buffer_puts(buffer_2, "'"); args++; } buffer_puts(buffer_2, ": "); buffer_puts(buffer_2, strerror(errno)); buffer_puts(buffer_2, "\n"); buffer_flush(buffer_2); } pid_t spawnchild(char *args[], int infd, int outfd, int errfd) { pid_t pid = fork(); switch (pid) { case -1: carpsys("fork: "); return -1; case 0: // TODO pipe if (dup2(1, outfd)<0 || dup2(2, errfd)<0 ) { carpsys("dup2"); return -1; } execvp(args[0], args); carpsysargs(args); return -1; default: return pid; } }