diff options
-rw-r--r-- | gdb/ChangeLog | 13 | ||||
-rw-r--r-- | gdb/defs.h | 2 | ||||
-rw-r--r-- | gdb/printcmd.c | 11 | ||||
-rw-r--r-- | gdb/utils.c | 7 |
4 files changed, 25 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0f1f773..dd19676 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,16 @@ +Thu Apr 20 17:39:11 2000 Andrew Cagney <cagney@b1.cygnus.com> + + * defs.h, utils.c (free_current_contents): Change parameter to + void*. + + From Philippe De Muyter <phdm@macqel.be>: + * printcmd.c (print_address_symbolic): Call `make_cleanup' with + `(free_current_contents, &x)', not `(free, x)'. + * utils.c (free_current_contents): Do not `free (NULL)'. + + * printcmd.c (print_address_symbolic): Cleanup after a failed + call to build_address_symbolic. + 2000-04-20 Christopher Faylor <cgf@cygnus.com> * wince-stub.c (FREE): New macro. @@ -354,7 +354,7 @@ extern void restore_cleanups (struct cleanup *); extern void restore_final_cleanups (struct cleanup *); extern void restore_my_cleanups (struct cleanup **, struct cleanup *); -extern void free_current_contents (char **); +extern void free_current_contents (void *); extern void null_cleanup (void *); diff --git a/gdb/printcmd.c b/gdb/printcmd.c index ff4ff36..a74ffa2 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -562,12 +562,15 @@ print_address_symbolic (addr, stream, do_demangle, leadin) int offset = 0; int line = 0; - struct cleanup *cleanup_chain = make_cleanup (free, name); - if (print_symbol_filename) - make_cleanup (free, filename); + /* throw away both name and filename */ + struct cleanup *cleanup_chain = make_cleanup (free_current_contents, &name); + make_cleanup (free_current_contents, &filename); if (build_address_symbolic (addr, do_demangle, &name, &offset, &filename, &line, &unmapped)) - return; + { + do_cleanups (cleanup_chain); + return; + } fputs_filtered (leadin, stream); if (unmapped) diff --git a/gdb/utils.c b/gdb/utils.c index 1e08155..2868eac 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -375,10 +375,11 @@ restore_my_cleanups (pmy_chain, chain) to arrange to free the object thus allocated. */ void -free_current_contents (location) - char **location; +free_current_contents (void *ptr) { - free (*location); + void **location = ptr; + if (*location != NULL) + free (*location); } /* Provide a known function that does nothing, to use as a base for |