2012-05-24 Pedro Alves <palves@redhat.com>
authorPedro Alves <palves@redhat.com>
Thu, 24 May 2012 15:54:57 +0000 (15:54 +0000)
committerPedro Alves <palves@redhat.com>
Thu, 24 May 2012 15:54:57 +0000 (15:54 +0000)
PR tui/14159

* tui/tui-hooks.c (tui_query_hook): Pre-compute the question
string, instead of reusing the va_list argument.

gdb/ChangeLog
gdb/tui/tui-hooks.c

index 18ae7f4..45c8605 100644 (file)
@@ -1,3 +1,10 @@
+2012-05-24  Pedro Alves  <palves@redhat.com>
+
+       PR tui/14159
+
+       * tui/tui-hooks.c (tui_query_hook): Pre-compute the question
+       string, instead of reusing the va_list argument.
+
 2012-05-24  Tom Tromey  <tromey@redhat.com>
 
        * cp-support.h (cp_finalize_namespace, cp_initialize_namespace):
index 17a9593..4d1e063 100644 (file)
@@ -69,6 +69,13 @@ tui_query_hook (const char *msg, va_list argp)
   int retval;
   int ans2;
   int answer;
+  char *question;
+  struct cleanup *old_chain;
+
+  /* Format the question outside of the loop, to avoid reusing
+     ARGP.  */
+  question = xstrvprintf (msg, argp);
+  old_chain = make_cleanup (xfree, question);
 
   echo ();
   while (1)
@@ -76,7 +83,7 @@ tui_query_hook (const char *msg, va_list argp)
       wrap_here ("");          /* Flush any buffered output.  */
       gdb_flush (gdb_stdout);
 
-      vfprintf_filtered (gdb_stdout, msg, argp);
+      fputs_filtered (question, gdb_stdout);
       printf_filtered (_("(y or n) "));
 
       wrap_here ("");
@@ -113,6 +120,8 @@ tui_query_hook (const char *msg, va_list argp)
       printf_filtered (_("Please answer y or n.\n"));
     }
   noecho ();
+
+  do_cleanups (old_chain);
   return retval;
 }