changeset 12535:8c827f8e5f04

signal, spawn: use link warnings These modules depended on link-warning, then didn't use it. * lib/signal.in.h (sigset_t): Make unconditional. (sigismember, sigemptyset, sigaddset, sigdelset, sigfillset) (sigpending, sigprocmask, sigaction): Add link warnings. * lib/spawn.in.h (posix_spawn, posix_spawnp, posix_spawnattr_init) (posix_spawnattr_destroy, posix_spawnattr_getsigdefault) (posix_spawnattr_setsigdefault, posix_spawnattr_getsigmask) (posix_spawnattr_setsigmask, posix_spawnattr_getflags) (posix_spawnattr_setflags, posix_spawnattr_getpgroup) (posix_spawnattr_setpgroup, posix_spawnattr_getschedpolicy) (posix_spawnattr_setschedpolicy, posix_spawnattr_getschedparam) (posix_spawnattr_setschedparam, posix_spawn_file_actions_init) (posix_spawn_file_actions_destroy) (posix_spawn_file_actions_addopen) (posix_spawn_file_actions_addclose) (posix_spawwn_file_actions_adddup2): Likewise. * m4/signal_h.m4 (gl_SIGNAL_H): Guarantee uid_t. * tests/test-signal.c (main): Enhance test. Signed-off-by: Eric Blake <ebb9@byu.net>
author Eric Blake <ebb9@byu.net>
date Wed, 30 Dec 2009 14:42:41 -0700
parents df55cbe78453
children cd64e80f94e4
files ChangeLog lib/signal.in.h lib/spawn.in.h m4/signal_h.m4 tests/test-signal.c
diffstat 5 files changed, 320 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,24 @@
+2009-12-31  Eric Blake  <ebb9@byu.net>
+
+	signal, spawn: use link warnings
+	* lib/signal.in.h (sigset_t): Make unconditional.
+	(sigismember, sigemptyset, sigaddset, sigdelset, sigfillset)
+	(sigpending, sigprocmask, sigaction): Add link warnings.
+	* lib/spawn.in.h (posix_spawn, posix_spawnp, posix_spawnattr_init)
+	(posix_spawnattr_destroy, posix_spawnattr_getsigdefault)
+	(posix_spawnattr_setsigdefault, posix_spawnattr_getsigmask)
+	(posix_spawnattr_setsigmask, posix_spawnattr_getflags)
+	(posix_spawnattr_setflags, posix_spawnattr_getpgroup)
+	(posix_spawnattr_setpgroup, posix_spawnattr_getschedpolicy)
+	(posix_spawnattr_setschedpolicy, posix_spawnattr_getschedparam)
+	(posix_spawnattr_setschedparam, posix_spawn_file_actions_init)
+	(posix_spawn_file_actions_destroy)
+	(posix_spawn_file_actions_addopen)
+	(posix_spawn_file_actions_addclose)
+	(posix_spawwn_file_actions_adddup2): Likewise.
+	* m4/signal_h.m4 (gl_SIGNAL_H): Guarantee uid_t.
+	* tests/test-signal.c (main): Enhance test.
+
 2009-12-31  Eric Blake  <ebb9@byu.net>
 
 	spawn: improve wrapper support
--- a/lib/signal.in.h
+++ b/lib/signal.in.h
@@ -52,6 +52,11 @@
 # define sig_atomic_t rpl_sig_atomic_t
 #endif
 
+/* A set or mask of signals.  */
+#if !@HAVE_SIGSET_T@
+typedef unsigned int sigset_t;
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -68,21 +73,17 @@
 #endif
 
 
-#if !@HAVE_POSIX_SIGNALBLOCKING@
+#if @GNULIB_SIGPROCMASK@
+# if !@HAVE_POSIX_SIGNALBLOCKING@
 
 /* Maximum signal number + 1.  */
