From caa97697a7c5ff3545d6aabdbf102b3f6a2d2608 Mon Sep 17 00:00:00 2001 From: Masatake YAMATO Date: Sat, 24 Sep 2022 02:38:24 +0900 Subject: [PATCH] tests: (mkfds) quit when a byte is given via standard input The original code monitored only SIGCONT. It is suitable for using the command from a test script. Monitoring standard input is helpful for developing a new factory interactively. Signed-off-by: Masatake YAMATO --- tests/helpers/test_mkfds.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/tests/helpers/test_mkfds.c b/tests/helpers/test_mkfds.c index 994da2b77e..ba6e287939 100644 --- a/tests/helpers/test_mkfds.c +++ b/tests/helpers/test_mkfds.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -1056,6 +1057,27 @@ pidfd_open(pid_t pid _U_, unsigned int flags _U_) } #endif +static void wait_event(void) +{ + fd_set readfds; + sigset_t sigset; + int n = 0; + + FD_ZERO(&readfds); + /* Monitor the standard input only when the process + * is in foreground. */ + if (tcgetpgrp(STDIN_FILENO) == getpgrp()) { + n = 1; + FD_SET(0, &readfds); + } + + sigemptyset(&sigset); + + if (pselect(n, &readfds, NULL, NULL, NULL, &sigset) < 0 + && errno != EINTR) + errx(EXIT_FAILURE, _("failed in pselect")); +} + int main(int argc, char **argv) { int c; @@ -1150,7 +1172,7 @@ int main(int argc, char **argv) } if (!cont) - pause(); + wait_event(); for (int i = 0; i < factory->N + factory->EX_N; i++) if (fdescs[i].fd >= 0 && fdescs[i].close) -- 2.47.3