1 /*
2
3 * Copyright (c) 2003, Intel Corporation. All rights reserved.
4 * Created by: salwan.searty REMOVE-THIS AT intel DOT com
5 * This file is licensed under the GPL license. For the full content
6 * of this license, see the COPYING file at the top level of this
7 * source tree.
8
9 Steps:
10 1. Add only SIGABRT to the signal mask.
11 2. Make a call such as this: sigprocmask(SIG_UNBLOCK, NULL, &oactl). At
12 this point, we have obtained the signal mask in oactl.
13 3. Now call is_changed to make sure that SIGABRT is still in oactl, and
14 that no other signal in the set is in oactl.
15
16 */
17
18 #include <signal.h>
19 #include <stdio.h>
20 #include "posixtest.h"
21
22 #define NUMSIGNALS (sizeof(siglist) / sizeof(siglist[0]))
23
is_changed(sigset_t set,int sig)24 int is_changed(sigset_t set, int sig)
25 {
26
27 int i;
28 int siglist[] = { SIGABRT, SIGALRM, SIGBUS, SIGCHLD,
29 SIGCONT, SIGFPE, SIGHUP, SIGILL, SIGINT,
30 SIGPIPE, SIGQUIT, SIGSEGV,
31 SIGTERM, SIGTSTP, SIGTTIN, SIGTTOU,
32 SIGUSR1, SIGUSR2,
33 #ifdef SIGPOLL
34 SIGPOLL,
35 #endif
36 #ifdef SIGPROF
37 SIGPROF,
38 #endif
39 SIGSYS,
40 SIGTRAP, SIGURG, SIGVTALRM, SIGXCPU, SIGXFSZ
41 };
42
43 if (sigismember(&set, sig) != 1) {
44 return 1;
45 }
46 for (i = 0; i < NUMSIGNALS; i++) {
47 if ((siglist[i] != sig)) {
48 if (sigismember(&set, siglist[i]) != 0) {
49 return 1;
50 }
51 }
52 }
53 return 0;
54 }
55
main(void)56 int main(void)
57 {
58 sigset_t actl, oactl;
59
60 sigemptyset(&actl);
61 sigemptyset(&oactl);
62
63 sigaddset(&actl, SIGABRT);
64
65 sigprocmask(SIG_SETMASK, &actl, NULL);
66 sigprocmask(SIG_UNBLOCK, NULL, &oactl);
67
68 if (is_changed(oactl, SIGABRT))
69 return PTS_FAIL;
70
71 printf("Test PASSED: signal mask was not changed.\n");
72 return PTS_PASS;
73 }
74