-# ifndef NSIG
-#  define NSIG 32
-# endif
+#  ifndef NSIG
+#   define NSIG 32
+#  endif
 
 /* This code supports only 32 signals.  */
 typedef int verify_NSIG_constraint[2 * (NSIG <= 32) - 1];
 
-/* A set or mask of signals.  */
-# if !@HAVE_SIGSET_T@
-typedef unsigned int sigset_t;
-# endif
-
 /* Test whether a given signal is contained in a signal set.  */
 extern int sigismember (const sigset_t *set, int sig) _GL_ARG_NONNULL ((1));
 
@@ -106,31 +107,69 @@
    combining it with *SET as indicated in OPERATION.
    In this implementation, you are not allowed to change a signal handler
    while the signal is blocked.  */
-# define SIG_BLOCK   0  /* blocked_set = blocked_set | *set; */
-# define SIG_SETMASK 1  /* blocked_set = *set; */
-# define SIG_UNBLOCK 2  /* blocked_set = blocked_set & ~*set; */
+#  define SIG_BLOCK   0  /* blocked_set = blocked_set | *set; */
+#  define SIG_SETMASK 1  /* blocked_set = *set; */
+#  define SIG_UNBLOCK 2  /* blocked_set = blocked_set & ~*set; */
 extern int sigprocmask (int operation, const sigset_t *set, sigset_t *old_set);
 
-# define signal rpl_signal
+#  define signal rpl_signal
 /* Install the handler FUNC for signal SIG, and return the previous
    handler.  */
 extern void (*signal (int sig, void (*func) (int))) (int);
 
-# if GNULIB_defined_SIGPIPE
+#  if GNULIB_defined_SIGPIPE
 
 /* Raise signal SIG.  */
-#  undef raise
-#  define raise rpl_raise
+#   undef raise
+#   define raise rpl_raise
 extern int raise (int sig);
 
-# endif
+#  endif
 
-#endif /* !@HAVE_POSIX_SIGNALBLOCKING@ */
+# endif /* !@HAVE_POSIX_SIGNALBLOCKING@ */
+#elif defined GNULIB_POSIXCHECK
+# undef sigaddset
+# define sigaddset(s,n) \
+  (GL_LINK_WARNING ("sigaddset is unportable - "        \
+                    "use gnulib module sigprocmask for portability"),   \
+   sigaddset (s, n))
+# undef sigdelset
+# define sigdelset(s,n) \
+  (GL_LINK_WARNING ("sigdelset is unportable - "        \
+                    "use gnulib module sigprocmask for portability"),   \
+   sigdelset (s, n))
+# undef sigemptyset
+# define sigemptyset(s) \
+  (GL_LINK_WARNING ("sigemptyset is unportable - "        \
+                    "use gnulib module sigprocmask for portability"),   \
+   sigemptyset (s))
+# undef sigfillset
+# define sigfillset(s) \
+  (GL_LINK_WARNING ("sigfillset is unportable - "        \
+                    "use gnulib module sigprocmask for portability"),   \
+   sigfillset (s))
+# undef sigismember
+# define sigismember(s,n) \
+  (GL_LINK_WARNING ("sigismember is unportable - "        \
+                    "use gnulib module sigprocmask for portability"),   \
+   sigismember (s, n))
+# undef sigpending
+# define sigpending(s) \
+  (GL_LINK_WARNING ("sigpending is unportable - "        \
+                    "use gnulib module sigprocmask for portability"),   \
+   sigpending (s))
+# undef sigprocmask
+# define sigprocmask(h,s,o)                               \
+  (GL_LINK_WARNING ("sigprocmask is unportable - "        \
+                    "use gnulib module sigprocmask for portability"),   \
+   sigprocmask (h, s, o))
+#endif /* @GNULIB_SIGPROCMASK@ */
 
 
-#if !@HAVE_SIGACTION@
+#if @GNULIB_SIGACTION@
+# if !@HAVE_SIGACTION@
 
