From 140a83e17f20e5a6fecc1a73a629aed52e16036a Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Wed, 18 Feb 2009 00:45:50 -0500 Subject: libsandbox: simplify WRAPPER_PRE_CHECKS() a bit Remove some of the ugly indirection in the WRAPPER_PRE_CHECKS() defines so it operates like a normal C function -- much easier to work with those. Signed-off-by: Mike Frysinger --- libsandbox/wrapper-funcs/__wrapper_simple.c | 13 ++++++------- libsandbox/wrapper-funcs/fopen.c | 2 +- libsandbox/wrapper-funcs/mkdirat.c | 4 +++- libsandbox/wrapper-funcs/unlinkat.c | 4 +++- 4 files changed, 13 insertions(+), 10 deletions(-) (limited to 'libsandbox') diff --git a/libsandbox/wrapper-funcs/__wrapper_simple.c b/libsandbox/wrapper-funcs/__wrapper_simple.c index 8bdc22b..b4f0328 100644 --- a/libsandbox/wrapper-funcs/__wrapper_simple.c +++ b/libsandbox/wrapper-funcs/__wrapper_simple.c @@ -15,7 +15,7 @@ # define WRAPPER_RET_DEFAULT -1 #endif #ifndef WRAPPER_PRE_CHECKS -# define WRAPPER_PRE_CHECKS() +# define WRAPPER_PRE_CHECKS() true #endif extern WRAPPER_RET_TYPE EXTERN_NAME(WRAPPER_ARGS_PROTO); @@ -25,12 +25,11 @@ WRAPPER_RET_TYPE WRAPPER_NAME(WRAPPER_ARGS_PROTO) { WRAPPER_RET_TYPE result = WRAPPER_RET_DEFAULT; - WRAPPER_PRE_CHECKS(); - - if (WRAPPER_SAFE()) { - check_dlsym(WRAPPER_TRUE_NAME, WRAPPER_SYMNAME, WRAPPER_SYMVER); - result = WRAPPER_TRUE_NAME(WRAPPER_ARGS); - } + if (WRAPPER_PRE_CHECKS()) + if (WRAPPER_SAFE()) { + check_dlsym(WRAPPER_TRUE_NAME, WRAPPER_SYMNAME, WRAPPER_SYMVER); + result = WRAPPER_TRUE_NAME(WRAPPER_ARGS); + } return result; } diff --git a/libsandbox/wrapper-funcs/fopen.c b/libsandbox/wrapper-funcs/fopen.c index 1a157d1..bb848b6 100644 --- a/libsandbox/wrapper-funcs/fopen.c +++ b/libsandbox/wrapper-funcs/fopen.c @@ -29,6 +29,6 @@ static inline bool sb_fopen_pre_check(WRAPPER_ARGS_PROTO) return true; } #endif -#define WRAPPER_PRE_CHECKS() if (!sb_fopen_pre_check(WRAPPER_ARGS)) return result; +#define WRAPPER_PRE_CHECKS() sb_fopen_pre_check(WRAPPER_ARGS) #include "__wrapper_simple.c" diff --git a/libsandbox/wrapper-funcs/mkdirat.c b/libsandbox/wrapper-funcs/mkdirat.c index defe569..82ae34d 100644 --- a/libsandbox/wrapper-funcs/mkdirat.c +++ b/libsandbox/wrapper-funcs/mkdirat.c @@ -14,6 +14,7 @@ static inline bool sb_mkdirat_pre_check(WRAPPER_ARGS_PROTO) { char canonic[SB_PATH_MAX]; + save_errno(); if (-1 == canonicalize(pathname, canonic)) @@ -31,8 +32,9 @@ static inline bool sb_mkdirat_pre_check(WRAPPER_ARGS_PROTO) } restore_errno(); + return true; } -#define WRAPPER_PRE_CHECKS() if (!sb_mkdirat_pre_check(WRAPPER_ARGS)) return result; +#define WRAPPER_PRE_CHECKS() sb_mkdirat_pre_check(WRAPPER_ARGS) #include "__wrapper_simple.c" diff --git a/libsandbox/wrapper-funcs/unlinkat.c b/libsandbox/wrapper-funcs/unlinkat.c index caf0ab9..8c57f48 100644 --- a/libsandbox/wrapper-funcs/unlinkat.c +++ b/libsandbox/wrapper-funcs/unlinkat.c @@ -14,6 +14,7 @@ static inline bool sb_unlinkat_pre_check(WRAPPER_ARGS_PROTO) { char canonic[SB_PATH_MAX]; + save_errno(); if (-1 == canonicalize(pathname, canonic)) @@ -31,8 +32,9 @@ static inline bool sb_unlinkat_pre_check(WRAPPER_ARGS_PROTO) } restore_errno(); + return true; } -#define WRAPPER_PRE_CHECKS() if (!sb_unlinkat_pre_check(WRAPPER_ARGS)) return result; +#define WRAPPER_PRE_CHECKS() sb_unlinkat_pre_check(WRAPPER_ARGS) #include "__wrapper_simple.c" -- cgit v1.2.3