* linespec.c (find_method): Move name canonicalization outside
authorKeith Seitz <keiths@redhat.com>
Thu, 2 Dec 2010 20:05:59 +0000 (20:05 +0000)
committerKeith Seitz <keiths@redhat.com>
Thu, 2 Dec 2010 20:05:59 +0000 (20:05 +0000)
the loop.
Be paranoid and use a cleanup.

gdb/ChangeLog
gdb/linespec.c

index 2abbdf9..3814cb3 100644 (file)
@@ -1,3 +1,9 @@
+2010-12-02  Keith Seitz  <keiths@redhat.com>
+
+       * linespec.c (find_method): Move name canonicalization outside
+       the loop.
+       Be paranoid and use a cleanup.
+
 2010-12-01  Doug Evans  <dje@google.com>
 
        * dwarf2read.c (save_gdb_index_command): Add comment.
index 91c5b90..7af0e3a 100644 (file)
@@ -1589,15 +1589,20 @@ find_method (int funfirstline, char ***canonical, char *saved_arg,
       if (strchr (saved_arg, '(') != NULL)
        {
          int i;
+         char *name = saved_arg;
+         char *canon = cp_canonicalize_string (name);
+         struct cleanup *cleanup;
 
-         for (i = 0; i < i1; ++i)
+         if (canon != NULL)
            {
-             char *name = saved_arg;
-             char *canon = cp_canonicalize_string (name);
-
-             if (canon != NULL)
-               name = canon;
+             name = canon;
+             cleanup = make_cleanup (xfree, canon);
+           }
+         else
+           cleanup = make_cleanup (null_cleanup, NULL);
 
+         for (i = 0; i < i1; ++i)
+           {
              if (strcmp_iw (name, SYMBOL_LINKAGE_NAME (sym_arr[i])) == 0)
                {
                  values.sals = (struct symtab_and_line *)
@@ -1605,13 +1610,9 @@ find_method (int funfirstline, char ***canonical, char *saved_arg,
                  values.nelts = 1;
                  values.sals[0] = find_function_start_sal (sym_arr[i],
                                                            funfirstline);
-                 if (canon)
-                   xfree (canon);
+                 do_cleanups (cleanup);
                  return values;
                }
-
-             if (canon)
-               xfree (canon);
            }
 
          error (_("the class `%s' does not have any method instance named %s\n"),