]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
conf-parser: introduce log_section_full_errno() and friends
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 22 Aug 2024 23:07:12 +0000 (08:07 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 23 Aug 2024 15:05:49 +0000 (00:05 +0900)
src/shared/conf-parser.h

index f1860db4485df491ae0d544045a8b5fdad45b9dd..b73039cc5c8901cd59843a2a1c38339c4aa473f2 100644 (file)
@@ -203,6 +203,43 @@ static inline bool section_is_invalid(ConfigSection *section) {
         DEFINE_TRIVIAL_CLEANUP_FUNC(type*, free_func);                  \
         DEFINE_TRIVIAL_CLEANUP_FUNC(type*, free_func##_or_set_invalid);
 
+#define log_section_full_errno_zerook(section, level, error, ...)       \
+        ({                                                              \
+                const ConfigSection *_s = (section);                    \
+                log_syntax(/* unit = */ NULL,                           \
+                           level,                                       \
+                           _s ? _s->filename : NULL,                    \
+                           _s ? _s->line : 0,                           \
+                           error,                                       \
+                           __VA_ARGS__);                                \
+        })
+
+#define log_section_full_errno(section, level, error, ...)              \
+        ({                                                              \
+                int _error = (error);                                   \
+                ASSERT_NON_ZERO(_error);                                \
+                log_section_full_errno_zerook(section, level, _error, __VA_ARGS__); \
+        })
+
+#define log_section_full(section, level, fmt, ...)                      \
+        ({                                                              \
+                if (BUILD_MODE_DEVELOPER)                               \
+                        assert(!strstr(fmt, "%m"));                     \
+                (void) log_section_full_errno_zerook(section, level, 0, fmt, ##__VA_ARGS__); \
+        })
+
+#define log_section_debug(section, ...)                  log_section_full(section, LOG_DEBUG,   __VA_ARGS__)
+#define log_section_info(section, ...)                   log_section_full(section, LOG_INFO,    __VA_ARGS__)
+#define log_section_notice(section, ...)                 log_section_full(section, LOG_NOTICE,  __VA_ARGS__)
+#define log_section_warning(section, ...)                log_section_full(section, LOG_WARNING, __VA_ARGS__)
+#define log_section_error(section, ...)                  log_section_full(section, LOG_ERR,     __VA_ARGS__)
+
+#define log_section_debug_errno(section, error, ...)     log_section_full_errno(section, LOG_DEBUG,   error, __VA_ARGS__)
+#define log_section_info_errno(section, error, ...)      log_section_full_errno(section, LOG_INFO,    error, __VA_ARGS__)
+#define log_section_notice_errno(section, error, ...)    log_section_full_errno(section, LOG_NOTICE,  error, __VA_ARGS__)
+#define log_section_warning_errno(section, error, ...)   log_section_full_errno(section, LOG_WARNING, error, __VA_ARGS__)
+#define log_section_error_errno(section, error, ...)     log_section_full_errno(section, LOG_ERR,     error, __VA_ARGS__)
+
 CONFIG_PARSER_PROTOTYPE(config_parse_int);
 CONFIG_PARSER_PROTOTYPE(config_parse_unsigned);
 CONFIG_PARSER_PROTOTYPE(config_parse_long);