Remove cleanup from add_path
authorTom Tromey <tom@tromey.com>
Thu, 30 Aug 2018 04:42:57 +0000 (22:42 -0600)
committerTom Tromey <tom@tromey.com>
Thu, 13 Sep 2018 22:22:33 +0000 (16:22 -0600)
This removes a cleanup from add_path, replacing it with a use of
gdb::unique_xmalloc_ptr.  Note that this declaration had to be hoisted
somewhat, to avoid inteference from the "goto"s in this function.

gdb/ChangeLog
2018-09-13  Tom Tromey  <tom@tromey.com>

* source.c (add_path): Use gdb::unique_xmalloc_ptr.

gdb/ChangeLog
gdb/source.c

index 4c52a65..2f4d94d 100644 (file)
@@ -1,3 +1,7 @@
+2018-09-13  Tom Tromey  <tom@tromey.com>
+
+       * source.c (add_path): Use gdb::unique_xmalloc_ptr.
+
 2018-09-13  Simon Marchi  <simon.marchi@ericsson.com>
 2018-09-13  Tom Tromey  <tom@tromey.com>
 
index cc5c46d..ec0ea3b 100644 (file)
@@ -479,13 +479,12 @@ add_path (const char *dirname, char **which_path, int parse_separators)
   else
     dir_vec.emplace_back (xstrdup (dirname));
 
-  struct cleanup *back_to = make_cleanup (null_cleanup, NULL);
-
   for (const gdb::unique_xmalloc_ptr<char> &name_up : dir_vec)
     {
       char *name = name_up.get ();
       char *p;
       struct stat st;
+      gdb::unique_xmalloc_ptr<char> new_name_holder;
 
       /* Spaces and tabs will have been removed by buildargv().
          NAME is the start of the directory.
@@ -531,16 +530,17 @@ add_path (const char *dirname, char **which_path, int parse_separators)
        }
 
       if (name[0] == '~')
-       name = tilde_expand (name);
+       new_name_holder.reset (tilde_expand (name));
 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
       else if (IS_ABSOLUTE_PATH (name) && p == name + 2) /* "d:" => "d:." */
-       name = concat (name, ".", (char *)NULL);
+       new_name_holder.reset (concat (name, ".", (char *) NULL));
 #endif
       else if (!IS_ABSOLUTE_PATH (name) && name[0] != '$')
-       name = concat (current_directory, SLASH_STRING, name, (char *)NULL);
+       new_name_holder.reset (concat (current_directory, SLASH_STRING, name,
+                                      (char *) NULL));
       else
-       name = savestring (name, p - name);
-      make_cleanup (xfree, name);
+       new_name_holder.reset (savestring (name, p - name));
+      name = new_name_holder.get ();
 
       /* Unless it's a variable, check existence.  */
       if (name[0] != '$')
@@ -630,8 +630,6 @@ add_path (const char *dirname, char **which_path, int parse_separators)
     skip_dup:
       ;
     }
-
-  do_cleanups (back_to);
 }