-# if !@HAVE_SIGINFO_T@
+#  if !@HAVE_SIGINFO_T@
 /* Present to allow compilation, but unsupported by gnulib.  */
 union sigval
 {
@@ -152,7 +191,7 @@
   union sigval si_value;
 };
 typedef struct siginfo_t siginfo_t;
-# endif /* !@HAVE_SIGINFO_T@ */
+#  endif /* !@HAVE_SIGINFO_T@ */
 
 /* We assume that platforms which lack the sigaction() function also lack
    the 'struct sigaction' type, and vice versa.  */
@@ -172,22 +211,28 @@
   /* Not all POSIX flags are supported.  */
   int sa_flags;
 };
-# define sa_handler _sa_func._sa_handler
-# define sa_sigaction _sa_func._sa_sigaction
+#  define sa_handler _sa_func._sa_handler
+#  define sa_sigaction _sa_func._sa_sigaction
 /* Unsupported flags are not present.  */
-# define SA_RESETHAND 1
-# define SA_NODEFER 2
-# define SA_RESTART 4
+#  define SA_RESETHAND 1
+#  define SA_NODEFER 2
+#  define SA_RESTART 4
 
 extern int sigaction (int, const struct sigaction *restrict,
                       struct sigaction *restrict);
 
-#elif !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+# elif !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+
+#  define sa_sigaction sa_handler
 
-# define sa_sigaction sa_handler
-
-#endif /* !@HAVE_SIGACTION@, !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ */
-
+# endif /* !@HAVE_SIGACTION@, !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ */
+#elif defined GNULIB_POSIXCHECK
+# undef sigaction
+# define sigaction(s,a,o)                               \
+  (GL_LINK_WARNING ("sigaction is unportable - "        \
+                    "use gnulib module sigaction for portability"),   \
+   sigaction (s, a, o))
+#endif
 
 /* Some systems don't have SA_NODEFER.  */
 #ifndef SA_NODEFER
--- a/lib/spawn.in.h
+++ b/lib/spawn.in.h
@@ -156,6 +156,12 @@
                         char *const envp[_Restrict_arr_])
      _GL_ARG_NONNULL ((2, 5, 6));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn
+# define posix_spawn(a,b,c,d,e,f)                   \
+  (GL_LINK_WARNING ("posix_spawn is unportable - "        \
+                    "use gnulib module posix_spawn for portability"),   \
+   posix_spawn (a, b, c, d, e, f))
 #endif
 
 #if @GNULIB_POSIX_SPAWNP@
@@ -173,6 +179,12 @@
                          char *const argv[], char *const envp[])
      _GL_ARG_NONNULL ((2, 5, 6));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnp
+# define posix_spawnp(a,b,c,d,e,f)                   \
+  (GL_LINK_WARNING ("posix_spawnp is unportable - "        \
+                    "use gnulib module posix_spawnp for portability"),   \
+   posix_spawnp (a, b, c, d, e, f))
 #endif
 
 
@@ -185,6 +197,12 @@
 extern int posix_spawnattr_init (posix_spawnattr_t *__attr)
      __THROW _GL_ARG_NONNULL ((1));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_init
+# define posix_spawnattr_init(a)                   \
+  (GL_LINK_WARNING ("posix_spawnattr_init is unportable - "        \
+                    "use gnulib module posix_spawnattr_init for portability"), \
+   posix_spawnattr_init (a))
 #endif
 
 #if @GNULIB_POSIX_SPAWNATTR_DESTROY@
@@ -196,6 +214,12 @@
 extern int posix_spawnattr_destroy (posix_spawnattr_t *__attr)
      __THROW _GL_ARG_NONNULL ((1));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_destroy
+# define posix_spawnattr_destroy(a)                   \
+  (GL_LINK_WARNING ("posix_spawnattr_destroy is unportable - "        \
+                    "use gnulib module posix_spawnattr_destroy for portability"), \
+   posix_spawnattr_destroy (a))
 #endif
 
 #if @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@
