posix: signal: implement sigismember
Implementation and ztest for sigismember. Signed-off-by: Yong Cong Sin <ycsin@meta.com>
This commit is contained in:
parent
88cd494430
commit
ff4b81e5e5
@ -380,7 +380,7 @@ required for error and event handling.
|
||||
sigdelset(),yes
|
||||
sigemptyset(),yes
|
||||
sigfillset(),yes
|
||||
igismember(),
|
||||
sigismember(),yes
|
||||
signal(),
|
||||
sigpending(),
|
||||
sigprocmask(),
|
||||
|
||||
@ -59,6 +59,7 @@ int sigemptyset(sigset_t *set);
|
||||
int sigfillset(sigset_t *set);
|
||||
int sigaddset(sigset_t *set, int signo);
|
||||
int sigdelset(sigset_t *set, int signo);
|
||||
int sigismember(const sigset_t *set, int signo);
|
||||
#endif /* CONFIG_POSIX_SIGNAL */
|
||||
|
||||
#ifndef SIGEV_NONE
|
||||
|
||||
@ -58,3 +58,13 @@ int sigdelset(sigset_t *set, int signo)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sigismember(const sigset_t *set, int signo)
|
||||
{
|
||||
if (!signo_valid(signo)) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 1 & (set->sig[SIGNO_WORD_IDX(signo)] >> SIGNO_WORD_BIT(signo));
|
||||
}
|
||||
|
||||
@ -157,3 +157,38 @@ ZTEST(posix_apis, test_signal_delset)
|
||||
ARRAY_SIZE(set.sig) - 1, set.sig[i], target.sig[i]);
|
||||
}
|
||||
}
|
||||
|
||||
ZTEST(posix_apis, test_signal_ismember_oor)
|
||||
{
|
||||
sigset_t set = {0};
|
||||
|
||||
zassert_equal(sigismember(&set, -1), -1, "rc should be -1");
|
||||
zassert_equal(errno, EINVAL, "errno should be %s", "EINVAL");
|
||||
|
||||
zassert_equal(sigismember(&set, 0), -1, "rc should be -1");
|
||||
zassert_equal(errno, EINVAL, "errno should be %s", "EINVAL");
|
||||
|
||||
zassert_equal(sigismember(&set, _NSIG), -1, "rc should be -1");
|
||||
zassert_equal(errno, EINVAL, "errno should be %s", "EINVAL");
|
||||
}
|
||||
|
||||
ZTEST(posix_apis, test_signal_ismember)
|
||||
{
|
||||
sigset_t set = (sigset_t){0};
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
set.sig[0] = BIT(SIGHUP) | BIT(SIGSYS) | BIT(SIGRTMIN);
|
||||
#else /* 32BIT */
|
||||
set.sig[0] = BIT(SIGHUP) | BIT(SIGSYS);
|
||||
set.sig[1] = BIT((SIGRTMIN)-BITS_PER_LONG);
|
||||
#endif
|
||||
WRITE_BIT(set.sig[SIGRTMAX / BITS_PER_LONG], SIGRTMAX % BITS_PER_LONG, 1);
|
||||
|
||||
zassert_equal(sigismember(&set, SIGHUP), 1, "%s expected to be member", "SIGHUP");
|
||||
zassert_equal(sigismember(&set, SIGSYS), 1, "%s expected to be member", "SIGSYS");
|
||||
zassert_equal(sigismember(&set, SIGRTMIN), 1, "%s expected to be member", "SIGRTMIN");
|
||||
zassert_equal(sigismember(&set, SIGRTMAX), 1, "%s expected to be member", "SIGRTMAX");
|
||||
|
||||
zassert_equal(sigismember(&set, SIGKILL), 0, "%s not expected to be member", "SIGKILL");
|
||||
zassert_equal(sigismember(&set, SIGTERM), 0, "%s not expected to be member", "SIGTERM");
|
||||
}
|
||||
|
||||
@ -162,6 +162,7 @@ ZTEST(posix_headers, test_signal_h)
|
||||
zassert_not_null(sigfillset);
|
||||
zassert_not_null(sigaddset);
|
||||
zassert_not_null(sigdelset);
|
||||
zassert_not_null(sigismember);
|
||||
#endif /* CONFIG_POSIX_SIGNAL */
|
||||
|
||||
if (IS_ENABLED(CONFIG_POSIX_API)) {
|
||||
@ -177,7 +178,6 @@ ZTEST(posix_headers, test_signal_h)
|
||||
/* zassert_not_null(sighold); */ /* not implemented */
|
||||
/* zassert_not_null(sigignore); */ /* not implemented */
|
||||
/* zassert_not_null(siginterrupt); */ /* not implemented */
|
||||
/* zassert_not_null(sigismember); */ /* not implemented */
|
||||
/* zassert_not_null(signal); */ /* not implemented */
|
||||
/* zassert_not_null(sigpause); */ /* not implemented */
|
||||
/* zassert_not_null(sigpending); */ /* not implemented */
|
||||
|
||||
Loading…
Reference in New Issue
Block a user