Use std::string for interpreter_p
authorTom Tromey <tromey@adacore.com>
Fri, 17 Jun 2022 16:01:45 +0000 (10:01 -0600)
committerTom Tromey <tromey@adacore.com>
Wed, 22 Jun 2022 19:28:55 +0000 (13:28 -0600)
The global interpreter_p is a manually-managed 'char *'.  This patch
changes it to be a std::string instead, and removes some erroneous
comments.

gdb/interps.c
gdb/main.c
gdb/main.h
gdb/tui/tui-interp.c

index 0c440e786857a5d1c44489ddae12f31189df8707..3a9c590b8c87a5f7bb6aa2f3880a7b3e59068a23 100644 (file)
@@ -168,15 +168,8 @@ interp_set (struct interp *interp, bool top_level)
   if (top_level)
     ui_interp->top_level_interpreter = interp;
 
-  /* We use interpreter_p for the "set interpreter" variable, so we need
-     to make sure we have a malloc'ed copy for the set command to free.  */
-  if (interpreter_p != NULL
-      && strcmp (interp->name (), interpreter_p) != 0)
-    {
-      xfree (interpreter_p);
-
-      interpreter_p = xstrdup (interp->name ());
-    }
+  if (interpreter_p != interp->name ())
+    interpreter_p = interp->name ();
 
   /* Run the init proc.  */
   if (!interp->inited)
index ec2b7b017524d5df5a1e27c79cb2743312cae3c4..8c97987956b7d015eb0de6207bc1e55ddbe19179 100644 (file)
 #include "observable.h"
 #include "serial.h"
 
-/* The selected interpreter.  This will be used as a set command
-   variable, so it should always be malloc'ed - since
-   do_setshow_command will free it.  */
-char *interpreter_p;
+/* The selected interpreter.  */
+std::string interpreter_p;
 
 /* System root path, used to find libraries etc.  */
 std::string gdb_sysroot;
@@ -729,7 +727,7 @@ captured_main_1 (struct captured_main_args *context)
      this captured main, or one specified by the user at start up, or
      the console.  Initialize the interpreter to the one requested by 
      the application.  */
-  interpreter_p = xstrdup (context->interpreter_p);
+  interpreter_p = context->interpreter_p;
 
   /* Parse arguments and options.  */
   {
@@ -866,8 +864,7 @@ captured_main_1 (struct captured_main_args *context)
          case OPT_TUI:
            /* --tui is equivalent to -i=tui.  */
 #ifdef TUI
-           xfree (interpreter_p);
-           interpreter_p = xstrdup (INTERP_TUI);
+           interpreter_p = INTERP_TUI;
 #else
            error (_("%s: TUI mode is not supported"), gdb_program_name);
 #endif
@@ -877,14 +874,12 @@ captured_main_1 (struct captured_main_args *context)
               actually useful, and if it is, what it should do.  */
 #ifdef GDBTK
            /* --windows is equivalent to -i=insight.  */
-           xfree (interpreter_p);
-           interpreter_p = xstrdup (INTERP_INSIGHT);
+           interpreter_p = INTERP_INSIGHT;
 #endif
            break;
          case OPT_NOWINDOWS:
            /* -nw is equivalent to -i=console.  */
-           xfree (interpreter_p);
-           interpreter_p = xstrdup (INTERP_CONSOLE);
+           interpreter_p = INTERP_CONSOLE;
            break;
          case 'f':
            annotation_level = 1;
@@ -950,8 +945,7 @@ captured_main_1 (struct captured_main_args *context)
            }
 #endif /* GDBTK */
          case 'i':
-           xfree (interpreter_p);
-           interpreter_p = xstrdup (optarg);
+           interpreter_p = optarg;
            break;
          case 'd':
            dirarg.push_back (optarg);
@@ -1133,7 +1127,7 @@ captured_main_1 (struct captured_main_args *context)
      GDB retain the old MI1 interpreter startup behavior.  Output the
      copyright message before the interpreter is installed.  That way
      it isn't encapsulated in MI output.  */
-  if (!quiet && strcmp (interpreter_p, INTERP_MI1) == 0)
+  if (!quiet && interpreter_p == INTERP_MI1)
     {
       /* Print all the junk at the top, with trailing "..." if we are
         about to read a symbol file (possibly slowly).  */
@@ -1147,7 +1141,7 @@ captured_main_1 (struct captured_main_args *context)
 
   /* Install the default UI.  All the interpreters should have had a
      look at things by now.  Initialize the default interpreter.  */
-  set_top_level_interpreter (interpreter_p);
+  set_top_level_interpreter (interpreter_p.c_str ());
 
   /* FIXME: cagney/2003-02-03: The big hack (part 2 of 2) that lets
      GDB retain the old MI1 interpreter startup behavior.  Output the
index 60b3569438ed4908ce00d8e665dea2d40e4d4b7b..7cdd93f3420d430797e149ac5dbc63170e86e86d 100644 (file)
@@ -36,7 +36,7 @@ extern int batch_silent;
 extern int batch_flag;
 
 /* * The name of the interpreter if specified on the command line.  */
-extern char *interpreter_p;
+extern std::string interpreter_p;
 
 /* From mingw-hdep.c, used by main.c.  */
 
index e867441afb0bb17b524cf4815f81dee8cb224e4e..b4faede8ce6c012251dc2bc71fbaafb7bde094e1 100644 (file)
@@ -343,14 +343,11 @@ _initialize_tui_interp ()
 {
   interp_factory_register (INTERP_TUI, tui_interp_factory);
 
-  if (interpreter_p && strcmp (interpreter_p, INTERP_TUI) == 0)
+  if (interpreter_p == INTERP_TUI)
     tui_start_enabled = true;
 
-  if (interpreter_p && strcmp (interpreter_p, INTERP_CONSOLE) == 0)
-    {
-      xfree (interpreter_p);
-      interpreter_p = xstrdup (INTERP_TUI);
-    }
+  if (interpreter_p == INTERP_CONSOLE)
+    interpreter_p = INTERP_TUI;
 
   /* If changing this, remember to update cli-interp.c as well.  */
   gdb::observers::normal_stop.attach (tui_on_normal_stop, "tui-interp");