diff --git a/newlib/ChangeLog b/newlib/ChangeLog index ea51457e8..55ecc3520 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,10 @@ +2000-09-19 Geoffrey Keating + + * libc/signal/signal.c (__sigtramp_r): ISO C requires + case labels to be integral constant expressions, so + use an if/else tree instead. + (_raise_r): Likewise. + 2000-09-13 Jeff Johnston * libc/machine/v850/setjmp.S: Fixed tab problems caused by diff --git a/newlib/libc/signal/signal.c b/newlib/libc/signal/signal.c index 56c735372..df005f1b9 100644 --- a/newlib/libc/signal/signal.c +++ b/newlib/libc/signal/signal.c @@ -167,7 +167,6 @@ _raise_r (ptr, sig) int sig; { _sig_func_ptr func; - int result = 0; if (sig < 0 || sig >= NSIG) { @@ -178,27 +177,22 @@ _raise_r (ptr, sig) if (ptr->_sig_func == NULL && _init_signal_r (ptr) != 0) return -1; - switch ((_POINTER_INT) ptr->_sig_func[sig]) + func = ptr->_sig_func[sig]; + if (func == SIG_DFL) + return _kill_r (ptr, _getpid_r (ptr), sig); + else if (func == SIG_IGN) + return 0; + else if (func == SIG_ERR) { - case SIG_DFL: - return _kill_r (ptr, _getpid_r (ptr), sig); - - case SIG_IGN: - break; - - case SIG_ERR: ptr->_errno = EINVAL; - result = 1; - break; - - default: - func = ptr->_sig_func[sig]; + return 1; + } + else + { ptr->_sig_func[sig] = SIG_DFL; func (sig); - break; + return 0; } - - return result; } int @@ -215,20 +209,16 @@ __sigtramp_r (ptr, sig) if (ptr->_sig_func == NULL && _init_signal_r (ptr) != 0) return -1; - - switch ((_POINTER_INT) ptr->_sig_func[sig]) + + func = ptr->_sig_func[sig]; + if (func == SIG_DFL) + return 1; + else if (func == SIG_ERR) + return 2; + else if (func == SIG_IGN) + return 3; + else { - case SIG_DFL: - return 1; - - case SIG_ERR: - return 2; - - case SIG_IGN: - return 3; - - default: - func = ptr->_sig_func[sig]; ptr->_sig_func[sig] = SIG_DFL; func (sig); return 0;