#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
#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))
/* Define SIGCHLD as an alias for SIGCLD. There are many conditionals
testing SIGCHLD. */
-
#ifndef VMS
#ifdef SIGCLD
#ifndef SIGCHLD