Mercurial > emacs
changeset 108202:05cdbfffcad4
Emulate POSIX_SIGNALS on MS-Windows.
s/ms-w32.h (POSIX_SIGNALS, struct sigaction, SIG_BLOCK)
(SIG_SETMASK, SIG_UNBLOCK): Define.
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.
w32.c (sigemptyset, sigaddset, sigfillset, sigprocmask): New stubs.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Sat, 01 May 2010 21:38:33 +0300 |
parents | e61225c9e186 (current diff) e30aff0bf9d5 (diff) |
children | 877cada981cc |
files | src/ChangeLog |
diffstat | 4 files changed, 58 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Sat May 01 21:11:20 2010 +0300 +++ b/src/ChangeLog Sat May 01 21:38:33 2010 +0300 @@ -1,9 +1,20 @@ 2010-05-01 Eli Zaretskii <eliz@gnu.org> + Emulate POSIX_SIGNALS on MS-Windows. + + * s/ms-w32.h (POSIX_SIGNALS, struct sigaction, SIG_BLOCK) + (SIG_SETMASK, SIG_UNBLOCK): Define. + + * 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. + + * w32.c (sigemptyset, sigaddset, sigfillset, sigprocmask): New + stubs. + Miscellaneous fixes of bidi display. - * xdisp.c (find_row_end): New function, refactored from - display_line. + * xdisp.c (find_row_end): New function, refactored from display_line. (display_line): Use it. (extend_face_to_end_of_line): In almost-filled rows, extend only if the row is R2L and not continued.
--- a/src/s/ms-w32.h Sat May 01 21:11:20 2010 +0300 +++ b/src/s/ms-w32.h Sat May 01 21:38:33 2010 +0300 @@ -123,6 +123,18 @@ #define IS_DIRECTORY_SEP(_c_) ((_c_) == '/' || (_c_) == '\\') #define IS_ANY_SEP(_c_) (IS_DIRECTORY_SEP (_c_) || IS_DEVICE_SEP (_c_)) +/* Do we have POSIX signals? (We don't, but we don't care, either.) */ +#define POSIX_SIGNALS 1 +#include <sys/types.h> +struct sigaction { + int sa_flags; + void (*sa_handler)(int); + sigset_t sa_mask; +}; +#define SIG_BLOCK 1 +#define SIG_SETMASK 2 +#define SIG_UNBLOCK 3 + /* The null device on Windows NT. */ #define NULL_DEVICE "NUL:"
--- a/src/sysdep.c Sat May 01 21:11:20 2010 +0300 +++ b/src/sysdep.c Sat May 01 21:38:33 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. */
--- a/src/w32.c Sat May 01 21:11:20 2010 +0300 +++ b/src/w32.c Sat May 01 21:38:33 2010 +0300 @@ -1482,6 +1482,30 @@ } int +sigemptyset (sigset_t *set) +{ + return 0; +} + +int +sigaddset (sigset_t *set, int signo) +{ + return 0; +} + +int +sigfillset (sigset_t *set) +{ + return 0; +} + +int +sigprocmask (int how, const sigset_t *set, sigset_t *oset) +{ + return 0; +} + +int setpgrp (int pid, int gid) { return 0;