@@ -209,6 +233,12 @@
                                           sigset_t *_Restrict_ __sigdefault)
      __THROW _GL_ARG_NONNULL ((1, 2));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getsigdefault
+# define posix_spawnattr_getsigdefault(a, b)                         \
+  (GL_LINK_WARNING ("posix_spawnattr_getsigdefault is unportable - "        \
+                    "use gnulib module posix_spawnattr_getsigdefault for portability"), \
+   posix_spawnattr_getsigdefault (a, b))
 #endif
 
 #if @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@
@@ -221,6 +251,12 @@
                                           const sigset_t *_Restrict_ __sigdefault)
      __THROW _GL_ARG_NONNULL ((1, 2));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setsigdefault
+# define posix_spawnattr_setsigdefault(a, b)                         \
+  (GL_LINK_WARNING ("posix_spawnattr_setsigdefault is unportable - "        \
+                    "use gnulib module posix_spawnattr_setsigdefault for portability"), \
+   posix_spawnattr_setsigdefault (a, b))
 #endif
 
 #if @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@
@@ -233,6 +269,12 @@
                                        sigset_t *_Restrict_ __sigmask)
      __THROW _GL_ARG_NONNULL ((1, 2));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getsigmask
+# define posix_spawnattr_getsigmask(a, b)                         \
+  (GL_LINK_WARNING ("posix_spawnattr_getsigmask is unportable - "        \
+                    "use gnulib module posix_spawnattr_getsigmask for portability"), \
+   posix_spawnattr_getsigmask (a, b))
 #endif
 
 #if @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@
@@ -245,6 +287,12 @@
                                        const sigset_t *_Restrict_ __sigmask)
      __THROW _GL_ARG_NONNULL ((1, 2));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setsigmask
+# define posix_spawnattr_setsigmask(a, b)                         \
+  (GL_LINK_WARNING ("posix_spawnattr_setsigmask is unportable - "        \
+                    "use gnulib module posix_spawnattr_setsigmask for portability"), \
+   posix_spawnattr_setsigmask (a, b))
 #endif
 
 #if @GNULIB_POSIX_SPAWNATTR_GETFLAGS@
@@ -257,6 +305,12 @@
                                      short int *_Restrict_ __flags)
      __THROW _GL_ARG_NONNULL ((1, 2));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getsigdefault
+# define posix_spawnattr_getsigdefault(a, b)                         \
+  (GL_LINK_WARNING ("posix_spawnattr_getsigdefault is unportable - "        \
+                    "use gnulib module posix_spawnattr_getsigdefault for portability"), \
+   posix_spawnattr_getsigdefault (a, b))
 #endif
 
 #if @GNULIB_POSIX_SPAWNATTR_SETFLAGS@
@@ -269,6 +323,12 @@
                                      short int __flags)
      __THROW _GL_ARG_NONNULL ((1));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getflags
+# define posix_spawnattr_getflags(a, b)                         \
+  (GL_LINK_WARNING ("posix_spawnattr_getflags is unportable - "        \
+                    "use gnulib module posix_spawnattr_getflags for portability"), \
+   posix_spawnattr_getflags (a, b))
 #endif
 
 #if @GNULIB_POSIX_SPAWNATTR_GETPGROUP@
@@ -281,6 +341,12 @@
                                       pid_t *_Restrict_ __pgroup)
      __THROW _GL_ARG_NONNULL ((1, 2));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setflags
+# define posix_spawnattr_setflags(a, b)                         \
+  (GL_LINK_WARNING ("posix_spawnattr_setflags is unportable - "        \
+                    "use gnulib module posix_spawnattr_setflags for portability"), \
+   posix_spawnattr_setflags (a, b))
 #endif
 
 #if @GNULIB_POSIX_SPAWNATTR_SETPGROUP@
@@ -305,6 +371,12 @@
                                            int *_Restrict_ __schedpolicy)
      __THROW _GL_ARG_NONNULL ((1, 2));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getschedpolicy
