diff options
Diffstat (limited to 'gdb/inflow.c')
-rw-r--r-- | gdb/inflow.c | 68 |
1 files changed, 24 insertions, 44 deletions
diff --git a/gdb/inflow.c b/gdb/inflow.c index 27ce0b0..5b55cec 100644 --- a/gdb/inflow.c +++ b/gdb/inflow.c @@ -74,13 +74,17 @@ struct terminal_info }; /* Our own tty state, which we restore every time we need to deal with - the terminal. This is only set once, when GDB first starts. The - settings of flags which readline saves and restores and + the terminal. This is set once, when GDB first starts, and then + whenever we enter/leave TUI mode (gdb_save_tty_state). The + settings of flags which readline saves and restores are unimportant. */ static struct terminal_info our_terminal_info; -/* Snapshot of our own tty state taken during initialization of GDB. - This is used as the initial tty state given to each new inferior. */ +/* Snapshot of the initial tty state taken during initialization of + GDB, before readline/ncurses have had a chance to change it. This + is used as the initial tty state given to each new spawned + inferior. Unlike our_terminal_info, this is only ever set + once. */ static serial_ttystate initial_gdb_ttystate; static struct terminal_info *get_inflow_inferior_data (struct inferior *); @@ -136,61 +140,37 @@ gdb_getpgrp (void) } #endif -enum gdb_has_a_terminal_flag_enum - { - yes, no, have_not_checked - } -gdb_has_a_terminal_flag = have_not_checked; - -/* Set the initial tty state that is to be inherited by new inferiors. */ +/* See terminal.h. */ void set_initial_gdb_ttystate (void) { + /* Note we can't do any of this in _initialize_inflow because at + that point stdin_serial has not been created yet. */ + initial_gdb_ttystate = serial_get_tty_state (stdin_serial); -} -/* Does GDB have a terminal (on stdin)? */ -int -gdb_has_a_terminal (void) -{ - switch (gdb_has_a_terminal_flag) + if (initial_gdb_ttystate != NULL) { - case yes: - return 1; - case no: - return 0; - case have_not_checked: - /* Get all the current tty settings (including whether we have a - tty at all!). Can't do this in _initialize_inflow because - serial_fdopen() won't work until the serial_ops_list is - initialized. */ - + our_terminal_info.ttystate + = serial_copy_tty_state (stdin_serial, initial_gdb_ttystate); #ifdef F_GETFL our_terminal_info.tflags = fcntl (0, F_GETFL, 0); #endif - - gdb_has_a_terminal_flag = no; - if (stdin_serial != NULL) - { - our_terminal_info.ttystate = serial_get_tty_state (stdin_serial); - - if (our_terminal_info.ttystate != NULL) - { - gdb_has_a_terminal_flag = yes; #ifdef PROCESS_GROUP_TYPE - our_terminal_info.process_group = gdb_getpgrp (); + our_terminal_info.process_group = gdb_getpgrp (); #endif - } - } - - return gdb_has_a_terminal_flag == yes; - default: - /* "Can't happen". */ - return 0; } } +/* Does GDB have a terminal (on stdin)? */ + +static int +gdb_has_a_terminal (void) +{ + return initial_gdb_ttystate != NULL; +} + /* Macro for printing errors from ioctl operations */ #define OOPSY(what) \ |