35 #ifdef HAVE_SYS_IOCTL_H
36 #include <sys/ioctl.h>
67 #ifdef PROCESS_GROUP_TYPE
88 #ifdef PROCESS_GROUP_TYPE
120 #ifdef PROCESS_GROUP_TYPE
130 process_group = getpgrp ();
133 ioctl (0, TIOCGPGRP, &process_group);
157 "is %s (currently %s).\n",
195 if (stdin_serial != NULL)
202 #ifdef PROCESS_GROUP_TYPE
217 #define OOPSY(what) \
219 fprintf_unfiltered(gdb_stderr, "[%s failed in terminal_inferior: %s]\n", \
220 what, safe_strerror (errno))
231 #ifdef PROCESS_GROUP_TYPE
268 #ifdef PROCESS_GROUP_TYPE
308 result = fcntl (0, F_SETFL, tinfo->
tflags);
309 result = fcntl (0, F_SETFL, tinfo->
tflags);
310 OOPSY (
"fcntl F_SETFL");
318 OOPSY (
"setting tty state");
322 sigint_ours = (void (*)()) signal (SIGINT, SIG_IGN);
420 void (*osigttou) () = NULL;
426 osigttou = (void (*)()) signal (SIGTTOU, SIG_IGN);
432 #ifdef PROCESS_GROUP_TYPE
468 "[tcsetpgrp failed in child_terminal_ours: %s]\n",
480 signal (SIGTTOU, osigttou);
492 tinfo->
tflags = fcntl (0, F_GETFL, 0);
566 *tinfo_to = *tinfo_from;
602 "(currently saved by GDB):\n"));
613 #define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR)
631 if (flags & O_NONBLOCK)
633 flags &= ~O_NONBLOCK;
636 #if defined (O_NDELAY)
640 if (flags & O_NDELAY)
645 if (flags & O_APPEND)
649 #if defined (O_BINARY)
660 #ifdef PROCESS_GROUP_TYPE
684 #if !defined(__GO32__) && !defined(_WIN32)
706 #if !defined(__GO32__) && !defined(_WIN32)
711 tty = open (
"/dev/tty", O_RDWR);
716 osigttou = (void (*)()) signal (SIGTTOU, SIG_IGN);
717 ioctl (tty, TIOCNOTTY, 0);
719 signal (SIGTTOU, osigttou);
746 if (ioctl (tty, TIOCSCTTY, 0) == -1)
749 warning (
_(
"GDB: Failed to set controlling terminal: %s"),
814 signal (SIGINT,
osig);
838 warning (
_(
"Failed to create new terminal session: setsid: %s"),
863 #if defined (HAVE_TERMIOS) || defined (TIOCGPGRP)
868 retval = setpgid (getpid (), getpid ());
874 retval = setpgrp (getpid (), getpid ());
900 _(
"Print inferior's saved terminal status."));
904 Set whether GDB's standard input is a terminal."),
_(
"\
905 Show whether GDB's standard input is a terminal."),
_(
"\
906 If on, GDB assumes that standard input is a terminal. In practice, it\n\
907 means that GDB should wait for the user to answer queries associated to\n\
908 commands entered at the command prompt. If off, GDB assumes that standard\n\
909 input is not a terminal, and uses the default answer to all queries.\n\
910 If auto (the default), determine which mode to use based on the standard\n\
921 #if defined (HAVE_TERMIOS)
924 #ifdef _POSIX_JOB_CONTROL
927 #ifdef _SC_JOB_CONTROL
#define target_terminal_info(arg, from_tty)
void set_sigint_trap(void)
void child_terminal_info(struct target_ops *self, const char *args, int from_tty)
int ptid_equal(ptid_t ptid1, ptid_t ptid2)
void serial_print_tty_state(struct serial *scb, serial_ttystate ttystate, struct ui_file *stream)
void new_tty_prefork(const char *ttyname)
void new_tty_postfork(void)
void warning(const char *fmt,...)
struct ui_file * gdb_stdout
static void(* sigint_ours)()
void print_sys_errmsg(const char *string, int errcode)
static void check_syscall(const char *msg, int result)
struct observer * observer_attach_inferior_exit(observer_inferior_exit_ftype *f)
static PROCESS_GROUP_TYPE gdb_getpgrp(void)
void set_initial_gdb_ttystate(void)
int gdb_has_a_terminal(void)
void printf_filtered(const char *format,...)
int serial_set_tty_state(struct serial *scb, serial_ttystate ttystate)
mach_port_t kern_return_t mach_port_t msgports mach_port_t kern_return_t pid_t pid mach_port_t kern_return_t mach_port_t task mach_port_t kern_return_t int flags
struct cmd_list_element * setlist
struct serial * serial_fdopen(const int fd)
void add_setshow_auto_boolean_cmd(const char *name, enum command_class theclass, enum auto_boolean *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_sfunc_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
static void child_terminal_ours_1(int)
#define PROCESS_GROUP_TYPE
void gdb_save_tty_state(void)
static void show_interactive_mode(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
void fprintf_filtered(struct ui_file *stream, const char *format,...)
static struct terminal_info our_terminal_info
static const struct inferior_data * inflow_inferior_data
static void pass_signal(int)
void fprintf_unfiltered(struct ui_file *stream, const char *format,...)
struct cmd_list_element * showlist
PROCESS_GROUP_TYPE process_group
void term_info(char *arg, int from_tty)
static serial_ttystate initial_gdb_ttystate
void child_terminal_init_with_pgrp(int pgrp)
void clear_sigint_trap(void)
struct cmd_list_element * add_info(const char *name, cmd_cfunc_ftype *fun, const char *doc)
static enum auto_boolean interactive_mode
void _initialize_inflow(void)
static struct terminal_info * get_inflow_inferior_data(struct inferior *)
serial_ttystate serial_get_tty_state(struct serial *scb)
void child_terminal_init(struct target_ops *self)
static const char * inferior_thisrun_terminal
void initialize_stdin_serial(void)
int ptid_get_pid(ptid_t ptid)
static struct serial * stdin_serial
static void inflow_inferior_exit(struct inferior *inf)
void child_terminal_ours(struct target_ops *self)
serial_ttystate serial_copy_tty_state(struct serial *scb, serial_ttystate ttystate)
int serial_noflush_set_tty_state(struct serial *scb, serial_ttystate new_ttystate, serial_ttystate old_ttystate)
struct ui_file * gdb_stderr
char * safe_strerror(int)
static void inflow_inferior_data_cleanup(struct inferior *inf, void *arg)
struct inferior * current_inferior(void)
void child_terminal_ours_for_output(struct target_ops *self)
int tcsetpgrp(int fd, pid_t pgid)
void child_terminal_inferior(struct target_ops *self)
PROCESS_GROUP_TYPE inferior_process_group(void)
pid_t create_tty_session(void)
static void(* sigquit_ours)()
void copy_terminal_info(struct inferior *to, struct inferior *from)
enum @89 gdb_has_a_terminal_flag