aboutsummaryrefslogtreecommitdiffstats
path: root/shared.c
diff options
context:
space:
mode:
authorGravatar Jason A. Donenfeld <Jason@zx2c4.com>2014-01-10 13:19:05 (JST)
committerGravatar Jason A. Donenfeld <Jason@zx2c4.com>2014-01-11 01:45:43 (JST)
commit3eae406934b98ce78eff3a92cb410475d71095a3 (patch)
tree8545d754ee0b4d970a3299479087847bc4c33b5e /shared.c
parentb67ea0c0222d5b7eb4f65413047138e72055d8c5 (diff)
downloadcgit-3eae406934b98ce78eff3a92cb410475d71095a3.zip
cgit-3eae406934b98ce78eff3a92cb410475d71095a3.tar.gz
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.c35
1 files changed, 0 insertions, 35 deletions
diff --git a/shared.c b/shared.c
index 6259d75..4626148 100644
--- a/shared.c
+++ b/shared.c
@@ -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
460int 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
480int 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 */