Use _PATH_BSHELL to ensure using a bourne shell
Patch status: merged
Patch by Baptiste Daroussin
To apply this patch, use:
curl http://cr.i3wm.org/patch/297/raw.patch | git am
b/i3-nagbar/main.c
| 15 |
@@ -22,6 +22,7 @@ |
| 16 |
#include <getopt.h> |
| 17 |
#include <limits.h> |
| 18 |
#include <fcntl.h> |
| 19 |
+#include <paths.h> |
| 20 |
|
| 21 |
#include <xcb/xcb.h> |
| 22 |
#include <xcb/xcb_aux.h> |
| 23 |
@@ -95,15 +96,8 @@ static void start_application(const char *command) {
|
| 24 |
/* Child process */ |
| 25 |
setsid(); |
| 26 |
if (fork() == 0) {
|
| 27 |
- /* Stores the path of the shell */ |
| 28 |
- static const char *shell = NULL; |
| 29 |
- |
| 30 |
- if (shell == NULL) |
| 31 |
- if ((shell = getenv("SHELL")) == NULL)
|
| 32 |
- shell = "/bin/sh"; |
| 33 |
- |
| 34 |
/* This is the child */ |
| 35 |
- execl(shell, shell, "-c", command, (void*)NULL); |
| 36 |
+ execl(_PATH_BSHELL, _PATH_BSHELL, "-c", command, (void*)NULL); |
| 37 |
/* not reached */ |
| 38 |
} |
| 39 |
exit(0); |
b/i3bar/src/child.c
| 44 |
@@ -22,6 +22,7 @@ |
| 45 |
#include <yajl/yajl_parse.h> |
| 46 |
#include <yajl/yajl_version.h> |
| 47 |
#include <yajl/yajl_gen.h> |
| 48 |
+#include <paths.h> |
| 49 |
|
| 50 |
#include "common.h" |
| 51 |
|
| 52 |
@@ -423,12 +424,7 @@ void start_child(char *command) {
|
| 53 |
dup2(pipe_in[1], STDOUT_FILENO); |
| 54 |
dup2(pipe_out[0], STDIN_FILENO); |
| 55 |
|
| 56 |
- static const char *shell = NULL; |
| 57 |
- |
| 58 |
- if ((shell = getenv("SHELL")) == NULL)
|
| 59 |
- shell = "/bin/sh"; |
| 60 |
- |
| 61 |
- execl(shell, shell, "-c", command, (char*) NULL); |
| 62 |
+ execl(_PATH_BSHELL, _PATH_BSHELL, "-c", command, (char*) NULL); |
| 63 |
return; |
| 64 |
default: |
| 65 |
/* Parent-process. Reroute streams */ |
b/src/startup.c
| 70 |
@@ -17,6 +17,7 @@ |
| 71 |
|
| 72 |
#include <sys/types.h> |
| 73 |
#include <sys/wait.h> |
| 74 |
+#include <paths.h> |
| 75 |
|
| 76 |
#define SN_API_NOT_YET_FROZEN 1 |
| 77 |
#include <libsn/sn-launcher.h> |
| 78 |
@@ -191,15 +192,7 @@ void start_application(const char *command, bool no_startup_id) {
|
| 79 |
if (!no_startup_id) |
| 80 |
sn_launcher_context_setup_child_process(context); |
| 81 |
|
| 82 |
- /* Stores the path of the shell */ |
| 83 |
- static const char *shell = NULL; |
| 84 |
- |
| 85 |
- if (shell == NULL) |
| 86 |
- if ((shell = getenv("SHELL")) == NULL)
|
| 87 |
- shell = "/bin/sh"; |
| 88 |
- |
| 89 |
- /* This is the child */ |
| 90 |
- execl(shell, shell, "-c", command, (void*)NULL); |
| 91 |
+ execl(_PATH_BSHELL, _PATH_BSHELL, "-c", command, (void*)NULL); |
| 92 |
/* not reached */ |
| 93 |
} |
| 94 |
_exit(0); |