]> granicus.if.org Git - strace/blob - tests/qual_inject-error-signal.c
Remove XLAT_END
[strace] / tests / qual_inject-error-signal.c
1 /*
2  * Check fault injection along with signal injection.
3  *
4  * Copyright (c) 2017-2018 Dmitry V. Levin <ldv@altlinux.org>
5  * Copyright (c) 2017-2019 The strace developers.
6  * All rights reserved.
7  *
8  * SPDX-License-Identifier: GPL-2.0-or-later
9  */
10
11 #include "tests.h"
12 #include <signal.h>
13 #include <unistd.h>
14 #include <sys/stat.h>
15 #include "scno.h"
16
17 static struct stat before, after;
18
19 static void
20 handler(int sig)
21 {
22         if (stat(".", &after))
23                 syscall(__NR_exit_group, 2);
24
25         if (before.st_dev != after.st_dev || before.st_ino != after.st_ino)
26                 syscall(__NR_exit_group, 3);
27
28         syscall(__NR_exit_group, 0);
29 }
30
31 int
32 main(void)
33 {
34         const struct sigaction act = { .sa_handler = handler };
35         if (sigaction(SIGUSR1, &act, NULL))
36                 perror_msg_and_fail("sigaction");
37
38         sigset_t mask;
39         sigemptyset(&mask);
40         sigaddset(&mask, SIGUSR1);
41         if (sigprocmask(SIG_UNBLOCK, &mask, NULL))
42                 perror_msg_and_fail("sigprocmask");
43
44         if (stat(".", &before))
45                 perror_msg_and_fail("stat");
46
47         syscall(__NR_chdir, ".");
48         syscall(__NR_exit_group, 1);
49         return 1;
50 }