Remove a use of xfree in location.c
authorTom Tromey <tom@tromey.com>
Fri, 14 Jan 2022 14:24:18 +0000 (07:24 -0700)
committerTom Tromey <tom@tromey.com>
Tue, 18 Jan 2022 17:00:00 +0000 (10:00 -0700)
This small cleanup removes a use of xfree from location.c, by
switching to unique_xmalloc_ptr.  One function is only used in
location.c, so it is made static.  And, another function is changed to
avoid a copy.

gdb/linespec.c
gdb/location.c
gdb/location.h

index eb911ccdb3592b924e1fda20a7f4af5c14b88443..b24cf30dc712832e5aef9581f391fe0e935b403f 100644 (file)
@@ -2098,12 +2098,8 @@ canonicalize_linespec (struct linespec_state *state, const linespec *ls)
   /* If this location originally came from a linespec, save a string
      representation of it for display and saving to file.  */
   if (state->is_linespec)
-    {
-      char *linespec = explicit_location_to_linespec (explicit_loc);
-
-      set_event_location_string (canon, linespec);
-      xfree (linespec);
-    }
+    set_event_location_string (canon,
+                              explicit_location_to_linespec (explicit_loc));
 }
 
 /* Given a line offset in LS, construct the relevant SALs.  */
index 45f1d59ad8178081a84fc5e1f7bc8c259c7152f3..d4180cfe429816aa9746489862f52e115897157a 100644 (file)
@@ -231,7 +231,7 @@ get_explicit_location_const (const struct event_location *location)
    AS_LINESPEC is non-zero if this string should be a linespec.
    Otherwise it will be output in explicit form.  */
 
-static char *
+static gdb::unique_xmalloc_ptr<char>
 explicit_to_string_internal (int as_linespec,
                             const struct explicit_location *explicit_loc)
 {
@@ -282,12 +282,12 @@ explicit_to_string_internal (int as_linespec,
                  explicit_loc->line_offset.offset);
     }
 
-  return xstrdup (buf.c_str ());
+  return make_unique_xstrdup (buf.c_str ());
 }
 
 /* See description in location.h.  */
 
-char *
+static gdb::unique_xmalloc_ptr<char>
 explicit_location_to_string (const struct explicit_location *explicit_loc)
 {
   return explicit_to_string_internal (0, explicit_loc);
@@ -295,7 +295,7 @@ explicit_location_to_string (const struct explicit_location *explicit_loc)
 
 /* See description in location.h.  */
 
-char *
+gdb::unique_xmalloc_ptr<char>
 explicit_location_to_linespec (const struct explicit_location *explicit_loc)
 {
   return explicit_to_string_internal (1, explicit_loc);
@@ -425,7 +425,7 @@ event_location_to_string (struct event_location *location)
 
        case EXPLICIT_LOCATION:
          EL_STRING (location)
-           = explicit_location_to_string (EL_EXPLICIT (location));
+           = explicit_location_to_string (EL_EXPLICIT (location)).release ();
          break;
 
        case PROBE_LOCATION:
@@ -981,8 +981,8 @@ event_location_empty_p (const struct event_location *location)
 
 void
 set_event_location_string (struct event_location *location,
-                          const char *string)
+                          gdb::unique_xmalloc_ptr<char> string)
 {
   xfree (EL_STRING (location));
-  EL_STRING (location) = string == NULL ?  NULL : xstrdup (string);
+  EL_STRING (location) = string.release ();
 }
index c6e1402d762d3f50291ca77f44be6182a72de9e7..b391ce3b1dda2976ceffb88b4973049a416a7224 100644 (file)
@@ -109,16 +109,10 @@ struct explicit_location
 extern enum event_location_type
   event_location_type (const struct event_location *);
 
-/* Return a malloc'd explicit string representation of the given
-   explicit location.  The location must already be canonicalized/valid.  */
+/* Return a linespec string representation of the given explicit
+   location.  The location must already be canonicalized/valid.  */
 
-extern char *
-  explicit_location_to_string (const struct explicit_location *explicit_loc);
-
-/* Return a malloc'd linespec string representation of the given
-   explicit location.  The location must already be canonicalized/valid.  */
-
-extern char *
+extern gdb::unique_xmalloc_ptr<char>
   explicit_location_to_linespec (const struct explicit_location *explicit_loc);
 
 /* Return a string representation of the LOCATION.
@@ -286,6 +280,6 @@ extern int event_location_empty_p (const struct event_location *location);
 
 extern void
   set_event_location_string (struct event_location *location,
-                            const char *string);
+                            gdb::unique_xmalloc_ptr<char> string);
 
 #endif /* LOCATION_H */