From 2f9429aea399b8ff5c1d2d8f7dd0b5e14202f1e8 Mon Sep 17 00:00:00 2001 From: Andrew Cagney Date: Fri, 21 Apr 2000 04:10:18 +0000 Subject: [PATCH] * defs.h, utils.c (free_current_contents): Change parameter to void*. From Philippe De Muyter : * 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. --- gdb/ChangeLog | 13 +++++++++++++ gdb/defs.h | 2 +- gdb/printcmd.c | 11 +++++++---- gdb/utils.c | 7 ++++--- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0f1f773541d..dd196761105 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,16 @@ +Thu Apr 20 17:39:11 2000 Andrew Cagney + + * defs.h, utils.c (free_current_contents): Change parameter to + void*. + + From Philippe De Muyter : + * 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 * wince-stub.c (FREE): New macro. diff --git a/gdb/defs.h b/gdb/defs.h index 86ad0f77415..ff23f609d8d 100644 --- a/gdb/defs.h +++ b/gdb/defs.h @@ -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 ff4ff36ecac..a74ffa2c370 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 1e081552f07..2868eacb15c 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 -- 2.30.2