+# define posix_spawnattr_getschedpolicy(a, b)                         \
+  (GL_LINK_WARNING ("posix_spawnattr_getschedpolicy is unportable - "        \
+                    "use gnulib module posix_spawnattr_getschedpolicy for portability"), \
+   posix_spawnattr_getschedpolicy (a, b))
 #endif
 
 #if @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@
@@ -317,6 +389,12 @@
                                            int __schedpolicy)
      __THROW _GL_ARG_NONNULL ((1));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setschedpolicy
+# define posix_spawnattr_setschedpolicy(a, b)                         \
+  (GL_LINK_WARNING ("posix_spawnattr_setschedpolicy is unportable - "        \
+                    "use gnulib module posix_spawnattr_setschedpolicy for portability"), \
+   posix_spawnattr_setschedpolicy (a, b))
 #endif
 
 #if @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@
@@ -329,6 +407,12 @@
                                           struct sched_param *_Restrict_ __schedparam)
      __THROW _GL_ARG_NONNULL ((1, 2));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_getschedparam
+# define posix_spawnattr_getschedparam(a, b)                         \
+  (GL_LINK_WARNING ("posix_spawnattr_getschedparam is unportable - "        \
+                    "use gnulib module posix_spawnattr_getschedparam for portability"), \
+   posix_spawnattr_getschedparam (a, b))
 #endif
 
 #if @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@
@@ -341,6 +425,12 @@
                                           const struct sched_param *_Restrict_ __schedparam)
      __THROW _GL_ARG_NONNULL ((1, 2));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawnattr_setschedparam
+# define posix_spawnattr_setschedparam(a, b)                         \
+  (GL_LINK_WARNING ("posix_spawnattr_setschedparam is unportable - "        \
+                    "use gnulib module posix_spawnattr_setschedparam for portability"), \
+   posix_spawnattr_setschedparam (a, b))
 #endif
 
 
@@ -353,6 +443,12 @@
 extern int posix_spawn_file_actions_init (posix_spawn_file_actions_t *__file_actions)
      __THROW _GL_ARG_NONNULL ((1));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_init
+# define posix_spawn_file_actions_init(a)                         \
+  (GL_LINK_WARNING ("posix_spawn_file_actions_init is unportable - "        \
+                    "use gnulib module posix_spawn_file_actions_init for portability"), \
+   posix_spawn_file_actions_init (a))
 #endif
 
 #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@
@@ -364,6 +460,12 @@
 extern int posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *__file_actions)
      __THROW _GL_ARG_NONNULL ((1));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_destroy
+# define posix_spawn_file_actions_destroy(a)                         \
+  (GL_LINK_WARNING ("posix_spawn_file_actions_destroy is unportable - "        \
+                    "use gnulib module posix_spawn_file_actions_destroy for portability"), \
+   posix_spawn_file_actions_destroy (a))
 #endif
 
 #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@
@@ -379,6 +481,12 @@
                                              int __oflag, mode_t __mode)
      __THROW _GL_ARG_NONNULL ((1, 3));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_addopen
+# define posix_spawn_file_actions_addopen(a, b, c, d, e)                     \
+  (GL_LINK_WARNING ("posix_spawn_file_actions_addopen is unportable - "        \
+                    "use gnulib module posix_spawn_file_actions_addopen for portability"), \
+   posix_spawn_file_actions_addopen (a, b, c, d, e))
 #endif
 
 #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@
@@ -392,6 +500,12 @@
                                               int __fd)
      __THROW _GL_ARG_NONNULL ((1));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_addclose
+# define posix_spawn_file_actions_addclose(a,b)                          \
+  (GL_LINK_WARNING ("posix_spawn_file_actions_addclose is unportable - "        \
+                    "use gnulib module posix_spawn_file_actions_addclose for portability"), \
+   posix_spawn_file_actions_addclose (a, b))
 #endif
 
 #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@
