Greetings all. Below is a short patch to fix a couple minor memory leaks in the exec utility. This leak was likely introduced with the support for complex targets. --Andrew Black Log: * runall.cpp (merge_argv): Update function documentation. (run_target): Free argv array returned by merge_argv. Index: runall.cpp =================================================================== --- runall.cpp (revision 432706) +++ runall.cpp (working copy) @@ -73,6 +73,9 @@ argument string is '%x' (no quotes), the contents of the provided argv array will be inserted into the return array at that point. + It is the responsibility of the caller to free() the returned blocks of + memory, which were allocated by a call to split_opt_string(). + @todo Figure out an escaping mechanism to allow '%x' to be passed to an executable @@ -402,7 +405,6 @@ static void run_target (char* target, char** argv) { - struct exec_attrs status; char** childargv; assert (0 != target); @@ -418,12 +420,13 @@ printf ("%-25.25s ", target_name); fflush (stdout); - if (!check_target_ok (childargv [0])) - return; + if (check_target_ok (childargv [0])) { + struct exec_attrs status = exec_file (childargv); + process_results (childargv [0], &status); + } - status = exec_file (childargv); - - process_results (childargv [0], &status); + free (childargv [0]); + free (childargv); } /**