]> git.eshelyaron.com Git - emacs.git/commitdiff
MS-Windows followup for 2012-09-07T01:27:44Z!eggert@cs.ucla.edu, signal-handler cleanup.
authorEli Zaretskii <eliz@gnu.org>
Fri, 7 Sep 2012 08:20:07 +0000 (11:20 +0300)
committerEli Zaretskii <eliz@gnu.org>
Fri, 7 Sep 2012 08:20:07 +0000 (11:20 +0300)
 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
nt/inc/ms-w32.h
src/ChangeLog
src/w32.c
src/w32proc.c

index 6367df7d0436fca0cafbcf4d8f762aff67c22fba..7ec327f3029de67a8500822399beaaff98fc1c35 100644 (file)
@@ -1,3 +1,7 @@
+2012-09-07  Eli Zaretskii  <eliz@gnu.org>
+
+       * inc/ms-w32.h (struct sigaction): Declare sa_handler __cdecl.
+
 2012-09-05  Juanma Barranquero  <lekktu@gmail.com>
 
        * config.nt: Sync with autogen/config.in.
index a18cf23374c69f1664462ef34d32ce56c139f79d..22255843f13c3d5b066b62b31132a1cbb29eabf1 100644 (file)
@@ -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
index 1ff5823253876c6f62e29d33f63a05203a2b59b1..068584969f7f6cc5bb9a1f94f6a2dad3ab7bedc9 100644 (file)
@@ -1,5 +1,10 @@
 2012-09-07  Eli Zaretskii  <eliz@gnu.org>
 
+       * 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  <dmantipov@yandex.ru>
index 4505afc18b3725f4f4019e6e2f5e6ebc81b6699d..04f7471577c46b66edc8b0fdc879ef199201b924 100644 (file)
--- 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;
 }
 
index f83e81aedff29cf645b2a08db4a6e4b199ff1c73..b9239cbb99a6fb56b3f956c6d3e8722f71b17c4b 100644 (file)
@@ -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 <process.h> which conflicts with the local copy */
 #define _P_NOWAIT 1