]> code.delx.au - gnu-emacs/blobdiff - src/syssignal.h
(SYSTEM_TYPE): Use berkeley-unix.
[gnu-emacs] / src / syssignal.h
index 81d52c8f758a3251fda851cc636972ab7c4c7206..486f9efd623febc3ac2add8b476f2f1b062d3bbc 100644 (file)
@@ -24,17 +24,24 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #define SIGFULLMASK (full_mask)
 extern sigset_t empty_mask, full_mask, temp_mask;
 
-#define sigmask(SIG) \
-(sigemptyset (&temp_mask), sigaddset (&temp_mask, SIG), temp_mask)
-
-/* May need a local mask.  There could be problems if code using any
-   of the 3 macros below could be reentered due to a signal occurring.
-   This can't happen in Emacs 18.57, so we don't worry. - DJB
-   These macros also require GCC. */
-#define sigpause(SIG)    ({ sigset_t _mask; sys_sigpause(SIG); })
-#define sigblock(SIG)    ({ sigset_t _mask; sys_sigblock(SIG); })
-#define sigunblock(SIG)  ({ sigset_t _mask; sys_sigunblock(SIG); })
-#define sigsetmask(SIG)  ({ sigset_t _mask; sys_sigsetmask(SIG); })
+/* POSIX pretty much destroys any possibility of writing sigmask as a
+   macro in standard C.  */
+#ifdef __GNUC__
+#define sigmask(SIG)                           \
+  ({                                           \
+    sigset_t _mask;                            \
+    sigemptyset (&_mask);                      \
+    sigaddset (&_mask, SIG);                   \
+    _mask;                                     \
+  })
+#else
+#define sigmask(SIG) (sys_sigmask (SIG))
+#endif
+
+#define sigpause(SIG)    sys_sigpause(SIG)
+#define sigblock(SIG)    sys_sigblock(SIG)
+#define sigunblock(SIG)  sys_sigunblock(SIG)
+#define sigsetmask(SIG)  sys_sigsetmask(SIG)
 #define sighold(SIG)     ONLY_USED_IN_BSD_4_1
 #define sigrelse(SIG)    ONLY_USED_IN_BSD_4_1
 
@@ -58,13 +65,24 @@ sigset_t sys_sigsetmask (sigset_t new_mask);
 #endif
 
 #ifndef SIGEMPTYMASK
-#define SIGEMPTYMASK 0
+#define SIGEMPTYMASK (0)
+#endif
+
+#ifndef SIGFULLMASK
+#define SIGFULLMASK (0xffffffff)
 #endif
 
 #ifndef sigmask
 #define sigmask(no) (1L << ((no) - 1))
 #endif
 
+#ifndef sigunblock
+#define sigunblock(SIG) \
+{ SIGMASKTYPE omask = sigblock (SIGFULLMASK); sigsetmask (omask & ~SIG); }
+#endif
+
+/* It would be very nice if we could somehow clean up all this trash.  */
+
 #ifndef BSD4_1
 #define sigfree() sigsetmask (SIGEMPTYMASK)
 #define sigholdx(sig) sigsetmask (sigmask (sig))
@@ -91,7 +109,6 @@ sigset_t sys_sigsetmask (sigset_t new_mask);
 
 /* Define SIGCHLD as an alias for SIGCLD.  There are many conditionals
    testing SIGCHLD.  */
-
 #ifndef VMS
 #ifdef SIGCLD
 #ifndef SIGCHLD