@@ -405,6 +519,12 @@
                                              int __fd, int __newfd)
      __THROW _GL_ARG_NONNULL ((1));
 # endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_spawn_file_actions_adddup2
+# define posix_spawn_file_actions_adddup2(a,b,c)                         \
+  (GL_LINK_WARNING ("posix_spawn_file_actions_adddup2 is unportable - "        \
+                    "use gnulib module posix_spawn_file_actions_adddup2 for portability"), \
+   posix_spawn_file_actions_adddup2 (a, b, c))
 #endif
 
 
--- a/m4/signal_h.m4
+++ b/m4/signal_h.m4
@@ -1,4 +1,4 @@
-# signal_h.m4 serial 7
+# signal_h.m4 serial 8
 dnl Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -14,6 +14,7 @@
     [HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0], [[
 #include <signal.h>
     ]])
+  AC_REQUIRE([AC_TYPE_UID_T])
 ])
 
 AC_DEFUN([gl_SIGNAL_MODULE_INDICATOR],
--- a/tests/test-signal.c
+++ b/tests/test-signal.c
@@ -20,10 +20,109 @@
 
 #include <signal.h>
 
-volatile sig_atomic_t s;
+/* Check for required types.  */
+struct
+{
+  size_t a;
+  uid_t b;
+  volatile sig_atomic_t c;
+  sigset_t d;
+  pid_t e;
+#if 0
+  /* Not guaranteed by gnulib.  */
+  pthread_t f;
+  struct timespec g;
+#endif
+} s;
 
 int
 main (void)
 {
-  return s;
+  switch (0)
+    {
+      /* The following are guaranteed by C.  */
+    case 0:
+    case SIGABRT:
+    case SIGFPE:
+    case SIGILL:
+    case SIGINT:
+    case SIGSEGV:
+    case SIGTERM:
+      /* The following is guaranteed by gnulib.  */
+#if GNULIB_SIGPIPE || defined SIGPIPE
+    case SIGPIPE:
+#endif
+      /* Ensure no conflict with other standardized names.  */
+#ifdef SIGALRM
+    case SIGALRM:
+#endif
+#ifdef SIGBUS
+    case SIGBUS:
+#endif
+#ifdef SIGCHLD
+    case SIGCHLD:
+#endif
+#ifdef SIGCONT
+    case SIGCONT:
+#endif
+#ifdef SIGHUP
+    case SIGHUP:
+#endif
+#ifdef SIGKILL
+    case SIGKILL:
+#endif
+#ifdef SIGQUIT
+    case SIGQUIT:
+#endif
+#ifdef SIGSTOP
+    case SIGSTOP:
+#endif
+#ifdef SIGTSTP
+    case SIGTSTP:
+#endif
+#ifdef SIGTTIN
+    case SIGTTIN:
+#endif
+#ifdef SIGTTOU
+    case SIGTTOU:
+#endif
+#ifdef SIGUSR1
+    case SIGUSR1:
+#endif
+#ifdef SIGUSR2
+    case SIGUSR2:
+#endif
+#ifdef SIGSYS
+    case SIGSYS:
+#endif
+#ifdef SIGTRAP
+    case SIGTRAP:
+#endif
+#ifdef SIGURG
+    case SIGURG:
+#endif
+#ifdef SIGVTALRM
+    case SIGVTALRM:
+#endif
+#ifdef SIGXCPU
+    case SIGXCPU:
+#endif
+#ifdef SIGXFSZ
+    case SIGXFSZ:
+#endif
+#ifdef SIG
+    case SIG:
+#endif
+      /* SIGRTMIN and SIGRTMAX need not be compile-time constants.  */
+#if 0
+# ifdef SIGRTMIN
+    case SIGRTMIN:
+# endif
+# ifdef SIGRTMAX
+    case SIGRTMAX:
+# endif
+#endif
+      ;
+    }
+  return s.a + s.b + s.c + s.e;
 }