#include /* errno */ #include /* fprintf(3), stderr, "psops.c" */ #include /* strerror(3) */ #include /* EX_OSERR, "psops.c" */ #include /* execvp(3) */ #include /* */ #include /* wait(2) */ #include "libpsargs.h" /* corresponding_arg(3), "psops.c" */ static char *program_name = "pscat"; int f(char **argv){ int child; char **corr; *(corr = corresponding_arg(argv)) = NULL; switch(fork()){ case -1: fprintf(stderr, "%s: %s\n", program_name, strerror(errno)); return EX_OSERR; case 0: execvp(argv[1], argv+1); default: wait(&child); argv = corr; return *++argv == NULL ? WIFEXITED(child) * WEXITSTATUS(child) : f(argv); } } #include "psops.c"