aboutsummaryrefslogtreecommitdiff
path: root/src/FbCommands.cc
diff options
context:
space:
mode:
authormathias <mathias>2007-06-06 06:22:37 (GMT)
committermathias <mathias>2007-06-06 06:22:37 (GMT)
commitdff2aa33561b00e97b3561892fb690ba9f2968c6 (patch)
treee1cde447e834f5fe2cb7bbc3fd3fbd4f78c35de7 /src/FbCommands.cc
parent467cb9ac6d951bbd37cb809370fa2e5b27f7e032 (diff)
downloadfluxbox_pavel-dff2aa33561b00e97b3561892fb690ba9f2968c6.zip
fluxbox_pavel-dff2aa33561b00e97b3561892fb690ba9f2968c6.tar.bz2
fix for the following problem:
on *bsd /bin/sh is not just a symlink to /bin/bash as on most linux's but a real standalone shell. and it behaves differently from "bash -c" behavior .. it doesnt exec the command given but waits till the command finishes. as a result a lot of "rogue" a flying around. solution is now ( $SHELL or /bin/sh ) -c exec <cmd>
Diffstat (limited to 'src/FbCommands.cc')
-rw-r--r--src/FbCommands.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/FbCommands.cc b/src/FbCommands.cc
index afa7984..4247820 100644
--- a/src/FbCommands.cc
+++ b/src/FbCommands.cc
@@ -154,9 +154,12 @@ int ExecuteCmd::run() {
154 // remove last number of display and add screen num 154 // remove last number of display and add screen num
155 displaystring.erase(displaystring.size()-1); 155 displaystring.erase(displaystring.size()-1);
156 displaystring += intbuff; 156 displaystring += intbuff;
157
158 std::string exec_cmd = "exec " + m_cmd;
159
157 setsid(); 160 setsid();
158 putenv(const_cast<char *>(displaystring.c_str())); 161 putenv(const_cast<char *>(displaystring.c_str()));
159 execl(shell, shell, "-c", m_cmd.c_str(), static_cast<void*>(NULL)); 162 execl(shell, shell, "-c", exec_cmd.c_str(), static_cast<void*>(NULL));
160 exit(0); 163 exit(0);
161 164
162 return pid; // compiler happy -> we are happy ;) 165 return pid; // compiler happy -> we are happy ;)