Make target_options_to_string return an std::string
authorSimon Marchi <simon.marchi@polymtl.ca>
Wed, 8 Aug 2018 01:37:40 +0000 (21:37 -0400)
committerSimon Marchi <simon.marchi@polymtl.ca>
Wed, 8 Aug 2018 01:38:27 +0000 (21:38 -0400)
Return an std::string instead of a char *, saving some manual freeing.

I only manually tested with "set debug target 1" and "set debug lin-lwp
1", since this only deals with debug output.

gdb/ChangeLog:

* target.h (target_options_to_string): Return an std::string.
* target.c (str_comma_list_concat_elem): Return void, use
std::string.
(do_option): Likewise.
(target_options_to_string): Return an std::string.
* linux-nat.c (linux_nat_target::wait): Adjust.
* target-debug.h (target_debug_print_options): Adjust.

gdb/ChangeLog
gdb/linux-nat.c
gdb/target-debug.h
gdb/target.c
gdb/target.h

index 838029bf239e47b375475dc7958c7f7ab43a7be6..6702b445b7c7bbc584a866e293716ebdfe159c01 100644 (file)
@@ -1,3 +1,13 @@
+2018-08-07  Simon Marchi  <simon.marchi@polymtl.ca>
+
+       * target.h (target_options_to_string): Return an std::string.
+       * target.c (str_comma_list_concat_elem): Return void, use
+       std::string.
+       (do_option): Likewise.
+       (target_options_to_string): Return an std::string.
+       * linux-nat.c (linux_nat_target::wait): Adjust.
+       * target-debug.h (target_debug_print_options): Adjust.
+
 2018-08-07  Tom Tromey  <tom@tromey.com>
 
        * Makefile.in (CPPFLAGS): New variable.
index d2c88ad0cd42ad181f1382ecb5245c4da4c502da..64015e75207939f29d3cf499e6f3c1463b8b83e6 100644 (file)
@@ -3555,14 +3555,11 @@ linux_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
 
   if (debug_linux_nat)
     {
-      char *options_string;
-
-      options_string = target_options_to_string (target_options);
+      std::string options_string = target_options_to_string (target_options);
       fprintf_unfiltered (gdb_stdlog,
                          "linux_nat_wait: [%s], [%s]\n",
                          target_pid_to_str (ptid),
-                         options_string);
-      xfree (options_string);
+                         options_string.c_str ());
     }
 
   /* Flush the async file first.  */
index 331baf57534a0b2ec6090de57d60a6bee450d3c0..1e904b95d6086785619d4d2f44fe970e314f4323 100644 (file)
@@ -203,10 +203,9 @@ target_debug_print_struct_target_waitstatus_p (struct target_waitstatus *status)
 static void
 target_debug_print_options (int options)
 {
-  char *str = target_options_to_string (options);
+  std::string str = target_options_to_string (options);
 
-  fputs_unfiltered (str, gdb_stdlog);
-  xfree (str);
+  fputs_unfiltered (str.c_str (), gdb_stdlog);
 }
 
 static void
index eba07cc9174290a20368087f6d52cc37c1d99c67..a5245abb281168f2996170387e00e9b7b1fdaa0c 100644 (file)
@@ -3441,51 +3441,45 @@ target_continue (ptid_t ptid, enum gdb_signal signal)
   target_resume (ptid, 0, signal);
 }
 
-/* Concatenate ELEM to LIST, a comma separate list, and return the
-   result.  The LIST incoming argument is released.  */
+/* Concatenate ELEM to LIST, a comma separate list.  */
 
-static char *
-str_comma_list_concat_elem (char *list, const char *elem)
+static void
+str_comma_list_concat_elem (std::string *list, const char *elem)
 {
-  if (list == NULL)
-    return xstrdup (elem);
-  else
-    return reconcat (list, list, ", ", elem, (char *) NULL);
+  if (!list->empty ())
+    list->append (", ");
+
+  list->append (elem);
 }
 
 /* Helper for target_options_to_string.  If OPT is present in
    TARGET_OPTIONS, append the OPT_STR (string version of OPT) in RET.
-   Returns the new resulting string.  OPT is removed from
-   TARGET_OPTIONS.  */
+   OPT is removed from TARGET_OPTIONS.  */
 
-static char *
-do_option (int *target_options, char *ret,
+static void
+do_option (int *target_options, std::string *ret,
           int opt, const char *opt_str)
 {
   if ((*target_options & opt) != 0)
     {
-      ret = str_comma_list_concat_elem (ret, opt_str);
+      str_comma_list_concat_elem (ret, opt_str);
       *target_options &= ~opt;
     }
-
-  return ret;
 }
 
-char *
+std::string
 target_options_to_string (int target_options)
 {
-  char *ret = NULL;
+  std::string ret;
 
 #define DO_TARG_OPTION(OPT) \
-  ret = do_option (&target_options, ret, OPT, #OPT)
+  do_option (&target_options, &ret, OPT, #OPT)
 
   DO_TARG_OPTION (TARGET_WNOHANG);
 
   if (target_options != 0)
-    ret = str_comma_list_concat_elem (ret, "unknown???");
+    str_comma_list_concat_elem (&ret, "unknown???");
 
-  if (ret == NULL)
-    ret = xstrdup ("");
   return ret;
 }
 
index 18c4a84ca5b597e25cde1c321f1f8c47faffe0ee..39aa8c3c730a278abae524606b034acd26d0b9a6 100644 (file)
@@ -116,9 +116,8 @@ struct syscall
     const char *name;
   };
 
-/* Return a pretty printed form of TARGET_OPTIONS.
-   Space for the result is malloc'd, caller must free.  */
-extern char *target_options_to_string (int target_options);
+/* Return a pretty printed form of TARGET_OPTIONS.  */
+extern std::string target_options_to_string (int target_options);
 
 /* Possible types of events that the inferior handler will have to
    deal with.  */