Home | History | Annotate | Download | only in sigpending
      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