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 SIGTTIN_count = 0;
22
23void SIGTTIN_handler(int signo)
24{
25	SIGTTIN_count++;
26	printf("Caught SIGTTIN\n");
27}
28
29void SIGTTOU_handler(int signo)
30{
31	printf("Caught SIGTTOU\n");
32	raise(SIGTTIN);
33	if (SIGTTIN_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 = SIGTTOU_handler;
44	act.sa_flags = 0;
45	sigemptyset(&act.sa_mask);
46	sigaddset(&act.sa_mask, SIGTTIN);
47	if (sigaction(SIGTTOU, &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 = SIGTTIN_handler;
54	act.sa_flags = 0;
55	sigemptyset(&act.sa_mask);
56	if (sigaction(SIGTTIN, &act, 0) == -1) {
57		perror("Unexpected error while attempting to "
58		       "setup test pre-conditions");
59		return PTS_UNRESOLVED;
60	}
61
62	if (raise(SIGTTOU) == -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