cproc

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.nihaljere.xyz/cproc
Log | Files | Refs | Submodules | README | LICENSE

commit 62c5dc41974a0f71ab3a6d0148222c9f9ed808e7
parent 173957fae99508b18915daf1bd5768172afc44a3
Author: Michael Forney <mforney@mforney.org>
Date:   Mon, 13 May 2019 12:26:10 -0700

driver: Add verbose mode

Diffstat:
Mdriver.c | 26++++++++++++++++++++++----
1 file changed, 22 insertions(+), 4 deletions(-)

diff --git a/driver.c b/driver.c @@ -44,9 +44,9 @@ struct input { bool lib; }; -extern char **environ; static struct { bool nostdlib; + bool verbose; } flags; static struct phase phases[] = { [PREPROCESS] = {.name = "preprocess"}, @@ -114,6 +114,21 @@ changeext(const char *name, const char *ext) } static int +spawn(pid_t *pid, struct array *args, posix_spawn_file_actions_t *actions) +{ + extern char **environ; + char **arg; + + if (flags.verbose) { + fprintf(stderr, "%s: spawning", argv0); + for (arg = args->val; *arg; ++arg) + fprintf(stderr, " %s", *arg); + fputc('\n', stderr); + } + return posix_spawnp(pid, *(char **)args->val, actions, NULL, args->val, environ); +} + +static int spawnphase(struct phase *phase, int *fd, char *input, char *output, bool last) { int ret, pipefd[2]; @@ -143,7 +158,7 @@ spawnphase(struct phase *phase, int *fd, char *input, char *output, bool last) goto err2; } - ret = posix_spawnp(&phase->pid, *(char **)phase->cmd.val, &actions, NULL, phase->cmd.val, environ); + ret = spawn(&phase->pid, &phase->cmd, &actions); if (ret) goto err2; if (!last) { @@ -281,7 +296,7 @@ buildexe(struct input *inputs, size_t ninputs, char *output) arrayaddbuf(&p->cmd, endfiles, sizeof(endfiles)); arrayaddptr(&p->cmd, NULL); - ret = posix_spawnp(&pid, *(char **)p->cmd.val, NULL, NULL, p->cmd.val, environ); + ret = spawn(&pid, &p->cmd, NULL); if (ret) fatal("%s: spawn \"%s\": %s", p->name, *(char **)p->cmd.val, strerror(errno)); if (waitpid(pid, &status, 0) < 0) @@ -378,7 +393,7 @@ main(int argc, char *argv[]) } else if (strcmp(arg, "-pedantic") == 0) { /* ignore */ } else { - if (arg[2] != '\0' && strchr("cESs", arg[1])) + if (arg[2] != '\0' && strchr("cESsv", arg[1])) usage(NULL); switch (arg[1]) { case 'c': @@ -432,6 +447,9 @@ main(int argc, char *argv[]) arrayaddptr(&phases[PREPROCESS].cmd, "-U"); arrayaddptr(&phases[PREPROCESS].cmd, nextarg(&argv)); break; + case 'v': + flags.verbose = true; + break; case 'W': if (arg[2] && arg[3] == ',') { switch (arg[2]) {