diff src/sysdep.c @ 108200:e30aff0bf9d5

Emulate POSIX_SIGNALS on MS-Windows. w32.c (sigemptyset, sigaddset, sigfillset, sigprocmask): New stubs. sysdep.c (sys_signal) [WINDOWSNT]: #ifdef away. (wait_for_termination) [WINDOWSNT]: Move MS-Windows specific code from non-POSIX_SIGNALS section to POSIX_SIGNALS section. s/ms-w32.h (POSIX_SIGNALS, struct sigaction, SIG_BLOCK) (SIG_SETMASK, SIG_UNBLOCK): Define.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 01 May 2010 21:28:00 +0300
parents 577241984307
children ba928cce64c5
line wrap: on
line diff
--- a/src/sysdep.c	Sat May 01 18:53:35 2010 +0300
+++ b/src/sysdep.c	Sat May 01 21:28:00 2010 +0300
@@ -420,6 +420,10 @@
 	sigpause (SIGEMPTYMASK);
 #else /* not BSD_SYSTEM, and not HPUX version >= 6 */
 #ifdef POSIX_SIGNALS    /* would this work for GNU/Linux as well? */
+#ifdef WINDOWSNT
+      wait (0);
+      break;
+#else /* not WINDOWSNT */
       sigblock (sigmask (SIGCHLD));
       errno = 0;
       if (kill (pid, 0) == -1 && errno == ESRCH)
@@ -429,6 +433,7 @@
 	}
 
       sigsuspend (&empty_mask);
+#endif /* not WINDOWSNT */
 #else /* not POSIX_SIGNALS */
 #ifdef HAVE_SYSV_SIGPAUSE
       sighold (SIGCHLD);
@@ -439,17 +444,12 @@
 	}
       sigpause (SIGCHLD);
 #else /* not HAVE_SYSV_SIGPAUSE */
-#ifdef WINDOWSNT
-      wait (0);
-      break;
-#else /* not WINDOWSNT */
       if (0 > kill (pid, 0))
 	break;
       /* Using sleep instead of pause avoids timing error.
 	 If the inferior dies just before the sleep,
 	 we lose just one second.  */
       sleep (1);
-#endif /* not WINDOWSNT */
 #endif /* not HAVE_SYSV_SIGPAUSE */
 #endif /* not POSIX_SIGNALS */
 #endif /* not BSD_SYSTEM, and not HPUX version >= 6 */
@@ -2105,6 +2105,8 @@
 
 sigset_t empty_mask, full_mask;
 
+#ifndef WINDOWSNT
+
 signal_handler_t
 sys_signal (int signal_number, signal_handler_t action)
 {
@@ -2133,6 +2135,8 @@
   return (old_action.sa_handler);
 }
 
+#endif	/* WINDOWSNT */
+
 #ifndef __GNUC__
 /* If we're compiling with GCC, we don't need this function, since it
    can be written as a macro.  */