pager: refactor wait_for_pager() function

Refactor the wait_for_pager() function. Since 507d7804c0 (pager:
don't use unsafe functions in signal handlers, 2015-09-04) the
wait_for_pager() and wait_for_pager_atexit() callers diverged on more
than they shared.

Let's extract the common code into a new close_pager_fds() helper, and
move the parts unique to the only to callers to those functions.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Ævar Arnfjörð Bjarmason 2021-02-02 02:59:57 +01:00 committed by Junio C Hamano
parent e6362826a0
commit 61ff12fa50
1 changed files with 7 additions and 11 deletions

18
pager.c
View File

@ -11,29 +11,25 @@
static struct child_process pager_process = CHILD_PROCESS_INIT;
static const char *pager_program;
static void wait_for_pager(int in_signal)
static void close_pager_fds(void)
{
if (!in_signal) {
fflush(stdout);
fflush(stderr);
}
/* signal EOF to pager */
close(1);
close(2);
if (in_signal)
finish_command_in_signal(&pager_process);
else
finish_command(&pager_process);
}
static void wait_for_pager_atexit(void)
{
wait_for_pager(0);
fflush(stdout);
fflush(stderr);
close_pager_fds();
finish_command(&pager_process);
}
static void wait_for_pager_signal(int signo)
{
wait_for_pager(1);
close_pager_fds();
finish_command_in_signal(&pager_process);
sigchain_pop(signo);
raise(signo);
}