Mercurial > emacs
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. */
