struct sigaction orig_sigpipe;
bool no_stdin;
- void (*preexec_cb)(void);
};
static struct child_process pager_process;
close(fd[1]);
}
+static void pager_preexec(void)
+{
+ /*
+ * Work around bug in "less" by not starting it until we
+ * have real input
+ */
+ fd_set in, ex;
+
+ FD_ZERO(&in);
+ FD_SET(STDIN_FILENO, &in);
+ ex = in;
+
+ select(STDIN_FILENO + 1, &in, NULL, &ex, NULL);
+
+ if (setenv("LESS", "FRSX", 0) != 0)
+ warn(_("failed to set the %s environment variable"), "LESS");
+}
+
static int start_command(struct child_process *cmd)
{
int need_in;
close(cmd->in);
}
- cmd->preexec_cb();
+ pager_preexec();
execvp(cmd->argv[0], (char *const*) cmd->argv);
errexec(cmd->argv[0]);
}
return wait_or_whine(cmd->pid);
}
-static void pager_preexec(void)
-{
- /*
- * Work around bug in "less" by not starting it until we
- * have real input
- */
- fd_set in, ex;
-
- FD_ZERO(&in);
- FD_SET(STDIN_FILENO, &in);
- ex = in;
-
- select(STDIN_FILENO + 1, &in, NULL, &ex, NULL);
-
- if (setenv("LESS", "FRSX", 0) != 0)
- warn(_("failed to set the %s environment variable"), "LESS");
-}
-
static void wait_for_pager(void)
{
if (pager_process.pid == 0)
pager_argv[2] = pager;
pager_process.argv = pager_argv;
pager_process.in = -1;
- pager_process.preexec_cb = pager_preexec;
if (start_command(&pager_process))
return;