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);
}
/**