Andrew Black wrote:
Looking at the .rej file, I'm not seeing the difference between the two sections indicated.

What does it look like if you execute 'svn diff runall.cpp | diff runall.patch -' after applying the patch? If there is no difference between the resulting patches, it would seem to me that the solaris patch utility has issues.

Sorry, I have no time to play with it today. There are known
incompatibilities between GNU patch (I assume that's what you
used) and other implementations of the utility so maybe it's
one of them.

Martin


--Andrew Black

Martin Sebor wrote:

Andrew Black wrote:

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.


Hmm, I'm having trouble applying this patch on Solaris 9.
Attached is the the patch itself (copied from your post)
and the .rej file. Do you see what the problem is?

Martin


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

 /**



Reply via email to