1/*
2 * Copyright (c) 2013 Cyril Hrubis <chrubis@suse.cz>
3 *
4 * This file is licensed under the GPL license. For the full content of this
5 * license, see the COPYING file at the top level of this source tree.
6 *
7 * After sigprocmask() is called on an invalid how it should return -1 and set
8 * errno to EINVAL.
9 */
10
11#define _XOPEN_SOURCE 600
12
13#include <stdio.h>
14#include <signal.h>
15#include <errno.h>
16#include <stdint.h>
17#include <stdlib.h>
18#include "posixtest.h"
19
20int main(void)
21{
22	sigset_t set;
23	int r, i, fails = 0;
24
25	sigemptyset(&set);
26	sigaddset(&set, SIGABRT);
27
28	for (i = 0; i < 100000; i++) {
29		r = rand() % (i + 1);
30
31		switch (r) {
32		case SIG_BLOCK:
33		case SIG_UNBLOCK:
34		case SIG_SETMASK:
35			continue;
36		default:
37		break;
38		}
39
40		if (sigprocmask(r, &set, NULL) != -1 || errno != EINVAL) {
41			printf("sigprocmask(%i, ...) failed to fail\n", r);
42			fails++;
43		}
44	}
45
46	if (fails) {
47		printf("Test FAILED\n");
48		return PTS_FAIL;
49	}
50
51	printf("Test PASSED\n");
52	return PTS_PASS;
53}
54