summaryrefslogtreecommitdiff
path: root/libs/pbd/system_exec.cc
diff options
context:
space:
mode:
authorColin Fletcher <colin.m.fletcher@googlemail.com>2014-07-03 18:30:47 +0100
committerColin Fletcher <colin.m.fletcher@googlemail.com>2014-07-05 21:47:49 +0100
commitc03034b7d6a53d1f95e416b08cbe80386e174760 (patch)
treee53fb42c347ce72c0fefc2eae0355e5705f55962 /libs/pbd/system_exec.cc
parent5edca6c96e97193413c4891fb47f54ee7d91b9a1 (diff)
Make $PATH search in SystemExec actually work
Make searching of $PATH work when a SystemExec is created from a command-line, by making sure that argv[0] is set to the discovered path.
Diffstat (limited to 'libs/pbd/system_exec.cc')
-rw-r--r--libs/pbd/system_exec.cc13
1 files changed, 8 insertions, 5 deletions
diff --git a/libs/pbd/system_exec.cc b/libs/pbd/system_exec.cc
index b11ef1ce0e..ef51b7af3d 100644
--- a/libs/pbd/system_exec.cc
+++ b/libs/pbd/system_exec.cc
@@ -195,10 +195,13 @@ SystemExec::SystemExec (std::string command, const std::map<char, std::string> s
{
init ();
make_argp_escaped(command, subs);
- if (!find_file (Searchpath (Glib::getenv ("PATH")), argp[0], cmd)) {
- // not found in path - use as-is
- cmd = argp[0];
+
+ if (find_file (Searchpath (Glib::getenv ("PATH")), argp[0], cmd)) {
+ // argp[0] exists in $PATH` - set it to the actual path where it was found
+ free (argp[0]);
+ argp[0] = strdup(cmd.c_str ());
}
+ // else argp[0] not found in path - leave it as-is, it might be an absolute path
// Glib::find_program_in_path () is only available in Glib >= 2.28
// cmd = Glib::find_program_in_path (argp[0]);
@@ -281,13 +284,13 @@ SystemExec::~SystemExec ()
terminate ();
if (envp) {
for (int i=0;envp[i];++i) {
- free(envp[i]);
+ free(envp[i]);
}
free (envp);
}
if (argp) {
for (int i=0;argp[i];++i) {
- free(argp[i]);
+ free(argp[i]);
}
free (argp);
}