#include "../lib/exec/exec.h" #include "../lib/sys/fork.h" #include "../lib/sys/wait4.h" #include "../lib/io/io.h" #include "../lib/sys/types.h" #include "../lib/cstr/cstr.h" char line[BUFSIZ]; void replace_args(char **argv, char *rep) { for (; *argv; ++argv) { if (cstr_compare(*argv, "%") == 0) { *argv = rep; } } } int main(int argc, char **argv) { if (argc <= 1) { wff(STDERR_FD, "for command [args...] % [args...]") return -1; } i64 size; int pid; while ((size = get_next_line_from_fd(STDIN_FD, line)) >= 0) { pid = fork(); if (pid == 0) { replace_args(argv + 1, line); exec((const char**)(argv + 1)); wff(STDERR_FD, "command not found: %s", argv[1]); return -1; } wait4(pid, 0, 0, 0); } return 0; }