summaryrefslogtreecommitdiff
path: root/gdb/gcore.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <dan@debian.org>2010-02-16 20:48:51 +0000
committerDaniel Jacobowitz <dan@debian.org>2010-02-16 20:48:51 +0000
commitf0f68e11719f68799561fef1299871f1007cd13d (patch)
tree0e9ba28a0cc4c7647263c0ee9d80aab3aeb920a2 /gdb/gcore.c
parentec6579e9c6771650031096299d59b019551bffc2 (diff)
downloadgdb-f0f68e11719f68799561fef1299871f1007cd13d.tar.gz
gdb/
* gcore.c (do_bfd_delete_cleanup): New function. (gcore_command): Use it. Discard the cleanup after success. (gcore_copy_callback): Delete dead code.
Diffstat (limited to 'gdb/gcore.c')
-rw-r--r--gdb/gcore.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/gdb/gcore.c b/gdb/gcore.c
index dd945905a6d..d8e7ed44f16 100644
--- a/gdb/gcore.c
+++ b/gdb/gcore.c
@@ -102,6 +102,16 @@ write_gcore_file (bfd *obfd)
}
}
+static void
+do_bfd_delete_cleanup (void *arg)
+{
+ bfd *obfd = arg;
+ const char *filename = obfd->filename;
+
+ bfd_close (arg);
+ unlink (filename);
+}
+
/* gcore_command -- implements the 'gcore' command.
Generate a core file from the inferior process. */
@@ -132,8 +142,8 @@ gcore_command (char *args, int from_tty)
/* Open the output file. */
obfd = create_gcore_bfd (corefilename);
- /* Need a cleanup that will close the file (FIXME: delete it?). */
- old_chain = make_cleanup_bfd_close (obfd);
+ /* Need a cleanup that will close and delete the file. */
+ old_chain = make_cleanup (do_bfd_delete_cleanup, obfd);
/* Call worker function. */
write_gcore_file (obfd);
@@ -141,9 +151,8 @@ gcore_command (char *args, int from_tty)
/* Succeeded. */
fprintf_filtered (gdb_stdout, "Saved corefile %s\n", corefilename);
- /* Clean-ups will close the output file and free malloc memory. */
- do_cleanups (old_chain);
- return;
+ discard_cleanups (old_chain);
+ bfd_close (obfd);
}
static unsigned long
@@ -521,9 +530,6 @@ gcore_copy_callback (bfd *obfd, asection *osec, void *ignored)
size = min (total_size, MAX_COPY_BYTES);
memhunk = xmalloc (size);
- /* ??? This is crap since xmalloc should never return NULL. */
- if (memhunk == NULL)
- error (_("Not enough memory to create corefile."));
old_chain = make_cleanup (xfree, memhunk);
while (total_size > 0)