| /* -*- Mode: C; tab-width: 8; c-basic-offset: 2; indent-tabs-mode: nil; -*- */ | |
| #include "util.h" | |
| static int pipe_fds[2]; | |
| int main(void) { | |
| char buf; | |
| pid_t pid; | |
| int status; | |
| sigset_t mask; | |
| test_assert(0 == pipe(pipe_fds)); | |
| sigemptyset(&mask); | |
| sigfillset(&mask); | |
| test_assert(0 == sigprocmask(SIG_BLOCK, &mask, NULL)); | |
| /* Check that even when all signals are supposedly blocked, | |
| syscallbuf still works */ | |
| pid = fork(); | |
| if (!pid) { | |
| test_assert(1 == write(pipe_fds[1], "y", 1)); | |
| return 77; | |
| } | |
| test_assert(1 == read(pipe_fds[0], &buf, 1)); | |
| test_assert(pid == wait(&status)); | |
| test_assert(WIFEXITED(status) && WEXITSTATUS(status) == 77); | |
| atomic_puts("EXIT-SUCCESS"); | |
| return 0; | |
| } |