]>
Commit | Line | Data |
---|---|---|
f67b45f8 LT |
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 | ||
8 | static 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 | ||
17 | void 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 | } |