X-Git-Url: https://git.octo.it/?p=git.git;a=blobdiff_plain;f=pager.c;h=9a30939016620072f319b5fef81d0c913513a641;hp=1364e15d23527c0c4a11bcbe18c80c32af6d94b4;hb=HEAD;hpb=4c61b7d15a6215fa4dffa33c37c3ef9df80d3f67 diff --git a/pager.c b/pager.c index 1364e15d..9a309390 100644 --- a/pager.c +++ b/pager.c @@ -5,22 +5,25 @@ * something different on Windows, for example. */ -static void run_pager(void) +static void run_pager(const char *pager) { - const char *prog = getenv("PAGER"); - if (!prog) - prog = "less"; - setenv("LESS", "-S", 0); - execlp(prog, prog, NULL); + execlp(pager, pager, NULL); + execl("/bin/sh", "sh", "-c", pager, NULL); } void setup_pager(void) { pid_t pid; int fd[2]; + const char *pager = getenv("PAGER"); if (!isatty(1)) return; + if (!pager) + pager = "less"; + else if (!*pager || !strcmp(pager, "cat")) + return; + if (pipe(fd) < 0) return; pid = fork(); @@ -43,6 +46,8 @@ void setup_pager(void) close(fd[0]); close(fd[1]); - run_pager(); + setenv("LESS", "-S", 0); + run_pager(pager); + die("unable to execute pager '%s'", pager); exit(255); }