From d03a3acf0710b16e2dc6fdf3ae4d9d0f794d3ab5 Mon Sep 17 00:00:00 2001 From: Keith Seitz Date: Thu, 2 Dec 2010 20:05:59 +0000 Subject: [PATCH] * linespec.c (find_method): Move name canonicalization outside the loop. Be paranoid and use a cleanup. --- gdb/ChangeLog | 6 ++++++ gdb/linespec.c | 23 ++++++++++++----------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2abbdf9..3814cb3 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 91c5b90..7af0e3a 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"), -- 2.7.4