diff options
author | Jason A. Donenfeld | 2014-01-10 05:19:05 +0100 |
---|---|---|
committer | Jason A. Donenfeld | 2014-01-10 17:45:43 +0100 |
commit | 3eae406934b98ce78eff3a92cb410475d71095a3 (patch) | |
tree | 8545d754ee0b4d970a3299479087847bc4c33b5e /shared.c | |
parent | b67ea0c0222d5b7eb4f65413047138e72055d8c5 (diff) | |
download | cgit-3eae406934b98ce78eff3a92cb410475d71095a3.tar.gz cgit-3eae406934b98ce78eff3a92cb410475d71095a3.tar.bz2 cgit-3eae406934b98ce78eff3a92cb410475d71095a3.zip |
filter: split filter functions into their own file
A first step for more interesting things.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'shared.c')
-rw-r--r-- | shared.c | 35 |
1 files changed, 0 insertions, 35 deletions
@@ -457,41 +457,6 @@ void cgit_prepare_repo_env(struct cgit_repo * repo) | |||
457 | fprintf(stderr, warn, p->name, p->value); | 457 | fprintf(stderr, warn, p->name, p->value); |
458 | } | 458 | } |
459 | 459 | ||
460 | int cgit_open_filter(struct cgit_filter *filter) | ||
461 | { | ||
462 | filter->old_stdout = chk_positive(dup(STDOUT_FILENO), | ||
463 | "Unable to duplicate STDOUT"); | ||
464 | chk_zero(pipe(filter->pipe_fh), "Unable to create pipe to subprocess"); | ||
465 | filter->pid = chk_non_negative(fork(), "Unable to create subprocess"); | ||
466 | if (filter->pid == 0) { | ||
467 | close(filter->pipe_fh[1]); | ||
468 | chk_non_negative(dup2(filter->pipe_fh[0], STDIN_FILENO), | ||
469 | "Unable to use pipe as STDIN"); | ||
470 | execvp(filter->cmd, filter->argv); | ||
471 | die_errno("Unable to exec subprocess %s", filter->cmd); | ||
472 | } | ||
473 | close(filter->pipe_fh[0]); | ||
474 | chk_non_negative(dup2(filter->pipe_fh[1], STDOUT_FILENO), | ||
475 | "Unable to use pipe as STDOUT"); | ||
476 | close(filter->pipe_fh[1]); | ||
477 | return 0; | ||
478 | } | ||
479 | |||
480 | int cgit_close_filter(struct cgit_filter *filter) | ||
481 | { | ||
482 | int exit_status; | ||
483 | |||
484 | chk_non_negative(dup2(filter->old_stdout, STDOUT_FILENO), | ||
485 | "Unable to restore STDOUT"); | ||
486 | close(filter->old_stdout); | ||
487 | if (filter->pid < 0) | ||
488 | return 0; | ||
489 | waitpid(filter->pid, &exit_status, 0); | ||
490 | if (WIFEXITED(exit_status) && !WEXITSTATUS(exit_status)) | ||
491 | return 0; | ||
492 | die("Subprocess %s exited abnormally", filter->cmd); | ||
493 | } | ||
494 | |||
495 | /* Read the content of the specified file into a newly allocated buffer, | 460 | /* Read the content of the specified file into a newly allocated buffer, |
496 | * zeroterminate the buffer and return 0 on success, errno otherwise. | 461 | * zeroterminate the buffer and return 0 on success, errno otherwise. |
497 | */ | 462 | */ |