diff options
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/pager.c | 22 | ||||
-rw-r--r-- | src/shared/pager.h | 3 |
2 files changed, 16 insertions, 9 deletions
diff --git a/src/shared/pager.c b/src/shared/pager.c index 36b409c070..6799787e85 100644 --- a/src/shared/pager.c +++ b/src/shared/pager.c @@ -44,20 +44,21 @@ _noreturn_ static void pager_fallback(void) { _exit(EXIT_SUCCESS); } -bool pager_open(void) { +int pager_open(void) { int fd[2]; const char *pager; pid_t parent_pid; + int r; if (pager_pid > 0) - return false; + return 1; if ((pager = getenv("SYSTEMD_PAGER")) || (pager = getenv("PAGER"))) if (!*pager || streq(pager, "cat")) - return false; + return 0; if (isatty(STDOUT_FILENO) <= 0) - return false; + return 0; /* Determine and cache number of columns before we spawn the * pager so that we get the value from the actual tty */ @@ -65,16 +66,17 @@ bool pager_open(void) { if (pipe(fd) < 0) { log_error("Failed to create pager pipe: %m"); - return false; + return -errno; } parent_pid = getpid(); pager_pid = fork(); if (pager_pid < 0) { + r = -errno; log_error("Failed to fork pager: %m"); close_pipe(fd); - return false; + return r; } /* In the child start the pager */ @@ -117,11 +119,11 @@ bool pager_open(void) { /* Return in the parent */ if (dup2(fd[1], STDOUT_FILENO) < 0) { log_error("Failed to duplicate pager pipe: %m"); - return false; + return -errno; } close_pipe(fd); - return true; + return 1; } void pager_close(void) { @@ -135,3 +137,7 @@ void pager_close(void) { wait_for_terminate(pager_pid, NULL); pager_pid = 0; } + +bool pager_have(void) { + return pager_pid > 0; +} diff --git a/src/shared/pager.h b/src/shared/pager.h index 0b4afc04b8..5e7b5ab91e 100644 --- a/src/shared/pager.h +++ b/src/shared/pager.h @@ -23,5 +23,6 @@ #include <stdbool.h> -bool pager_open(void); +int pager_open(void); void pager_close(void); +bool pager_have(void); |