Enclosing the close_prot_errno_disarm macro in do {...} while (false) structure could prevent potential bugs and undefined behavior.
Example code:
#define BINDERFUNC(x) f(x); g(x); if (condition) BINDERFUNC(x);
When BINDERFUNC(x) expands, g(x) would be executed outside of if block. Enclosing the macro under do{...}while(false) adds a scope to the macro, making it safer.
Signed-off-by: Abhinav Saxena xandfury@gmail.com --- .../filesystems/binderfs/binderfs_test.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/tools/testing/selftests/filesystems/binderfs/binderfs_test.c b/tools/testing/selftests/filesystems/binderfs/binderfs_test.c index 447ec4296e69..4a149e3d4ba4 100644 --- a/tools/testing/selftests/filesystems/binderfs/binderfs_test.c +++ b/tools/testing/selftests/filesystems/binderfs/binderfs_test.c @@ -28,13 +28,15 @@ #define PTR_TO_INT(p) ((int)((intptr_t)(p))) #define INT_TO_PTR(u) ((void *)((intptr_t)(u)))
-#define close_prot_errno_disarm(fd) \ - if (fd >= 0) { \ - int _e_ = errno; \ - close(fd); \ - errno = _e_; \ - fd = -EBADF; \ - } +#define close_prot_errno_disarm(fd) \ + do { \ + if (fd >= 0) { \ + int _e_ = errno; \ + close(fd); \ + errno = _e_; \ + fd = -EBADF; \ + } \ + } while (false)
static void change_mountns(struct __test_metadata *_metadata) { -- 2.34.1