commit - b57bc35dd92893b24b65392df6c768d1661550dc
commit + ae5756808c915ca9a760e969eb55971346aac807
blob - 86316a1d842496363eb167d764368919f805fac5
blob + 866a659f99387f1f8f6944d66a26327313d8d39f
--- config.h
+++ config.h
/* Optional macro to be executed when a batch operation finishes. */
#define RV_ALERT() beep()
+
+/* Shell used to launch external programs. */
+#define RV_SHELL "/bin/sh"
blob - 63e24dbb77703b6415f5486bba7a38578ddf7c2e
blob + 3dca3b5149b958d64a9f5d0a723b296fbccb2fda
--- rover.c
+++ rover.c
static char BUF2[BUFLEN];
static char INPUT[BUFLEN];
static wchar_t WBUF[BUFLEN];
-
-/* Argument buffers for execvp(). */
-#define MAXARGS 256
-static char *ARGS[MAXARGS];
/* Listing view parameters. */
#define HEIGHT (LINES-4)
/* Do a fork-exec to external program (e.g. $EDITOR). */
static void
-spawn()
+spawn(char **args)
{
pid_t pid;
int status;
kill(getpid(), SIGWINCH);
} else if (pid == 0) {
/* Child process. */
- execvp(ARGS[0], ARGS);
+ execvp(args[0], args);
}
}
rover.tab = ch - '0';
cd(0);
} else if (!strcmp(key, RVK_HELP)) {
- ARGS[0] = "man";
- ARGS[1] = "rover";
- ARGS[2] = NULL;
- spawn();
+ spawn((char *[]) {"man", "rover", NULL});
} else if (!strcmp(key, RVK_DOWN)) {
if (!rover.nfiles) continue;
ESEL = MIN(ESEL + 1, rover.nfiles - 1);
} else if (!strcmp(key, RVK_SHELL)) {
program = getenv("SHELL");
if (program) {
- ARGS[0] = program;
- ARGS[1] = NULL;
- spawn();
+ spawn((char *[]) {RV_SHELL, "-c", program, NULL});
reload();
}
} else if (!strcmp(key, RVK_VIEW)) {
if (!rover.nfiles || S_ISDIR(EMODE(ESEL))) continue;
program = getenv("PAGER");
if (program) {
- ARGS[0] = program;
- ARGS[1] = ENAME(ESEL);
- ARGS[2] = NULL;
- spawn();
+ strncpy(BUF1, program, BUFLEN - 1);
+ strncat(BUF1, " ", BUFLEN - strlen(program) - 1);
+ strncat(BUF1, ENAME(ESEL),
+ BUFLEN - strlen(program) - strlen(ENAME(ESEL)) - 2);
+ spawn((char *[]) {RV_SHELL, "-c", BUF1, NULL});
}
} else if (!strcmp(key, RVK_EDIT)) {
if (!rover.nfiles || S_ISDIR(EMODE(ESEL))) continue;
program = getenv("EDITOR");
if (program) {
- ARGS[0] = program;
- ARGS[1] = ENAME(ESEL);
- ARGS[2] = NULL;
- spawn();
+ strncpy(BUF1, program, BUFLEN - 1);
+ strncat(BUF1, " ", BUFLEN - strlen(program) - 1);
+ strncat(BUF1, ENAME(ESEL),
+ BUFLEN - strlen(program) - strlen(ENAME(ESEL)) - 2);
+ spawn((char *[]) {RV_SHELL, "-c", BUF1, NULL});
cd(0);
}
} else if (!strcmp(key, RVK_SEARCH)) {