1 /*
2 * Copyright (c) 2018 Cyril Hrubis <[email protected]>
3 */
4
5 #ifndef SAFE_RT_SIGNAL_H__
6 #define SAFE_RT_SIGNAL_H__
7
8 #include <signal.h>
9 #include "lapi/rt_sigaction.h"
10
safe_rt_sigaction(const char * file,const int lineno,int signum,const struct sigaction * act,struct sigaction * oact,size_t sigsetsize)11 static inline int safe_rt_sigaction(const char *file, const int lineno,
12 int signum, const struct sigaction *act,
13 struct sigaction *oact, size_t sigsetsize)
14 {
15 int ret;
16
17 ret = ltp_rt_sigaction(signum, act, oact, sigsetsize);
18
19 if (ret == -1) {
20 tst_brk_(file, lineno, TBROK | TERRNO,
21 "ltp_rt_sigaction(%i, %p, %p, %zu) failed",
22 signum, act, oact, sigsetsize);
23 } else if (ret) {
24 tst_brk_(file, lineno, TBROK | TERRNO,
25 "Invalid ltp_rt_sigaction(%i, %p, %p, %zu) return value %d",
26 signum, act, oact, sigsetsize, ret);
27 }
28
29 return ret;
30 }
31
32 #define SAFE_RT_SIGACTION(signum, act, oldact, sigsetsize) \
33 safe_rt_sigaction(__FILE__, __LINE__, signum, act, oldact, sigsetsize)
34
35
safe_rt_sigprocmask(const char * file,const int lineno,int how,const sigset_t * set,sigset_t * oldset,size_t sigsetsize)36 static inline int safe_rt_sigprocmask(const char *file, const int lineno,
37 int how, const sigset_t *set,
38 sigset_t *oldset, size_t sigsetsize)
39 {
40 int ret;
41
42 ret = tst_syscall(__NR_rt_sigprocmask, how, set, oldset, sigsetsize);
43 if (ret == -1) {
44 tst_brk_(file, lineno, TBROK | TERRNO,
45 "rt_sigprocmask(%i, %p, %p, %zu) failed",
46 how, set, oldset, sigsetsize);
47 } else if (ret) {
48 tst_brk_(file, lineno, TBROK | TERRNO,
49 "Invalid rt_sigprocmask(%i, %p, %p, %zu) return value %d",
50 how, set, oldset, sigsetsize, ret);
51 }
52
53 return ret;
54 }
55
56 #define SAFE_RT_SIGPROCMASK(how, set, oldset, sigsetsize) \
57 safe_rt_sigprocmask(__FILE__, __LINE__, how, set, oldset, sigsetsize)
58
59 #endif /* SAFE_RT_SIGNAL_H__ */
60