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 24int 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 56int 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