]> Zhao Yanbai Git Server - minix.git/commitdiff
fix _NSIG usage
authorDavid van Moolenbroek <david@minix3.org>
Sat, 28 Nov 2009 13:20:50 +0000 (13:20 +0000)
committerDavid van Moolenbroek <david@minix3.org>
Sat, 28 Nov 2009 13:20:50 +0000 (13:20 +0000)
commands/sh/sh3.c
commands/sh/sh4.c
commands/simple/kill.c
commands/simple/login.c
kernel/system.c
kernel/system/do_kill.c
lib/ansi/raise.c
lib/ansi/signal.c
lib/posix/_sigset.c
test/test37.c

index 80df511d3c6fe77a8ae1e749c1715a1c992a6e89..cdba82b58e817255baddf7ec6ec04fa25725c98f 100644 (file)
@@ -854,7 +854,7 @@ register struct op *t;
        register int  resetsig;
 
        if (t->words[1] == NULL) {
-               for (i=0; i<=_NSIG; i++)
+               for (i=0; i<_NSIG; i++)
                        if (trap[i]) {
                                prn(i);
                                prs(": ");
@@ -894,7 +894,7 @@ char *s;
 {
        register int n;
 
-       if ((n = getn(s)) < 0 || n > _NSIG) {
+       if ((n = getn(s)) < 0 || n >= _NSIG) {
                err("trap: bad signal number");
                n = 0;
        }
index 2603abbd6cd5b797a37899fb96e4943bed754193..4fe04df7341658c77bfdfd44488d5a6a45b0e3c9 100644 (file)
@@ -387,7 +387,7 @@ int quoted;
        }
        *e.linep = 0;
        /* allow trapped signals */
-       for (i=0; i<=_NSIG; i++)
+       for (i=0; i<_NSIG; i++)
                if (ourtrap[i] && signal(i, SIG_IGN) != SIG_IGN)
                        signal(i, SIG_DFL);
        dup2(pf[1], 1);
index 7f25e4eef018992a9b5fbfd477bdd535e3441d19..354287f873d7405828c78b73eb826c5ab77282e7 100644 (file)
@@ -69,7 +69,7 @@ char **argv;
        }
        if (sig < 0) {                                          /* numeric? */
                ul = strtoul(argv[1] + 1, &end, 10);
-               if (end == argv[1] + 1 || *end != 0 || ul > _NSIG) usage();
+               if (end == argv[1] + 1 || *end != 0 || ul >= _NSIG) usage();
                sig = ul;
        }
        argv++;
index c5cf560caf02a9242a22bec500313ba881cf8893..1eed3ae37893ae45547362039af91f5531f5e693 100644 (file)
@@ -445,7 +445,7 @@ char *argv[];
 
        /* Reset signals to default values. */
        sa.sa_handler = SIG_DFL;
-       for (n = 1; n <= _NSIG; ++n) sigaction(n, &sa, NULL);
+       for (n = 1; n < _NSIG; ++n) sigaction(n, &sa, NULL);
 
        /* Execute the user's shell. */
        execve(sh, argx, env);
index e0ee6fbd53705974396c64070dff33ee55ecb604..b949ac2db32878e3690077c4491e8187fe1dce14 100644 (file)
@@ -336,7 +336,7 @@ PUBLIC void send_sig(int proc_nr, int sig_nr)
  *===========================================================================*/
 PUBLIC void cause_sig(proc_nr, sig_nr)
 int proc_nr;                   /* process to be signalled */
-int sig_nr;                    /* signal to be sent, 1 to _NSIG */
+int sig_nr;                    /* signal to be sent */
 {
 /* A system process wants to send a signal to a process.  Examples are:
  *  - HARDWARE wanting to cause a SIGSEGV after a CPU exception
index f5d1d8685d865876c11f6b7bc089d13b1b00f511..118a53773d12f1cbed936726b0c552cab94a7b32 100644 (file)
@@ -32,7 +32,7 @@ message *m_ptr;                       /* pointer to request message */
   proc_nr_e= m_ptr->SIG_ENDPT;
 
   if (!isokendpt(proc_nr_e, &proc_nr)) return(EINVAL);
-  if (sig_nr > _NSIG) return(EINVAL);
+  if (sig_nr >= _NSIG) return(EINVAL);
   if (iskerneln(proc_nr)) return(EPERM);
 
   /* Set pending signal to be processed by the PM. */
index fb444291a7208920e776d039a11c4d5d5334ac14..a7e951c6ed3b43f91bfb1f60fd17cdd70473df28 100644 (file)
@@ -15,7 +15,7 @@ pid_t _getpid(void);
 int
 raise(int sig)
 {
-       if (sig < 0 || sig > _NSIG)
+       if (sig < 0 || sig >= _NSIG)
                return -1;
        return _kill(_getpid(), sig);
 }
index bae9b529079b2818c2b5ff60915f02e91e03153e..ff476e0b9791cdae16e23c547899ebb7b590d7fd 100644 (file)
@@ -11,7 +11,7 @@ sighandler_t disp;            /* signal handler, or SIG_DFL, or SIG_IGN */
 {
   struct sigaction sa, osa;
 
-  if (sig <= 0 || sig > _NSIG || sig == SIGKILL) {
+  if (sig <= 0 || sig >= _NSIG || sig == SIGKILL) {
        errno = EINVAL;
        return(SIG_ERR);
   }
index 91226de5f27a1834db6742758620b837fc0a2108..a1813cf93e7dcdcffcaa508c6078608674f54865 100644 (file)
@@ -2,6 +2,8 @@
 /* System processes use simpler macros with no range error checking (defined in
  * signal.h). The ANSI signal() implementation now also uses the macro
  * versions, which makes hiding of the functions here a historical remains.
+ *
+ * _NSIG is supposed to be the highest signal number plus one.
  */
 #define sigaddset      _sigaddset
 #define sigdelset      _sigdelset
 /* Low bit of signal masks. */
 #define SIGBIT_0       ((sigset_t) 1)
 
-/* Mask of valid signals (0 - _NSIG). */
-#define SIGMASK                (((SIGBIT_0 << _NSIG) << 1) - 1)
+/* Mask of valid signals (0 - (_NSIG-1)). */
+#define SIGMASK                ((SIGBIT_0 << _NSIG) - 1)
 
-#define sigisvalid(signo) ((unsigned) (signo) <= _NSIG)
+#define sigisvalid(signo) ((unsigned) (signo) < _NSIG)
 
 PUBLIC int sigaddset(set, signo)
 sigset_t *set;
index d6e5c6f287b256f7d7288d76f274d4ac8631f627..0193db288627d35b7e50e8991271f0188d7b64a3 100644 (file)
@@ -238,10 +238,8 @@ void test37b()
   if (sigdelset(&s_nokill, SIGKILL) != 0) e(8);
   s_nokill_stop = s_nokill;
   if (sigdelset(&s_nokill_stop, SIGSTOP) != 0) e(8);
-#ifndef _MINIX /* XXX - should unsupported signals be <= _NSIG? */
-  if (SIGSTOP > _NSIG) e(666);
-  if (SIGSTOP <= _NSIG && sigdelset(&s_nokill, SIGSTOP) != 0) e(888);
-#endif /* _MINIX */
+  if (SIGSTOP >= _NSIG) e(666);
+  if (SIGSTOP < _NSIG && sigdelset(&s_nokill, SIGSTOP) != 0) e(888);
 
   /* Now get most of the signals into default state.  Don't change SIGINT
   * or SIGQUIT, so this program can be killed.  SIGKILL is also special.
@@ -427,7 +425,7 @@ void test37c()
   if (signal(SIGINT, catch1) != SIG_DFL) e(11);
 
   /* Verify that SIG_ERR is correctly generated. */
-  if (signal(_NSIG + 1, catch1) != SIG_ERR) e(12);
+  if (signal(_NSIG, catch1) != SIG_ERR) e(12);
   if (signal(0, catch1) != SIG_ERR) e(13);
   if (signal(-1, SIG_DFL) != SIG_ERR) e(14);
 
@@ -987,8 +985,8 @@ void clearsigstate()
   sigset_t sigset_var;
 
   /* Clear the signal state. */
-  for (i = 1; i <= _NSIG; i++) signal(i, SIG_IGN);
-  for (i = 1; i <= _NSIG; i++) signal(i, SIG_DFL);
+  for (i = 1; i < _NSIG; i++) signal(i, SIG_IGN);
+  for (i = 1; i < _NSIG; i++) signal(i, SIG_DFL);
   sigfillset(&sigset_var);
   sigprocmask(SIG_UNBLOCK, &sigset_var, (sigset_t *)NULL);
 }