diff options
author | Colin Fletcher <colin.m.fletcher@googlemail.com> | 2014-07-03 18:30:47 +0100 |
---|---|---|
committer | Colin Fletcher <colin.m.fletcher@googlemail.com> | 2014-07-05 21:47:49 +0100 |
commit | c03034b7d6a53d1f95e416b08cbe80386e174760 (patch) | |
tree | e53fb42c347ce72c0fefc2eae0355e5705f55962 /libs/pbd/system_exec.cc | |
parent | 5edca6c96e97193413c4891fb47f54ee7d91b9a1 (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.cc | 13 |
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); } |