packaging: Add python3-base dependency
[platform/upstream/gdb.git] / gdb / posix-hdep.c
index 13cddba..e1cd835 100644 (file)
@@ -1,6 +1,6 @@
 /* Host support routines for MinGW, for GDB, the GNU debugger.
 
-   Copyright (C) 2006-2015 Free Software Foundation, Inc.
+   Copyright (C) 2006-2023 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
-#include "event-loop.h"
+#include "gdbsupport/event-loop.h"
+#include "gdbsupport/gdb_select.h"
+#include "inferior.h"
+#include <signal.h>
 
-#include "gdb_select.h"
+/* Wrapper for select.  Nothing special needed on POSIX platforms.  */
 
-/* The strerror() function can return NULL for errno values that are
-   out of range.  Provide a "safe" version that always returns a
-   printable string.  */
+int
+gdb_select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
+           struct timeval *timeout)
+{
+  return select (n, readfds, writefds, exceptfds, timeout);
+}
 
-char *
-safe_strerror (int errnum)
+/* Host-dependent console fputs method.  POSIX platforms always return
+   zero, to use the default C 'fputs'.  */
+int
+gdb_console_fputs (const char *buf, FILE *f)
 {
-  char *msg;
+  return 0;
+}
+
+/* See inferior.h.  */
 
-  msg = strerror (errnum);
-  if (msg == NULL)
-    {
-      static char buf[32];
+tribool
+sharing_input_terminal (int pid)
+{
+  /* Using host-dependent code here is fine, because the
+     child_terminal_foo functions are meant to be used by child/native
+     targets.  */
+#if defined (__linux__) || defined (__sun__)
+  char buf[100];
 
-      xsnprintf (buf, sizeof buf, "(undocumented errno %d)", errnum);
-      msg = buf;
-    }
-  return (msg);
+  xsnprintf (buf, sizeof (buf), "/proc/%d/fd/0", pid);
+  return is_gdb_terminal (buf);
+#else
+  return TRIBOOL_UNKNOWN;
+#endif
 }
 
-/* Wrapper for select.  Nothing special needed on POSIX platforms.  */
+/* Current C-c handler.  */
+static c_c_handler_ftype *current_handler;
 
-int
-gdb_select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
-           struct timeval *timeout)
+/* A wrapper that reinstalls the current signal handler.  */
+static void
+handler_wrapper (int num)
 {
-  return select (n, readfds, writefds, exceptfds, timeout);
+  signal (num, handler_wrapper);
+  if (current_handler != SIG_IGN)
+    current_handler (num);
 }
 
-/* Wrapper for the body of signal handlers.  Nothing special needed on
-   POSIX platforms.  */
+/* See inferior.h.  */
 
-void
-gdb_call_async_signal_handler (struct async_signal_handler *handler,
-                              int immediate_p)
+c_c_handler_ftype *
+install_sigint_handler (c_c_handler_ftype *fn)
 {
-  if (immediate_p)
-    call_async_signal_handler (handler);
-  else
-    mark_async_signal_handler (handler);
+  signal (SIGINT, handler_wrapper);
+  c_c_handler_ftype *result = current_handler;
+  current_handler = fn;
+  return result;
 }