Remove cleanups from solib.c
authorTom Tromey <tom@tromey.com>
Tue, 6 Feb 2018 20:00:40 +0000 (13:00 -0700)
committerTom Tromey <tom@tromey.com>
Thu, 8 Feb 2018 18:46:57 +0000 (11:46 -0700)
This removes a couple of cleanups from solib.c, replacing one with
std::string and another with unique_xmalloc_ptr.

2018-02-08  Tom Tromey  <tom@tromey.com>

* solib.c (solib_find_1): Use std::string.
(solib_bfd_fopen): Use unique_xmalloc_ptr.

gdb/ChangeLog
gdb/solib.c

index d270de161ca124e09dce27f7de226e50a72310a1..a5f0f202a137d2dce67e5a3ecbb5622655f78366 100644 (file)
@@ -1,3 +1,8 @@
+2018-02-08  Tom Tromey  <tom@tromey.com>
+
+       * solib.c (solib_find_1): Use std::string.
+       (solib_bfd_fopen): Use unique_xmalloc_ptr.
+
 2018-02-08  Tom Tromey  <tom@tromey.com>
 
        * build-id.c (build_id_to_debug_bfd): Use unique_xmalloc_ptr.
index 3dba5eaa8ab569e0d8f694094333dc8ef34cede9..40fdfc59e653db990986a7e66f5993034fa21d10 100644 (file)
@@ -155,8 +155,7 @@ solib_find_1 (const char *in_pathname, int *fd, int is_solib)
   int found_file = -1;
   char *temp_pathname = NULL;
   const char *fskind = effective_target_file_system_kind ();
-  struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
-  char *sysroot = gdb_sysroot;
+  const char *sysroot = gdb_sysroot;
   int prefix_len, orig_prefix_len;
 
   /* If the absolute prefix starts with "target:" but the filesystem
@@ -174,12 +173,13 @@ solib_find_1 (const char *in_pathname, int *fd, int is_solib)
   while (prefix_len > 0 && IS_DIR_SEPARATOR (sysroot[prefix_len - 1]))
     prefix_len--;
 
+  std::string sysroot_holder;
   if (prefix_len == 0)
     sysroot = NULL;
   else if (prefix_len != orig_prefix_len)
     {
-      sysroot = savestring (sysroot, prefix_len);
-      make_cleanup (xfree, sysroot);
+      sysroot_holder = std::string (sysroot, prefix_len);
+      sysroot = sysroot_holder.c_str ();
     }
 
   /* If we're on a non-DOS-based system, backslashes won't be
@@ -251,7 +251,6 @@ solib_find_1 (const char *in_pathname, int *fd, int is_solib)
     {
       if (fd != NULL)
        *fd = -1;
-      do_cleanups (old_chain);
       return temp_pathname;
     }
 
@@ -300,8 +299,6 @@ solib_find_1 (const char *in_pathname, int *fd, int is_solib)
        }
     }
 
-  do_cleanups (old_chain);
-
   /* We try to find the library in various ways.  After each attempt,
      either found_file >= 0 and temp_pathname is a malloc'd string, or
      found_file < 0 and temp_pathname does not point to storage that
@@ -480,7 +477,8 @@ solib_bfd_fopen (char *pathname, int fd)
 
   if (abfd == NULL)
     {
-      make_cleanup (xfree, pathname);
+      /* Arrange to free PATHNAME when the error is thrown.  */
+      gdb::unique_xmalloc_ptr<char> free_pathname (pathname);
       error (_("Could not open `%s' as an executable file: %s"),
             pathname, bfd_errmsg (bfd_get_error ()));
     }