aboutsummaryrefslogtreecommitdiffstats
path: root/shared.c
diff options
context:
space:
mode:
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 */