Index: gdb/tui/tui-hooks.c |
diff --git a/gdb/tui/tui-hooks.c b/gdb/tui/tui-hooks.c |
index 17a95937c107489b3af8b18336ecafdc96a8badc..4d1e06346f4244bfd0f548733be7baa531a8847a 100644 |
--- a/gdb/tui/tui-hooks.c |
+++ b/gdb/tui/tui-hooks.c |
@@ -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; |
} |