aboutsummaryrefslogtreecommitdiffstats
path: root/templates/wrapfuncs.c
diff options
context:
space:
mode:
Diffstat (limited to 'templates/wrapfuncs.c')
-rw-r--r--templates/wrapfuncs.c60
1 files changed, 29 insertions, 31 deletions
diff --git a/templates/wrapfuncs.c b/templates/wrapfuncs.c
index 61065c5..0a90efd 100644
--- a/templates/wrapfuncs.c
+++ b/templates/wrapfuncs.c
@@ -21,8 +21,20 @@ ${name}(${decl_args}) {
${variadic_decl}
${rc_decl}
+ if (!pseudo_check_wrappers() || !real_$name) {
+ /* rc was initialized to the "failure" value */
+ pseudo_enosys("${name}");
+ ${rc_return}
+ }
+
${variadic_start}
+ if (pseudo_disabled) {
+ ${rc_assign} (*real_${name})(${call_args});
+ ${variadic_end}
+ ${rc_return}
+ }
+
pseudo_debug(4, "called: ${name}\n");
pseudo_sigblock(&saved);
if (pseudo_getlock()) {
@@ -30,39 +42,25 @@ ${name}(${decl_args}) {
sigprocmask(SIG_SETMASK, &saved, NULL);
${def_return}
}
- if (pseudo_check_wrappers()) {
- int save_errno;
- if (antimagic > 0) {
- if (real_$name) {
- /* call the real syscall */
- ${rc_assign} (*real_${name})(${call_args});
- } else {
- /* rc was initialized to the "failure" value */
- pseudo_enosys("${name}");
- }
- } else {
- ${alloc_paths}
- /* exec*() use this to restore the sig mask */
- pseudo_saved_sigmask = saved;
- ${rc_assign} wrap_$name(${call_args});
- ${free_paths}
- }
- ${variadic_end}
- save_errno = errno;
- pseudo_droplock();
- sigprocmask(SIG_SETMASK, &saved, NULL);
- pseudo_debug(4, "completed: $name\n");
- errno = save_errno;
- ${rc_return}
+
+ int save_errno;
+ if (antimagic > 0) {
+ /* call the real syscall */
+ ${rc_assign} (*real_${name})(${call_args});
} else {
- pseudo_droplock();
- sigprocmask(SIG_SETMASK, &saved, NULL);
- pseudo_debug(4, "completed: $name\n");
- /* rc was initialized to the "failure" value */
- pseudo_enosys("${name}");
- ${variadic_end}
- ${rc_return}
+ ${alloc_paths}
+ /* exec*() use this to restore the sig mask */
+ pseudo_saved_sigmask = saved;
+ ${rc_assign} wrap_$name(${call_args});
+ ${free_paths}
}
+ ${variadic_end}
+ save_errno = errno;
+ pseudo_droplock();
+ sigprocmask(SIG_SETMASK, &saved, NULL);
+ pseudo_debug(4, "completed: $name\n");
+ errno = save_errno;
+ ${rc_return}
}
static ${type}