Use unique_xmalloc_ptr in cd_command
authorTom Tromey <tom@tromey.com>
Sun, 13 Aug 2017 20:34:59 +0000 (14:34 -0600)
committerTom Tromey <tom@tromey.com>
Sun, 3 Sep 2017 19:03:06 +0000 (13:03 -0600)
Change cd_command to use unique_xmalloc_ptr, removing a cleanup.

ChangeLog
2017-09-03  Tom Tromey  <tom@tromey.com>

* cli/cli-cmds.c (cd_command): Use gdb::unique_xmalloc_ptr.

gdb/ChangeLog
gdb/cli/cli-cmds.c

index 8d75d48..6d6dad1 100644 (file)
@@ -1,5 +1,9 @@
 2017-09-03  Tom Tromey  <tom@tromey.com>
 
+       * cli/cli-cmds.c (cd_command): Use gdb::unique_xmalloc_ptr.
+
+2017-09-03  Tom Tromey  <tom@tromey.com>
+
        * mi/mi-interp.c (mi_cmd_interpreter_exec): Use std::string.
 
 2017-09-03  Tom Tromey  <tom@tromey.com>
index d4dc539..8221747 100644 (file)
@@ -398,14 +398,14 @@ cd_command (char *dir, int from_tty)
   /* Found something other than leading repetitions of "/..".  */
   int found_real_path;
   char *p;
-  struct cleanup *cleanup;
 
   /* If the new directory is absolute, repeat is a no-op; if relative,
      repeat might be useful but is more likely to be a mistake.  */
   dont_repeat ();
 
-  dir = tilde_expand (dir != NULL ? dir : "~");
-  cleanup = make_cleanup (xfree, dir);
+  gdb::unique_xmalloc_ptr<char> dir_holder
+    (tilde_expand (dir != NULL ? dir : "~"));
+  dir = dir_holder.get ();
 
   if (chdir (dir) < 0)
     perror_with_name (dir);
@@ -430,17 +430,17 @@ cd_command (char *dir, int from_tty)
        len--;
     }
 
-  dir = savestring (dir, len);
-  if (IS_ABSOLUTE_PATH (dir))
-    current_directory = dir;
+  dir_holder.reset (savestring (dir, len));
+  if (IS_ABSOLUTE_PATH (dir_holder.get ()))
+    current_directory = dir_holder.release ();
   else
     {
       if (IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1]))
-       current_directory = concat (current_directory, dir, (char *)NULL);
+       current_directory = concat (current_directory, dir_holder.get (),
+                                   (char *) NULL);
       else
        current_directory = concat (current_directory, SLASH_STRING,
-                                   dir, (char *)NULL);
-      xfree (dir);
+                                   dir_holder.get (), (char *) NULL);
     }
 
   /* Now simplify any occurrences of `.' and `..' in the pathname.  */
@@ -489,8 +489,6 @@ cd_command (char *dir, int from_tty)
 
   if (from_tty)
     pwd_command ((char *) 0, 1);
-
-  do_cleanups (cleanup);
 }
 \f
 /* Show the current value of the 'script-extension' option.  */