Home | History | Annotate | Download | only in sigprocmask
      1 /*
      2  * Copyright (c) 2003, Intel Corporation. All rights reserved.
      3  * Created by:  salwan.searty 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  The resulting set shall be the signal set pointed to by set, if the value
      9  of the argument how is SIG_SETMASK
     10 */
     11 
     12 #include <signal.h>
     13 #include <stdio.h>
     14 #include "posixtest.h"
     15 
     16 int handler_called = 0;
     17 
     18 void handler(int signo)
     19 {
     20 	handler_called = 1;
     21 }
     22 
     23 int main(void)
     24 {
     25 	struct sigaction act;
     26 	sigset_t blocked_set, pending_set;
     27 	sigemptyset(&blocked_set);
     28 	sigaddset(&blocked_set, SIGABRT);
     29 
     30 	act.sa_handler = handler;
     31 	act.sa_flags = 0;
     32 	sigemptyset(&act.sa_mask);
     33 	if (sigaction(SIGABRT, &act, 0) == -1) {
     34 		perror("Unexpected error while attempting to setup test "
     35 		       "pre-conditions");
     36 		return PTS_UNRESOLVED;
     37 	}
     38 
     39 	if (sigprocmask(SIG_SETMASK, &blocked_set, NULL) == -1) {
     40 		perror
     41 		    ("Unexpected error while attempting to use sigprocmask.\n");
     42 		return PTS_UNRESOLVED;
     43 	}
     44 
     45 	if (raise(SIGABRT) == -1) {
     46 		perror("Unexpected error while attempting to setup test "
     47 		       "pre-conditions");
     48 		return PTS_UNRESOLVED;
     49 	}
     50 
     51 	if (handler_called) {
     52 		printf("FAIL: Signal was not blocked\n");
     53 		return PTS_FAIL;
     54 	}
     55 
     56 	if (sigpending(&pending_set) == -1) {
     57 		perror("Unexpected error while attempting to use sigpending\n");
     58 		return PTS_UNRESOLVED;
     59 	}
     60 
     61 	if (sigismember(&pending_set, SIGABRT) == -1) {
     62 		perror
     63 		    ("Unexpected error while attempting to use sigismember.\n");
     64 		return PTS_UNRESOLVED;
     65 	}
     66 
     67 	if (sigismember(&pending_set, SIGABRT) != 1) {
     68 		perror("FAIL: sigismember did not return 1\n");
     69 		return PTS_UNRESOLVED;
     70 	}
     71 
     72 	printf("Test PASSED: signal was added to the process's signal mask\n");
     73 	return PTS_PASS;
     74 }
     75