aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2012-04-16 12:42:54 -0700
committerJunio C Hamano <gitster@pobox.com>2012-04-16 12:42:55 -0700
commitfa0ba729dc5e0af0b0165e4e12904bfa3f39f9db (patch)
treedc71f101ad7740d4f65a1db19270fbc97b9cad64
parent0f3ddd4a3abe863fae9c36ec4311ac936a2d8ed9 (diff)
parentb3e34dddc0d385dbcf6ea28bd8d4f5cba9c06f04 (diff)
downloadgit-fa0ba729dc5e0af0b0165e4e12904bfa3f39f9db.tar.gz
git-fa0ba729dc5e0af0b0165e4e12904bfa3f39f9db.tar.xz
Merge branch 'bw/spawn-via-shell-path'
"sh" on the user's PATH may be utterly broken on some systems; consistently use SHELL_PATH even from inside run-command API. By Ben Walton * bw/spawn-via-shell-path: Use SHELL_PATH from build system in run_command.c:prepare_shell_cmd
-rw-r--r--Makefile7
-rw-r--r--run-command.c6
2 files changed, 12 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index be1957a5e..abee43e26 100644
--- a/Makefile
+++ b/Makefile
@@ -1849,6 +1849,13 @@ DEFAULT_PAGER_CQ_SQ = $(subst ','\'',$(DEFAULT_PAGER_CQ))
BASIC_CFLAGS += -DDEFAULT_PAGER='$(DEFAULT_PAGER_CQ_SQ)'
endif
+ifdef SHELL_PATH
+SHELL_PATH_CQ = "$(subst ",\",$(subst \,\\,$(SHELL_PATH)))"
+SHELL_PATH_CQ_SQ = $(subst ','\'',$(SHELL_PATH_CQ))
+
+BASIC_CFLAGS += -DSHELL_PATH='$(SHELL_PATH_CQ_SQ)'
+endif
+
ALL_CFLAGS += $(BASIC_CFLAGS)
ALL_LDFLAGS += $(BASIC_LDFLAGS)
diff --git a/run-command.c b/run-command.c
index 1db8abf98..2af3e0fa5 100644
--- a/run-command.c
+++ b/run-command.c
@@ -4,6 +4,10 @@
#include "sigchain.h"
#include "argv-array.h"
+#ifndef SHELL_PATH
+# define SHELL_PATH "/bin/sh"
+#endif
+
struct child_to_clean {
pid_t pid;
struct child_to_clean *next;
@@ -90,7 +94,7 @@ static const char **prepare_shell_cmd(const char **argv)
die("BUG: shell command is empty");
if (strcspn(argv[0], "|&;<>()$`\\\"' \t\n*?[#~=%") != strlen(argv[0])) {
- nargv[nargc++] = "sh";
+ nargv[nargc++] = SHELL_PATH;
nargv[nargc++] = "-c";
if (argc < 2)