1 /* Host support routines for MinGW, for GDB, the GNU debugger. 2 3 Copyright (C) 2006-2023 Free Software Foundation, Inc. 4 5 This file is part of GDB. 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20 #include "defs.h" 21 #include "gdbsupport/event-loop.h" 22 #include "gdbsupport/gdb_select.h" 23 #include "inferior.h" 24 #include <signal.h> 25 26 /* Wrapper for select. Nothing special needed on POSIX platforms. */ 27 28 int 29 gdb_select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, 30 struct timeval *timeout) 31 { 32 return select (n, readfds, writefds, exceptfds, timeout); 33 } 34 35 /* Host-dependent console fputs method. POSIX platforms always return 36 zero, to use the default C 'fputs'. */ 37 int 38 gdb_console_fputs (const char *buf, FILE *f) 39 { 40 return 0; 41 } 42 43 /* See inferior.h. */ 44 45 tribool 46 sharing_input_terminal (int pid) 47 { 48 /* Using host-dependent code here is fine, because the 49 child_terminal_foo functions are meant to be used by child/native 50 targets. */ 51 #if defined (__linux__) || defined (__sun__) 52 char buf[100]; 53 54 xsnprintf (buf, sizeof (buf), "/proc/%d/fd/0", pid); 55 return is_gdb_terminal (buf); 56 #else 57 return TRIBOOL_UNKNOWN; 58 #endif 59 } 60 61 /* Current C-c handler. */ 62 static c_c_handler_ftype *current_handler; 63 64 /* A wrapper that reinstalls the current signal handler. */ 65 static void 66 handler_wrapper (int num) 67 { 68 signal (num, handler_wrapper); 69 if (current_handler != SIG_IGN) 70 current_handler (num); 71 } 72 73 /* See inferior.h. */ 74 75 c_c_handler_ftype * 76 install_sigint_handler (c_c_handler_ftype *fn) 77 { 78 signal (SIGINT, handler_wrapper); 79 c_c_handler_ftype *result = current_handler; 80 current_handler = fn; 81 return result; 82 } 83