diff options
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 | */ |
