X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fpager.c;h=72a29f22855ea569a4bbdc8a713ec36a63da07ae;hb=c9ccc19f9eb0599109094c57b7a2f668d708f0c1;hp=4ffb530e934810b41f3455e1ea18bae8a6054196;hpb=1b12a7b5896f94bdf33b3a6661ebabd761ea6adc;p=elogind.git diff --git a/src/shared/pager.c b/src/shared/pager.c index 4ffb530e9..72a29f228 100644 --- a/src/shared/pager.c +++ b/src/shared/pager.c @@ -32,15 +32,18 @@ static pid_t pager_pid = 0; -_noreturn_ static void pager_fallback(void) { +noreturn static void pager_fallback(void) { ssize_t n; + do { n = splice(STDIN_FILENO, NULL, STDOUT_FILENO, NULL, 64*1024, 0); } while (n > 0); + if (n < 0) { log_error("Internal pager failed: %m"); _exit(EXIT_FAILURE); } + _exit(EXIT_SUCCESS); } @@ -86,9 +89,9 @@ int pager_open(bool jump_to_end) { close_pipe(fd); if (jump_to_end) - setenv("LESS", "FRSXK+G", 0); + setenv("LESS", "FRSXMK+G", 1); else - setenv("LESS", "FRSXK", 0); + setenv("LESS", "FRSXMK", 1); /* Make sure the pager goes away when the parent dies */ if (prctl(PR_SET_PDEATHSIG, SIGTERM) < 0)