aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2000-04-21 04:10:18 +0000
committerAndrew Cagney <cagney@redhat.com>2000-04-21 04:10:18 +0000
commit2f9429aea399b8ff5c1d2d8f7dd0b5e14202f1e8 (patch)
treeb79970c8cd4311360bd46b55935949224f31e326
parent61c37cee5da9d08b107ec331b1080f1982f5afa1 (diff)
downloadgdb-2f9429aea399b8ff5c1d2d8f7dd0b5e14202f1e8.zip
gdb-2f9429aea399b8ff5c1d2d8f7dd0b5e14202f1e8.tar.gz
gdb-2f9429aea399b8ff5c1d2d8f7dd0b5e14202f1e8.tar.bz2
* 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.
-rw-r--r--gdb/ChangeLog13
-rw-r--r--gdb/defs.h2
-rw-r--r--gdb/printcmd.c11
-rw-r--r--gdb/utils.c7
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.
diff --git a/gdb/defs.h b/gdb/defs.h
index 86ad0f7..ff23f60 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 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