summaryrefslogtreecommitdiff
path: root/src/shared/pager.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2015-08-28 00:13:34 +0200
committerLennart Poettering <lennart@poettering.net>2015-08-28 02:05:58 +0200
commit8b5264aa65ea8f631990174a6f705d5a0d8e95fc (patch)
tree0e915cc2deef3c76ce7b903799c41f65a3d0aafa /src/shared/pager.c
parent6a7c676c54eb205d80f124eeb66c84df3c54d174 (diff)
pager: also redirect stderr
It's really confusing if stdout goes to the pager, but stderr is written directly to the screen. Hence, make sure both stdout and stderr are passed to the pager when doing autopaging.
Diffstat (limited to 'src/shared/pager.c')
-rw-r--r--src/shared/pager.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/shared/pager.c b/src/shared/pager.c
index a5454e377d..85f8fa5b39 100644
--- a/src/shared/pager.c
+++ b/src/shared/pager.c
@@ -129,6 +129,8 @@ int pager_open(bool jump_to_end) {
/* Return in the parent */
if (dup2(fd[1], STDOUT_FILENO) < 0)
return log_error_errno(errno, "Failed to duplicate pager pipe: %m");
+ if (dup2(fd[1], STDERR_FILENO) < 0)
+ return log_error_errno(errno, "Failed to duplicate pager pipe: %m");
safe_close_pair(fd);
return 1;
@@ -141,6 +143,11 @@ void pager_close(void) {
/* Inform pager that we are done */
fclose(stdout);
+ stdout = NULL;
+
+ fclose(stderr);
+ stderr = NULL;
+
kill(pager_pid, SIGCONT);
(void) wait_for_terminate(pager_pid, NULL);
pager_pid = 0;