X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fpager.c;h=9fa611479cff0cc10b98c7d60ca0dbbfd3e3f00e;hb=90d14d2015dda79c7b465b74dd3aaf2dfc25d43c;hp=5165d2b1c854f101285e8e58fef06d297a66f988;hpb=82910f1358c1d15f4e432e6d1f42efdeaf1eddb1;p=elogind.git diff --git a/src/shared/pager.c b/src/shared/pager.c index 5165d2b1c..9fa611479 100644 --- a/src/shared/pager.c +++ b/src/shared/pager.c @@ -34,17 +34,20 @@ static pid_t pager_pid = 0; _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); } -int pager_open(void) { +int pager_open(bool jump_to_end) { int fd[2]; const char *pager; pid_t parent_pid; @@ -85,7 +88,10 @@ int pager_open(void) { dup2(fd[0], STDIN_FILENO); close_pipe(fd); - setenv("LESS", "FRSXK", 0); + if (jump_to_end) + setenv("LESS", "FRSXMK+G", 1); + else + setenv("LESS", "FRSXMK", 1); /* Make sure the pager goes away when the parent dies */ if (prctl(PR_SET_PDEATHSIG, SIGTERM) < 0)