signal: correct signal() return value & errno

Signed-off-by: ligd <liguiding1@xiaomi.com>
This commit is contained in:
ligd 2022-11-25 22:59:46 +08:00 committed by Xiang Xiao
parent eef619fc46
commit 092c78d636
1 changed files with 11 additions and 3 deletions

View File

@ -26,6 +26,7 @@
#include <signal.h> #include <signal.h>
#include <assert.h> #include <assert.h>
#include <errno.h>
/**************************************************************************** /****************************************************************************
* Public Functions * Public Functions
@ -59,9 +60,14 @@ _sa_handler_t signal(int signo, _sa_handler_t func)
{ {
struct sigaction act; struct sigaction act;
struct sigaction oact; struct sigaction oact;
int ret; int ret = -EINVAL;
DEBUGASSERT(GOOD_SIGNO(signo) && func != SIG_ERR && func != SIG_HOLD); if (!GOOD_SIGNO(signo))
{
goto err;
}
DEBUGASSERT(func != SIG_ERR && func != SIG_HOLD);
/* Initialize the sigaction structure */ /* Initialize the sigaction structure */
@ -86,7 +92,7 @@ _sa_handler_t signal(int signo, _sa_handler_t func)
{ {
/* Would happen if signo were invalid */ /* Would happen if signo were invalid */
return (_sa_handler_t)SIG_ERR; goto err;
} }
} }
@ -104,5 +110,7 @@ _sa_handler_t signal(int signo, _sa_handler_t func)
return oact.sa_handler; return oact.sa_handler;
} }
err:
set_errno(-ret);
return (_sa_handler_t)SIG_ERR; return (_sa_handler_t)SIG_ERR;
} }