Files
src/pscat/pscat.c
T
2023-08-20 19:43:29 -04:00

44 lines
869 B
C

#include <stdio.h> /* fprintf(3), stderr */
#include <sysexits.h> /* EX_USAGE */
#include <unistd.h> /* execvp(3) */
#include <sys/types.h> /* <sys/wait.h> */
#include <sys/wait.h> /* wait(2) */
#include "psargs.h"
static char *program_name = "pscat";
#define L_PAREN '['
#define R_PAREN ']'
int
forking(char **argv){
int child;
char **corr;
corr = corresponding_arg(argv, L_PAREN, R_PAREN);
*corr = NULL;
if(fork() == 0){
execvp(argv[1], argv+1);
}else{
wait(&child);
argv = corr;
if(*++argv == NULL)
return WIFEXITED(child) * WEXITSTATUS(child);
else
return forking(argv);
}
}
int main(int argc, char *argv[]){
if(check_arg(++argv, L_PAREN, R_PAREN) == 0){
fprintf(stderr,
"Usage: %s \"[\" [utility [argument...]] \"]\" ...\n",
argv[-1] == NULL ? program_name : argv[-1]
);
return EX_USAGE;
}else
return forking(argv);
}