* Makefile.in (utils.o): Update.
authorDaniel Jacobowitz <drow@false.org>
Wed, 29 Mar 2006 22:53:33 +0000 (22:53 +0000)
committerDaniel Jacobowitz <drow@false.org>
Wed, 29 Mar 2006 22:53:33 +0000 (22:53 +0000)
* top.c (in_user_command): New.
(command_line_input): Use input_from_terminal_p.
(input_from_terminal_p): Don't check caution.  Handle
stdin == NULL for Insight.
* top.h (in_user_command, caution): New declarations.
* utils.c: Include "top.h".
(query, defaulted_query): Check caution here.  Move the call
to input_from_terminal_p higher.
* cli/cli-script.c (do_restore_user_call_depth): Only decrement
the depth.  Update in_user_command if necessary.
(execute_user_command): Don't clobber old_chain.  Set
in_user_command.  Let do_restore_user_call_depth handle
user_call_depth.
(read_command_lines): Check whether to prompt before calling
Insight hooks.
* tui/tui-hooks.c (tui_query_hook): Remove newly unnecessary
input_from_terminal_p check.

gdb/ChangeLog
gdb/Makefile.in
gdb/cli/cli-script.c
gdb/top.c
gdb/top.h
gdb/tui/tui-hooks.c
gdb/utils.c

index be33d8bef8faa7367f9568cdb5a75c5f81673c60..7242fd93991b98992d262fdf0eb8db1c7e58d113 100644 (file)
@@ -1,3 +1,24 @@
+2006-03-29  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * Makefile.in (utils.o): Update.
+       * top.c (in_user_command): New.
+       (command_line_input): Use input_from_terminal_p.
+       (input_from_terminal_p): Don't check caution.  Handle
+       stdin == NULL for Insight.
+       * top.h (in_user_command, caution): New declarations.
+       * utils.c: Include "top.h".
+       (query, defaulted_query): Check caution here.  Move the call
+       to input_from_terminal_p higher.
+       * cli/cli-script.c (do_restore_user_call_depth): Only decrement
+       the depth.  Update in_user_command if necessary.
+       (execute_user_command): Don't clobber old_chain.  Set
+       in_user_command.  Let do_restore_user_call_depth handle
+       user_call_depth.
+       (read_command_lines): Check whether to prompt before calling
+       Insight hooks.
+       * tui/tui-hooks.c (tui_query_hook): Remove newly unnecessary
+       input_from_terminal_p check.
+
 2006-03-29  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * s390-nat.c (s390_insert_watchpoint): Add missing argument.
index ba418186e46fc642971e4c1521f35787a631bf1d..5d9f9e5506d6c1f9c9385adbabc03e93bacd2b55 100644 (file)
@@ -2744,7 +2744,7 @@ user-regs.o: user-regs.c $(defs_h) $(user_regs_h) $(gdbtypes_h) \
 utils.o: utils.c $(defs_h) $(gdb_assert_h) $(gdb_string_h) $(event_top_h) \
        $(exceptions_h) $(tui_h) $(gdbcmd_h) $(serial_h) $(bfd_h) \
        $(target_h) $(demangle_h) $(expression_h) $(language_h) $(charset_h) \
-       $(annotate_h) $(filenames_h) $(symfile_h) $(inferior_h) \
+       $(annotate_h) $(filenames_h) $(symfile_h) $(inferior_h) $(top_h) \
        $(gdb_curses_h) $(readline_h) $(gdb_obstack_h)
 uw-thread.o: uw-thread.c $(defs_h) $(gdbthread_h) $(target_h) $(inferior_h) \
        $(regcache_h) $(gregset_h)
