From 3e6d6928bdb9d823cdd54512990e6951f377713a Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 7 Sep 2012 11:20:07 +0300 Subject: [PATCH] MS-Windows followup for 2012-09-07T01:27:44Z!eggert@cs.ucla.edu, signal-handler cleanup. src/w32proc.c (sigaction): New function, emulates Posix 'sigaction'. src/w32.c (sigemptyset): Empty the set. (sigsetmask, sigmask, sigblock, sigunblock): Remove unused functions. nt/inc/ms-w32.h (struct sigaction): Declare sa_handler __cdecl. Fixes: debbugs:12327 --- nt/ChangeLog | 4 ++++ nt/inc/ms-w32.h | 2 +- src/ChangeLog | 5 +++++ src/w32.c | 26 +------------------------- src/w32proc.c | 23 +++++++++++++++++++++++ 5 files changed, 34 insertions(+), 26 deletions(-) diff --git a/nt/ChangeLog b/nt/ChangeLog index 6367df7d043..7ec327f3029 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog @@ -1,3 +1,7 @@ +2012-09-07 Eli Zaretskii + + * inc/ms-w32.h (struct sigaction): Declare sa_handler __cdecl. + 2012-09-05 Juanma Barranquero * config.nt: Sync with autogen/config.in. diff --git a/nt/inc/ms-w32.h b/nt/inc/ms-w32.h index a18cf23374c..22255843f13 100644 --- a/nt/inc/ms-w32.h +++ b/nt/inc/ms-w32.h @@ -127,7 +127,7 @@ typedef int ssize_t; struct sigaction { int sa_flags; - void (*sa_handler)(int); + void (_CALLBACK_ *sa_handler)(int); sigset_t sa_mask; }; #define SIG_BLOCK 1 diff --git a/src/ChangeLog b/src/ChangeLog index 1ff58232538..068584969f7 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,10 @@ 2012-09-07 Eli Zaretskii + * w32proc.c (sigaction): New function, emulates Posix 'sigaction'. + + * w32.c (sigemptyset): Empty the set. + (sigsetmask, sigmask, sigblock, sigunblock): Remove unused functions. + * alloc.c [ENABLE_CHECKING]: Include signal.h, since we need SIGABRT. 2012-09-07 Dmitry Antipov diff --git a/src/w32.c b/src/w32.c index 4505afc18b3..04f7471577c 100644 --- a/src/w32.c +++ b/src/w32.c @@ -1530,34 +1530,10 @@ is_unc_volume (const char *filename) } /* Routines that are no-ops on NT but are defined to get Emacs to compile. */ - -int -sigsetmask (int signal_mask) -{ - return 0; -} - -int -sigmask (int sig) -{ - return 0; -} - -int -sigblock (int sig) -{ - return 0; -} - -int -sigunblock (int sig) -{ - return 0; -} - int sigemptyset (sigset_t *set) { + *set = 0; return 0; } diff --git a/src/w32proc.c b/src/w32proc.c index f83e81aedff..b9239cbb99a 100644 --- a/src/w32proc.c +++ b/src/w32proc.c @@ -103,6 +103,29 @@ sys_signal (int sig, signal_handler handler) return old; } +/* Emulate sigaction. */ +int +sigaction (int sig, const struct sigaction *act, struct sigaction *oact) +{ + signal_handler old; + + if (sig != SIGCHLD) + { + errno = EINVAL; + return -1; + } + old = sig_handlers[sig]; + if (act) + sig_handlers[sig] = act->sa_handler; + if (oact) + { + oact->sa_handler = old; + oact->sa_flags = 0; + oact->sa_mask = empty_mask; + } + return 0; +} + /* Defined in which conflicts with the local copy */ #define _P_NOWAIT 1 -- 2.39.2