From: Keith Seitz Date: Thu, 2 Dec 2010 20:05:59 +0000 (+0000) Subject: * linespec.c (find_method): Move name canonicalization outside X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d03a3acf0710b16e2dc6fdf3ae4d9d0f794d3ab5;p=binutils-gdb.git * linespec.c (find_method): Move name canonicalization outside the loop. Be paranoid and use a cleanup. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2abbdf95a0d..3814cb3bb03 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2010-12-02 Keith Seitz + + * linespec.c (find_method): Move name canonicalization outside + the loop. + Be paranoid and use a cleanup. + 2010-12-01 Doug Evans * dwarf2read.c (save_gdb_index_command): Add comment. diff --git a/gdb/linespec.c b/gdb/linespec.c index 91c5b901320..7af0e3afe85 100644 --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -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"),