index ee986d11c72eaf43af568fadc28ecbb785438fbb..b8e9d4f03f42998340dc5e250e52d483e655338b 100644 (file)
@@ -1,8 +1,8 @@
 /* GDB CLI command scripting.
 
    Copyright (c) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
-   1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005 Free
-   Software Foundation, Inc.
+   1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006
+   Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -241,9 +241,9 @@ static void
 do_restore_user_call_depth (void * call_depth)
 {      
   int * depth = call_depth;
-  /* We will be returning_to_top_level() at this point, so we want to
-     reset our depth. */
-  (*depth) = 0;
+  (*depth)--;
+  if ((*depth) == 0)
+    in_user_command = 0;
 }
 
 
@@ -266,12 +266,17 @@ execute_user_command (struct cmd_list_element *c, char *args)
   if (++user_call_depth > max_user_call_depth)
     error (_("Max user call depth exceeded -- command aborted."));
 
-  old_chain = make_cleanup (do_restore_user_call_depth, &user_call_depth);
+  make_cleanup (do_restore_user_call_depth, &user_call_depth);
 
   /* Set the instream to 0, indicating execution of a
      user-defined function.  */
-  old_chain = make_cleanup (do_restore_instream_cleanup, instream);
+  make_cleanup (do_restore_instream_cleanup, instream);
   instream = (FILE *) 0;
+
+  /* Also set the global in_user_command, so that NULL instream is
+     not confused with Insight.  */
+  in_user_command = 1;
+
   while (cmdlines)
     {
       ret = execute_control_command (cmdlines);
@@ -283,8 +288,6 @@ execute_user_command (struct cmd_list_element *c, char *args)
       cmdlines = cmdlines->next;
     }
   do_cleanups (old_chain);
-
-  user_call_depth--;
 }
 
 enum command_control_type
@@ -920,15 +923,19 @@ read_command_lines (char *prompt_arg, int from_tty)
   enum misc_command_type val;
 
   control_level = 0;
-  if (deprecated_readline_begin_hook)
-    {
-      /* Note - intentional to merge messages with no newline */
-      (*deprecated_readline_begin_hook) ("%s  %s\n", prompt_arg, END_MESSAGE);
-    }
-  else if (from_tty && input_from_terminal_p ())
+
+  if (from_tty && input_from_terminal_p ())
     {
-      printf_unfiltered ("%s\n%s\n", prompt_arg, END_MESSAGE);
-      gdb_flush (gdb_stdout);
+      if (deprecated_readline_begin_hook)
+       {
+         /* Note - intentional to merge messages with no newline */
+         (*deprecated_readline_begin_hook) ("%s  %s\n", prompt_arg, END_MESSAGE);
+       }
+      else
+       {
+         printf_unfiltered ("%s\n%s\n", prompt_arg, END_MESSAGE);
+         gdb_flush (gdb_stdout);
+       }
     }
 
   head = tail = NULL;
@@ -989,7 +996,7 @@ read_command_lines (char *prompt_arg, int from_tty)
        do_cleanups (old_chain);
     }
 
-  if (deprecated_readline_end_hook)
+  if (deprecated_readline_end_hook && from_tty && input_from_terminal_p ())
     {
       (*deprecated_readline_end_hook) ();
     }
index 61968afb63c4d2d8d6060ab7da7a54b32c67c601..e129722ea7c852caf36da6f3107d8d9ccaa28da4 100644 (file)
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -112,6 +112,10 @@ Whether to confirm potentially dangerous operations is %s.\n"),
 
 FILE *instream;
 
+/* Flag to indicate whether a user defined command is currently running.  */
+
+int in_user_command;
+
 /* Current working directory.  */
 
 char *current_directory;
@@ -909,11 +913,11 @@ command_line_input (char *prompt_arg, int repeat, char *annotation_suffix)
        }
 
       /* Don't use fancy stuff if not talking to stdin.  */
-      if (deprecated_readline_hook && instream == NULL)
+      if (deprecated_readline_hook && input_from_terminal_p ())
        {
          rl = (*deprecated_readline_hook) (local_prompt);
        }
-      else if (command_editing_p && instream == stdin && ISATTY (instream))
+      else if (command_editing_p && input_from_terminal_p ())
        {
          rl = gdb_readline_wrapper (local_prompt);
        }
