From d7d1e27a71baa7d99fc47816d568d52d44a1c82b Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Thu, 19 Mar 2020 14:28:02 +0100 Subject: [PATCH] log: use global variable to catch statements in loggers Signed-off-by: Christian Brauner --- src/lxc/cgroups/cgroup2_devices.c | 2 +- src/lxc/log.h | 100 ++++++++++++++++-------------- src/lxc/macro.h | 27 ++++---- 3 files changed, 69 insertions(+), 60 deletions(-) diff --git a/src/lxc/cgroups/cgroup2_devices.c b/src/lxc/cgroups/cgroup2_devices.c index 11e2bdd98..4efb28fbd 100644 --- a/src/lxc/cgroups/cgroup2_devices.c +++ b/src/lxc/cgroups/cgroup2_devices.c @@ -385,7 +385,7 @@ int bpf_program_cgroup_attach(struct bpf_program *prog, int type, if (ret < 0) return log_error_errno(-1, errno, "Failed to attach bpf program"); - free_replace_move_ptr(prog->attached_path, copy); + free_move_ptr(prog->attached_path, copy); prog->attached_type = type; prog->attached_flags = flags; diff --git a/src/lxc/log.h b/src/lxc/log.h index c00638cb7..ec10f53bc 100644 --- a/src/lxc/log.h +++ b/src/lxc/log.h @@ -477,69 +477,79 @@ __lxc_unused static inline void LXC_##LEVEL(struct lxc_log_locinfo* locinfo, \ } while (0) #endif -#define log_error_errno(__ret__, __errno__, format, ...) \ - ({ \ - errno = __errno__; \ - SYSERROR(format, ##__VA_ARGS__); \ - __ret__; \ +#define log_error_errno(__ret__, __errno__, format, ...) \ + ({ \ + typeof(__ret__) __internal_ret__ = (__ret__); \ + errno = (__errno__); \ + SYSERROR(format, ##__VA_ARGS__); \ + __internal_ret__; \ }) -#define log_error(__ret__, format, ...) \ - ({ \ - ERROR(format, ##__VA_ARGS__); \ - __ret__; \ +#define log_error(__ret__, format, ...) \ + ({ \ + typeof(__ret__) __internal_ret__ = (__ret__); \ + ERROR(format, ##__VA_ARGS__); \ + __internal_ret__; \ }) -#define log_trace_errno(__ret__, __errno__, format, ...) \ - ({ \ - errno = __errno__; \ - SYSTRACE(format, ##__VA_ARGS__); \ - __ret__; \ +#define log_trace_errno(__ret__, __errno__, format, ...) \ + ({ \ + typeof(__ret__) __internal_ret__ = (__ret__); \ + errno = __errno__; \ + SYSTRACE(format, ##__VA_ARGS__); \ + __internal_ret__; \ }) -#define log_trace(__ret__, format, ...) \ - ({ \ - TRACE(format, ##__VA_ARGS__); \ - __ret__; \ +#define log_trace(__ret__, format, ...) \ + ({ \ + typeof(__ret__) __internal_ret__ = (__ret__); \ + TRACE(format, ##__VA_ARGS__); \ + __internal_ret__; \ }) -#define log_warn_errno(__ret__, __errno__, format, ...) \ - ({ \ - errno = __errno__; \ - SYSWARN(format, ##__VA_ARGS__); \ - __ret__; \ +#define log_warn_errno(__ret__, __errno__, format, ...) \ + ({ \ + typeof(__ret__) __internal_ret__ = (__ret__); \ + errno = __errno__; \ + SYSWARN(format, ##__VA_ARGS__); \ + __internal_ret__; \ }) -#define log_warn(__ret__, format, ...) \ - ({ \ - WARN(format, ##__VA_ARGS__); \ - __ret__; \ +#define log_warn(__ret__, format, ...) \ + ({ \ + typeof(__ret__) __internal_ret__ = (__ret__); \ + WARN(format, ##__VA_ARGS__); \ + __internal_ret__; \ }) -#define log_debug_errno(__ret__, __errno__, format, ...) \ - ({ \ - errno = __errno__; \ - SYSDEBUG(format, ##__VA_ARGS__); \ - __ret__; \ +#define log_debug_errno(__ret__, __errno__, format, ...) \ + ({ \ + typeof(__ret__) __internal_ret__ = (__ret__); \ + errno = __errno__; \ + SYSDEBUG(format, ##__VA_ARGS__); \ + __internal_ret__; \ }) -#define log_debug(__ret__, format, ...) \ - ({ \ - DEBUG(format, ##__VA_ARGS__); \ - __ret__; \ +#define log_debug(__ret__, format, ...) \ + ({ \ + typeof(__ret__) __internal_ret__ = (__ret__); \ + DEBUG(format, ##__VA_ARGS__); \ + __internal_ret__; \ }) -#define log_info_errno(__ret__, __errno__, format, ...) \ - ({ \ - errno = __errno__; \ - SYSINFO(format, ##__VA_ARGS__); \ - __ret__; \ +#define log_info_errno(__ret__, __errno__, format, ...) \ + ({ \ + typeof(__ret__) __internal_ret__ = (__ret__); \ + errno = __errno__; \ + SYSINFO(format, ##__VA_ARGS__); \ + __internal_ret__; \ }) -#define log_info(__ret__, format, ...) \ - ({ \ - INFO(format, ##__VA_ARGS__); \ - __ret__; \ +#define log_info(__ret__, format, ...) \ + ({ \ + typeof(__ret__) __internal_ret__ = (__ret__); \ + INFO(format, ##__VA_ARGS__); \ + __internal_ret__; \ }) extern int lxc_log_fd; diff --git a/src/lxc/macro.h b/src/lxc/macro.h index 612fb11ea..3df19d6d3 100644 --- a/src/lxc/macro.h +++ b/src/lxc/macro.h @@ -442,24 +442,23 @@ enum { __internal_fd__; \ }) -#define ret_set_errno(__ret__, __errno__) \ - ({ \ - errno = __errno__; \ - __ret__; \ +#define ret_set_errno(__ret__, __errno__) \ + ({ \ + typeof(__ret__) __internal_ret__ = (__ret__); \ + errno = (__errno__); \ + __internal_ret__; \ }) -#define ret_errno(__errno__) \ - ({ \ - errno = __errno__; \ - -__errno__; \ +#define ret_errno(__errno__) \ + ({ \ + errno = (__errno__); \ + -(__errno__); \ }) -#define free_replace_move_ptr(a, b) \ - ({ \ - free(a); \ - (a) = (b); \ - (b) = NULL; \ - 0; \ +#define free_move_ptr(a, b) \ + ({ \ + free(a); \ + (a) = move_ptr((b)); \ }) /* Container's specific file/directory names */ -- 2.39.5