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 18ae7f4c329f6f7d781e4e699755b7b0f211b571..45c8605e1728264f8d91890409685ab2ce96c73c 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 17a95937c107489b3af8b18336ecafdc96a8badc..4d1e06346f4244bfd0f548733be7baa531a8847a 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;
 }