diff options
author | Zbigniew Jedrzejewski-Szmek <zbyszek@in.waw.pl> | 2012-07-20 09:06:26 +0200 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2012-07-23 17:57:11 +0200 |
commit | fafb6eccc2c9e3f8d6ce0aad9cb428f8cc402b24 (patch) | |
tree | 1cf54ff0d9fa2a6d5cf36b13d8511caa0b5fc4c8 /src | |
parent | keymap: Broaden ThinkPad X2.. tablet match to also apply to X230 (diff) | |
download | systemd-fafb6eccc2c9e3f8d6ce0aad9cb428f8cc402b24.tar.xz systemd-fafb6eccc2c9e3f8d6ce0aad9cb428f8cc402b24.zip |
journalctl: fix ellipsization with PAGER=cat
There are other reasons for not opening the pager then the --no-pager
or --follow options (described below). If the pager is not used,
messages must be ellipsized.
On Fri, Jul 20, 2012 at 05:42:44AM +0000, Shawn Landen wrote:
> "Pager to use when --no-pager is not given; overrides $PAGER.
> Setting this to an empty string or the value cat is equivalent to passing --no-pager."
Diffstat (limited to 'src')
-rw-r--r-- | src/journal/journalctl.c | 6 | ||||
-rw-r--r-- | src/shared/pager.c | 17 | ||||
-rw-r--r-- | src/shared/pager.h | 4 |
3 files changed, 14 insertions, 13 deletions
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index e9810c9a3d..e633dd34d7 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -398,11 +398,7 @@ int main(int argc, char *argv[]) { goto finish; } - have_pager = !arg_no_pager && !arg_follow; - if (have_pager) { - columns(); - pager_open(); - } + have_pager = !arg_no_pager && !arg_follow && pager_open(); if (arg_output == OUTPUT_JSON) { fputc('[', stdout); diff --git a/src/shared/pager.c b/src/shared/pager.c index 6a85af33c4..36b409c070 100644 --- a/src/shared/pager.c +++ b/src/shared/pager.c @@ -44,20 +44,20 @@ _noreturn_ static void pager_fallback(void) { _exit(EXIT_SUCCESS); } -void pager_open(void) { +bool pager_open(void) { int fd[2]; const char *pager; pid_t parent_pid; if (pager_pid > 0) - return; + return false; if ((pager = getenv("SYSTEMD_PAGER")) || (pager = getenv("PAGER"))) if (!*pager || streq(pager, "cat")) - return; + return false; if (isatty(STDOUT_FILENO) <= 0) - return; + return false; /* Determine and cache number of columns before we spawn the * pager so that we get the value from the actual tty */ @@ -65,7 +65,7 @@ void pager_open(void) { if (pipe(fd) < 0) { log_error("Failed to create pager pipe: %m"); - return; + return false; } parent_pid = getpid(); @@ -74,7 +74,7 @@ void pager_open(void) { if (pager_pid < 0) { log_error("Failed to fork pager: %m"); close_pipe(fd); - return; + return false; } /* In the child start the pager */ @@ -115,10 +115,13 @@ void pager_open(void) { } /* Return in the parent */ - if (dup2(fd[1], STDOUT_FILENO) < 0) + if (dup2(fd[1], STDOUT_FILENO) < 0) { log_error("Failed to duplicate pager pipe: %m"); + return false; + } close_pipe(fd); + return true; } void pager_close(void) { diff --git a/src/shared/pager.h b/src/shared/pager.h index dcd61957ef..0b4afc04b8 100644 --- a/src/shared/pager.h +++ b/src/shared/pager.h @@ -21,5 +21,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>. ***/ -void pager_open(void); +#include <stdbool.h> + +bool pager_open(void); void pager_close(void); |