gcore: Make tilde-expanded filename visible.
authorPedro Alves <palves@redhat.com>
Fri, 9 Aug 2013 15:30:48 +0000 (15:30 +0000)
committerPedro Alves <palves@redhat.com>
Fri, 9 Aug 2013 15:30:48 +0000 (15:30 +0000)
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  <palves@redhat.com>

* 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
gdb/gcore.c

index e6e13ae9e1c90fd81e55237d2bec9beb5f3e789d..65781db350bc6d19bde167a8641b86fae5809ab5 100644 (file)
@@ -1,3 +1,9 @@
+2013-08-09  Pedro Alves  <palves@redhat.com>
+
+       * 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  <yao@codesourcery.com>
 
        * stack.c (read_frame_arg): Set 'entryval_error' to NULL if
index 9c83ec82f89e2cca53d510f65f7fc0105cdb5827..a4bb9ca64933239268096f5926168ea9b104f80c 100644 (file)
@@ -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
This page took 0.034559 seconds and 4 git commands to generate.