From c03034b7d6a53d1f95e416b08cbe80386e174760 Mon Sep 17 00:00:00 2001 From: Colin Fletcher Date: Thu, 3 Jul 2014 18:30:47 +0100 Subject: [PATCH] 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. --- libs/pbd/system_exec.cc | 13 ++++++++----- 1 file 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 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); }