pager.con commit Reference git-commit-tree for env vars. (5bfc4f2)
   1#include "cache.h"
   2
   3/*
   4 * This is split up from the rest of git so that we might do
   5 * something different on Windows, for example.
   6 */
   7
   8static void run_pager(void)
   9{
  10        const char *prog = getenv("PAGER");
  11        if (!prog)
  12                prog = "less";
  13        setenv("LESS", "-S", 0);
  14        execlp(prog, prog, NULL);
  15}
  16
  17void setup_pager(void)
  18{
  19        pid_t pid;
  20        int fd[2];
  21
  22        if (!isatty(1))
  23                return;
  24        if (pipe(fd) < 0)
  25                return;
  26        pid = fork();
  27        if (pid < 0) {
  28                close(fd[0]);
  29                close(fd[1]);
  30                return;
  31        }
  32
  33        /* return in the child */
  34        if (!pid) {
  35                dup2(fd[1], 1);
  36                close(fd[0]);
  37                close(fd[1]);
  38                return;
  39        }
  40
  41        /* The original process turns into the PAGER */
  42        dup2(fd[0], 0);
  43        close(fd[0]);
  44        close(fd[1]);
  45
  46        run_pager();
  47        exit(255);
  48}