1/*
2 * Copyright (c) 2002-2003, Intel Corporation. All rights reserved.
3 * Created by:  rusty.lynch 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 case for assertion #8 of the sigaction system call that verifies
9  that if signals in the sa_mask (passed in the sigaction struct of the
10  sigaction function call) are added to the process signal mask during
11  execution of the signal-catching function.
12*/
13
14#include <signal.h>
15#include <stdio.h>
16#include <stdlib.h>
17#include <sys/wait.h>
18#include <unistd.h>
19#include "posixtest.h"
20
21int SIGQUIT_count = 0;
22
23void SIGQUIT_handler(int signo)
24{
25	SIGQUIT_count++;
26	printf("Caught SIGQUIT\n");
27}
28
29void SIGSEGV_handler(int signo)
30{
31	printf("Caught SIGSEGV\n");
32	raise(SIGQUIT);
33	if (SIGQUIT_count) {
34		printf("Test FAILED\n");
35		exit(-1);
36	}
37}
38
39int main(void)
40{
41	struct sigaction act;
42
43	act.sa_handler = SIGSEGV_handler;
44	act.sa_flags = 0;
45	sigemptyset(&act.sa_mask);
46	sigaddset(&act.sa_mask, SIGQUIT);
47	if (sigaction(SIGSEGV, &act, 0) == -1) {
48		perror("Unexpected error while attempting to "
49		       "setup test pre-conditions");
50		return PTS_UNRESOLVED;
51	}
52
53	act.sa_handler = SIGQUIT_handler;
54	act.sa_flags = 0;
55	sigemptyset(&act.sa_mask);
56	if (sigaction(SIGQUIT, &act, 0) == -1) {
57		perror("Unexpected error while attempting to "
58		       "setup test pre-conditions");
59		return PTS_UNRESOLVED;
60	}
61
62	if (raise(SIGSEGV) == -1) {
63		perror("Unexpected error while attempting to "
64		       "setup test pre-conditions");
65		return PTS_UNRESOLVED;
66	}
67
68	printf("Test PASSED\n");
69	return PTS_PASS;
70}
71