From: Masatake YAMATO Date: Tue, 6 Jun 2023 22:55:09 +0000 (+0900) Subject: tests: (mkfds) add a factory to make a signalfd X-Git-Tag: v2.40-rc1~399^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4012622ab4ec9282ebfff0bac077d30c03629066;p=thirdparty%2Futil-linux.git tests: (mkfds) add a factory to make a signalfd Signed-off-by: Masatake YAMATO --- diff --git a/tests/helpers/test_mkfds.c b/tests/helpers/test_mkfds.c index 11fd101334..0afb962485 100644 --- a/tests/helpers/test_mkfds.c +++ b/tests/helpers/test_mkfds.c @@ -44,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -2413,6 +2414,44 @@ static void *make_timerfd(const struct factory *factory, struct fdesc fdescs[], return NULL; } +static void *make_signalfd(const struct factory *factory _U_, struct fdesc fdescs[], + int argc _U_, char ** argv _U_) +{ + sigset_t mask; + int numsig = 42; + + if (sigemptyset(&mask) < 0) + err(EXIT_FAILURE, "failed in sigemptyset()"); + if (sigaddset(&mask, SIGFPE) < 0) + err(EXIT_FAILURE, "failed in sigaddset(FPE)"); + if (sigaddset(&mask, SIGUSR1) < 0) + err(EXIT_FAILURE, "failed in sigaddset(USR1)"); + if (sigaddset(&mask, numsig) < 0) + err(EXIT_FAILURE, "failed in sigaddset(%d)", numsig); + + int sfd= signalfd(-1, &mask, 0); + if (sfd < 0) + err(EXIT_FAILURE, "failed in signalfd(2)"); + + if (sfd != fdescs[0].fd) { + if (dup2(sfd, fdescs[0].fd) < 0) { + int e = errno; + close(sfd); + errno = e; + err(EXIT_FAILURE, "failed to dup %d -> %d", sfd, fdescs[0].fd); + } + close(sfd); + } + + fdescs[0] = (struct fdesc){ + .fd = fdescs[0].fd, + .close = close_fdesc, + .data = NULL + }; + + return NULL; +} + #define PARAM_END { .name = NULL, } static const struct factory factories[] = { { @@ -3074,7 +3113,18 @@ static const struct factory factories[] = { PARAM_END } - } + }, + { + .name = "signalfd", + .desc = "make signalfd", + .priv = false, + .N = 1, + .EX_N = 0, + .make = make_signalfd, + .params = (struct parameter []) { + PARAM_END + } + }, }; static int count_parameters(const struct factory *factory)