diff options
author | Dmitry V. Levin <ldv@altlinux.org> | 2015-09-18 01:54:59 +0000 |
---|---|---|
committer | Dmitry V. Levin <ldv@altlinux.org> | 2015-09-19 04:04:49 +0300 |
commit | 3858b93ad9d2d3990f6724585e14675e663a1b5d (patch) | |
tree | a11483205d589c60c724226b4b8b0e7f72acce0d /syscall.c | |
parent | 593602ce5a8812775ac1d9cadab8f61fa68e63f3 (diff) | |
download | strace-3858b93ad9d2d3990f6724585e14675e663a1b5d.tar.gz |
Add helper functions to clear/restore syserror
* defs.h (temporarily_clear_syserror, restore_cleared_syserror):
New prototypes.
* syscall.c (saved_u_error): New variable.
(temporarily_clear_syserror, restore_cleared_syserror): New functions.
* aio.c (sys_io_getevents): Use temporarily_clear_syserror
and restore_cleared_syserror.
* mq.c (sys_mq_timedreceive): Likewise.
* signal.c (sys_rt_sigtimedwait): Likewise.
Diffstat (limited to 'syscall.c')
-rw-r--r-- | syscall.c | 15 |
1 files changed, 15 insertions, 0 deletions
@@ -1131,6 +1131,21 @@ trace_syscall(struct tcb *tcp) trace_syscall_exiting(tcp) : trace_syscall_entering(tcp); } +static int saved_u_error; + +void +temporarily_clear_syserror(struct tcb *tcp) +{ + saved_u_error = tcp->u_error; + tcp->u_error = 0; +} + +void +restore_cleared_syserror(struct tcb *tcp) +{ + tcp->u_error = saved_u_error; +} + /* * Cannot rely on __kernel_[u]long_t being defined, * it is quite a recent feature of <asm/posix_types.h>. |