# HG changeset patch # User Eli Zaretskii # Date 1272739113 -10800 # Node ID 05cdbfffcad4ae0e3cefe094994cb12b797248ab # Parent e61225c9e186a769dbb2b1caada5ea7ab4cea7a2# Parent e30aff0bf9d57b8de8e55513f6e35ff2de8e3740 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. diff -r e61225c9e186 -r 05cdbfffcad4 src/ChangeLog --- 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 + 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. diff -r e61225c9e186 -r 05cdbfffcad4 src/s/ms-w32.h --- 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 +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:" diff -r e61225c9e186 -r 05cdbfffcad4 src/sysdep.c --- 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. */ diff -r e61225c9e186 -r 05cdbfffcad4 src/w32.c --- 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;