From 03b4958dd49fda257c130d3fd9f1b6bafc00e36d Mon Sep 17 00:00:00 2001 From: Herbert Xu Date: Mon, 15 Oct 2007 20:24:28 +0800 Subject: [EXEC] Fixed execing of scripts with no hash-bang The function tryexec used the original name instead of the path found through PATH search. This patch fixes that. Test case: trap 'rm -f $TMP' EXIT TMP=$(tempfile -s nosuchthing) cat <<- EOF > $TMP echo OK EOF chmod u+x $TMP cd / PATH=${TMP%/*} ${TMP##*/} Old result: /bin/sh: Can't open filelgY4Fanosuchthing New result: OK --- src/eval.c | 3 ++- src/exec.c | 21 +++------------------ 2 files changed, 5 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/eval.c b/src/eval.c index 2aa8317..1e0edd9 100644 --- a/src/eval.c +++ b/src/eval.c @@ -727,7 +727,8 @@ evalcommand(union node *cmd, int flags) argc++; } - argv = nargv = stalloc(sizeof (char *) * (argc + 1)); + /* Reserve one extra spot at the front for shellexec. */ + argv = nargv = stalloc(sizeof (char *) * (argc + 2)) + 1; for (sp = arglist.list ; sp ; sp = sp->next) { TRACE(("evalcommand arg: %s\n", sp->text)); *nargv++ = sp->text; diff --git a/src/exec.c b/src/exec.c index 8a1f722..bbb70e8 100644 --- a/src/exec.c +++ b/src/exec.c @@ -149,11 +149,6 @@ shellexec(char **argv, const char *path, int idx) STATIC void tryexec(char *cmd, char **argv, char **envp) { - int repeated = 0; -#if !defined(BSD) && !defined(linux) - char *p; -#endif - repeat: #ifdef SYSV do { @@ -162,19 +157,9 @@ repeat: #else execve(cmd, argv, envp); #endif - if (repeated++) { - ckfree(argv); - } else if (errno == ENOEXEC) { - char **ap; - char **new; - - for (ap = argv; *ap; ap++) - ; - ap = new = ckmalloc((ap - argv + 2) * sizeof(char *)); - *ap++ = cmd = _PATH_BSHELL; - while ((*ap++ = *argv++)) - ; - argv = new; + if (cmd != _PATH_BSHELL && errno == ENOEXEC) { + *argv-- = cmd; + *argv = cmd = _PATH_BSHELL; goto repeat; } } -- cgit 1.4.1 ='/src/log/?id=d4e8ee4c3c11ee9dc4e846fb99d96ad22322f9a6&ofs=50&showmsg=1&follow=1'>root/etc (unfollow)
Commit message (Collapse)Author
2021-02-07Use class names for Foreground, Background, BorderColorJune McEnroe
I'm not really sure what difference this makes, but it seems like the right thing to do to be generic?
2021-02-07Add simple battery status and clock to xsessionJune McEnroe
I love how simple this is.
2021-02-07Set cursor theme and sizeJune McEnroe
2021-02-07Use scrot for up -s if no screencaptureJune McEnroe
Still missing putting the URL in an X selection.
2021-02-07Enable mouse acceleration in XJune McEnroe
2021-02-07Set colours for Xt and cwmJune McEnroe
And increase XTerm internalBorder.
2021-02-07Set urgency on bell in xtermJune McEnroe
2021-02-07Add bindings for brightness controlJune McEnroe
Weirdly the Fn key doesn't change how the F row registers... I wonder if I can do something about that.
2021-02-07Set X key repeat rateJune McEnroe
2021-02-07Bump font size to 12June McEnroe
11 is what I use on macOS, but I feel like my eyes are working harder here.
2021-02-07Fully configure and rebind cwmJune McEnroe
This is sort of a mix of trying to emulate macOS somewhat for my muscle memory and just rebinding some of the cwm defaults to use 4- rather than M-.
2021-02-07Add BintiJune McEnroe
2021-02-07Finish configuring xtermJune McEnroe
2021-02-06Enable tapping, reverse scroll, set scaling in wsconsctlJune McEnroe
2021-02-06Set root window to black on purple snowJune McEnroe
2021-02-06Add xmodmap configurationJune McEnroe
2021-02-06Add initial OpenBSD X configurationJune McEnroe
cwm still needs a lot more rebinding, and I need to actually look at its other options. xterm definitely still needs some configuration, but I at least managed to get it to use a decent looking font. Very happy that OpenBSD includes Luxi Mono, which is what my usual font, Go Mono, is based on anyway. Still missing is xmodmap and such.
2021-02-06Add xterm output to schemeJune McEnroe