@@ -1197,13 +1201,22 @@ quit_force (char *args, int from_tty)
   exit (exit_code);
 }
 
-/* Returns whether GDB is running on a terminal and whether the user
-   desires that questions be asked of them on that terminal.  */
+/* Returns whether GDB is running on a terminal and input is
+   currently coming from that terminal.  */
 
 int
 input_from_terminal_p (void)
 {
-  return gdb_has_a_terminal () && (instream == stdin) & caution;
+  if (gdb_has_a_terminal () && instream == stdin)
+    return 1;
+
+  /* If INSTREAM is unset, and we are not in a user command, we
+     must be in Insight.  That's like having a terminal, for our
+     purposes.  */
+  if (instream == NULL && !in_user_command)
+    return 1;
+
+  return 0;
 }
 \f
 static void
index e3f5d72c6ea0bb6a27f37bf59fba271916b28aad..591bfa34e3c1968b4c2fc4efd12440d429a24e83 100644 (file)
--- a/gdb/top.h
+++ b/gdb/top.h
@@ -1,7 +1,7 @@
 /* Top level stuff for GDB, the GNU debugger.
 
    Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
-   1996, 1997, 1998, 1999, 2000, 2005 Free Software Foundation, Inc.
+   1996, 1997, 1998, 1999, 2000, 2005, 2006 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -27,6 +27,8 @@
 extern char *line;
 extern int linesize;
 extern FILE *instream;
+extern int in_user_command;
+extern int caution;
 extern char gdb_dirbuf[1024];
 extern int inhibit_gdbinit;
 extern int epoch_interface;
index 2e4632e903913c19049f09461353c425de6a4795..7099dd77a94b06f4ee115d2836148ee340de460e 100644 (file)
@@ -1,6 +1,7 @@
 /* GDB hooks for TUI.
 
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -77,10 +78,6 @@ tui_query_hook (const char * msg, va_list argp)
   int ans2;
   int answer;
 
-  /* Automatically answer "yes" if input is not from a terminal.  */
-  if (!input_from_terminal_p ())
-    return 1;
-
   echo ();
   while (1)
     {
index c1ed5b73e2038ab1a6ce5e7c403f522fd7d6e1d6..00a060b2c57c9421281277d6e37637d36f4a9d6a 100644 (file)
@@ -54,6 +54,7 @@
 #include "filenames.h"
 #include "symfile.h"
 #include "gdb_obstack.h"
+#include "top.h"
 
 #include "inferior.h"          /* for signed_pointer_to_address */
 
@@ -1141,16 +1142,17 @@ query (const char *ctlstr, ...)
   int ans2;
   int retval;
 
+  /* Automatically answer "yes" if input is not from the user
+     directly, or if the user did not want prompts.  */
+  if (!input_from_terminal_p () || !caution)
+    return 1;
+
   if (deprecated_query_hook)
     {
       va_start (args, ctlstr);
       return deprecated_query_hook (ctlstr, args);
     }
 
-  /* Automatically answer "yes" if input is not from a terminal.  */
-  if (!input_from_terminal_p ())
-    return 1;
-
   while (1)
     {
       wrap_here ("");          /* Flush any buffered output */
@@ -1244,15 +1246,16 @@ defaulted_query (const char *ctlstr, const char defchar, va_list args)
       n_string = "[n]";
     }
 
+  /* Automatically answer the default value if input is not from the user
+     directly, or if the user did not want prompts.  */
+  if (!input_from_terminal_p () || !caution)
+    return def_value;
+
   if (deprecated_query_hook)
     {
       return deprecated_query_hook (ctlstr, args);
     }
 
-  /* Automatically answer default value if input is not from a terminal.  */
-  if (!input_from_terminal_p ())
-    return def_value;
-
   while (1)
     {
       wrap_here ("");          /* Flush any buffered output */