From 1e351ed1b3618fe0fde1db012bcdc56900d63700 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Fri, 9 Aug 2013 15:30:48 +0000 Subject: [PATCH] gcore: Make tilde-expanded filename visible. Most commands in GDB show the tilde-expanded filename in user visible output. This makes gcore behave the same. Before: (gdb) generate-core-file ~/a/b Failed to open '~/a/b' for output. (gdb) generate-core-file ~/core Saved corefile ~/core After: (gdb) generate-core-file ~/a/b Failed to open '/home/pedro/a/b' for output. (gdb) generate-core-file ~/core Saved corefile /home/pedro/core Tested on x86_64 Fedora 17. gdb/ 2013-08-09 Pedro Alves * gcore.c (create_gcore_bfd): Don't use tilde_expand here. (gcore_command): Use tilde_expand here, and when showing the filename to the user, show the expanded version. --- gdb/ChangeLog | 6 ++++++ gdb/gcore.c | 28 ++++++++++++---------------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e6e13ae9e1..65781db350 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2013-08-09 Pedro Alves + + * gcore.c (create_gcore_bfd): Don't use tilde_expand here. + (gcore_command): Use tilde_expand here, and when showing the + filename to the user, show the expanded version. + 2013-08-09 Yao Qi * stack.c (read_frame_arg): Set 'entryval_error' to NULL if diff --git a/gdb/gcore.c b/gdb/gcore.c index 9c83ec82f8..a4bb9ca649 100644 --- a/gdb/gcore.c +++ b/gdb/gcore.c @@ -52,12 +52,7 @@ static int gcore_memory_sections (bfd *); bfd * create_gcore_bfd (const char *filename) { - char *fullname; - bfd *obfd; - - fullname = tilde_expand (filename); - obfd = gdb_bfd_openw (fullname, default_gcore_target ()); - xfree (fullname); + bfd *obfd = gdb_bfd_openw (filename, default_gcore_target ()); if (!obfd) error (_("Failed to open '%s' for output."), filename); @@ -127,8 +122,9 @@ do_bfd_delete_cleanup (void *arg) static void gcore_command (char *args, int from_tty) { - struct cleanup *old_chain; - char *corefilename, corefilename_buffer[40]; + struct cleanup *filename_chain; + struct cleanup *bfd_chain; + char *corefilename; bfd *obfd; /* No use generating a corefile without a target process. */ @@ -136,14 +132,13 @@ gcore_command (char *args, int from_tty) noprocess (); if (args && *args) - corefilename = args; + corefilename = tilde_expand (args); else { /* Default corefile name is "core.PID". */ - xsnprintf (corefilename_buffer, sizeof (corefilename_buffer), - "core.%d", PIDGET (inferior_ptid)); - corefilename = corefilename_buffer; + corefilename = xstrprintf ("core.%d", PIDGET (inferior_ptid)); } + filename_chain = make_cleanup (xfree, corefilename); if (info_verbose) fprintf_filtered (gdb_stdout, @@ -153,16 +148,17 @@ gcore_command (char *args, int from_tty) obfd = create_gcore_bfd (corefilename); /* Need a cleanup that will close and delete the file. */ - old_chain = make_cleanup (do_bfd_delete_cleanup, obfd); + bfd_chain = make_cleanup (do_bfd_delete_cleanup, obfd); /* Call worker function. */ write_gcore_file (obfd); /* Succeeded. */ - fprintf_filtered (gdb_stdout, "Saved corefile %s\n", corefilename); - - discard_cleanups (old_chain); + discard_cleanups (bfd_chain); gdb_bfd_unref (obfd); + + fprintf_filtered (gdb_stdout, "Saved corefile %s\n", corefilename); + do_cleanups (filename_chain); } static unsigned long -- 2.34.1