summaryrefslogtreecommitdiffstats
path: root/kernel/tests/include/lapi/safe_rt_signal.h
blob: 67fa44417473ed03e4c72bae6198fd3434738325 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*
 * Copyright (c) 2018 Cyril Hrubis <chrubis@suse.cz>
 */

#ifndef SAFE_RT_SIGNAL_H__
#define SAFE_RT_SIGNAL_H__

#include <signal.h>
#include "lapi/rt_sigaction.h"

static inline int safe_rt_sigaction(const char *file, const int lineno,
                                    int signum, const struct sigaction *act,
                                    struct sigaction *oact, size_t sigsetsize)
{
	int ret;

	ret = ltp_rt_sigaction(signum, act, oact, sigsetsize);
	if (ret < 0) {
		tst_brk(TBROK | TERRNO,
			"%s:%d: ltp_rt_sigaction(%i, %p, %p, %zu) failed",
			file, lineno, signum, act, oact, sigsetsize);
	}

	return ret;
}

#define SAFE_RT_SIGACTION(signum, act, oldact, sigsetsize) \
	safe_rt_sigaction(__FILE__, __LINE__, signum, act, oldact, sigsetsize)


static inline int safe_rt_sigprocmask(const char *file, const int lineno,
                                      int how, const sigset_t *set,
                                      sigset_t *oldset, size_t sigsetsize)
{
	int ret;

	ret = tst_syscall(__NR_rt_sigprocmask, how, set, oldset, sigsetsize);
	if (ret < 0) {
		tst_brk(TBROK | TERRNO,
		        "%s:%d: rt_sigprocmask(%i, %p, %p, %zu) failed",
			file, lineno, how, set, oldset, sigsetsize);
	}

	return ret;
}

#define SAFE_RT_SIGPROCMASK(how, set, oldset, sigsetsize) \
	safe_rt_sigprocmask(__FILE__, __LINE__, how, set, oldset, sigsetsize)

#endif /* SAFE_RT_SIGNAL_H__ */