Diffstat (limited to 'filter.c')
| -rw-r--r-- | filter.c | 35 |
1 files changed, 11 insertions, 24 deletions
@@ -13,16 +13,8 @@ #include <string.h> #include <stdlib.h> -int cgit_open_filter(struct cgit_filter *filter, ...) +int cgit_open_filter(struct cgit_filter *filter) { - int i; - va_list ap; - - va_start(ap, filter); - for (i = 0; i < filter->extra_args; i++) - filter->argv[i+1] = va_arg(ap, char *); - va_end(ap); - filter->old_stdout = chk_positive(dup(STDOUT_FILENO), "Unable to duplicate STDOUT"); chk_zero(pipe(filter->pipe_fh), "Unable to create pipe to subprocess"); @@ -44,50 +36,45 @@ int cgit_open_filter(struct cgit_filter *filter, ...) int cgit_close_filter(struct cgit_filter *filter) { - int i, exit_status; + int exit_status; chk_non_negative(dup2(filter->old_stdout, STDOUT_FILENO), "Unable to restore STDOUT"); close(filter->old_stdout); if (filter->pid < 0) - goto done; + return 0; waitpid(filter->pid, &exit_status, 0); if (WIFEXITED(exit_status) && !WEXITSTATUS(exit_status)) - goto done; + return 0; die("Subprocess %s exited abnormally", filter->cmd); - -done: - for (i = 0; i < filter->extra_args; i++) - filter->argv[i+1] = NULL; - return 0; - } struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype) { struct cgit_filter *f; int args_size = 0; + int extra_args; if (!cmd || !cmd[0]) return NULL; - f = xmalloc(sizeof(struct cgit_filter)); - memset(f, 0, sizeof(struct cgit_filter)); - switch (filtertype) { case SOURCE: case ABOUT: - f->extra_args = 1; + extra_args = 1; break; case COMMIT: default: - f->extra_args = 0; + extra_args = 0; break; } + + f = xmalloc(sizeof(struct cgit_filter)); + memset(f, 0, sizeof(struct cgit_filter)); f->cmd = xstrdup(cmd); - args_size = (2 + f->extra_args) * sizeof(char *); + args_size = (2 + extra_args) * sizeof(char *); f->argv = xmalloc(args_size); memset(f->argv, 0, args_size); f->argv[0] = f->cmd; |