1 /* 2 * Copyright (c) 2002, Intel Corporation. All rights reserved. 3 * Created by: julie.n.fleischer REMOVE-THIS AT intel DOT com 4 * This file is licensed under the GPL license. For the full content 5 * of this license, see the COPYING file at the top level of this 6 * source tree. 7 8 * Test that the sigpending() function stores the set of signals that 9 * are blocked from delivery. Steps are: 10 * 1) Block three signals from delivery. 11 * 2) Raise two of those signals. 12 * 3) Verify that the two signals raised are shown via sigpending. 13 * 4) Verify the one signal not raised is not shown. 14 */ 15 16 #include <signal.h> 17 #include <stdio.h> 18 #include "posixtest.h" 19 20 int main(void) 21 { 22 sigset_t blockset; 23 sigset_t prevset; 24 sigset_t pendingset; 25 26 if ((sigemptyset(&blockset) == -1) || 27 (sigemptyset(&prevset) == -1) || (sigemptyset(&pendingset) == -1)) { 28 printf("Could not call sigemptyset()\n"); 29 return PTS_UNRESOLVED; 30 } 31 32 if ((sigaddset(&blockset, SIGUSR2) == -1) || 33 (sigaddset(&blockset, SIGHUP) == -1) || 34 (sigaddset(&blockset, SIGQUIT) == -1)) { 35 perror("Error calling sigaddset()\n"); 36 return PTS_UNRESOLVED; 37 } 38 39 if (sigprocmask(SIG_SETMASK, &blockset, &prevset) == -1) { 40 printf("Could not call sigprocmask()\n"); 41 return PTS_UNRESOLVED; 42 } 43 44 if (raise(SIGUSR2) != 0) { 45 printf("Could not raise SIGUSR2\n"); 46 return PTS_UNRESOLVED; 47 } 48 if (raise(SIGQUIT) != 0) { 49 printf("Could not raise SIGQUIT\n"); 50 return PTS_UNRESOLVED; 51 } 52 53 if (sigpending(&pendingset) == -1) { 54 printf("Error calling sigpending()\n"); 55 return PTS_UNRESOLVED; 56 } 57 58 if (sigismember(&pendingset, SIGUSR2) == 1) { 59 if (sigismember(&pendingset, SIGQUIT) == 1) { 60 printf("All pending signals found\n"); 61 if (sigismember(&pendingset, SIGHUP) == 0) { 62 printf("Unsent signals not found.\n"); 63 printf("Test PASSED\n"); 64 return PTS_PASS; 65 } else { 66 printf("Error with unsent signals\n"); 67 printf("Test FAILED\n"); 68 return PTS_FAIL; 69 } 70 } 71 } 72 printf("Not all pending signals found\n"); 73 return PTS_FAIL; 74 } 75