summaryrefslogtreecommitdiff
path: root/syscall.c
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2015-09-18 01:54:59 +0000
committerDmitry V. Levin <ldv@altlinux.org>2015-09-19 04:04:49 +0300
commit3858b93ad9d2d3990f6724585e14675e663a1b5d (patch)
treea11483205d589c60c724226b4b8b0e7f72acce0d /syscall.c
parent593602ce5a8812775ac1d9cadab8f61fa68e63f3 (diff)
downloadstrace-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.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/syscall.c b/syscall.c
index b59388b36..aaa44eada 100644
--- a/syscall.c
+++ b/syscall.c
@@ -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>.