From d04ce5a9c4a91a86786eedd947822b23b689dd67 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 11 Jan 2018 13:13:02 +0100 Subject: [PATCH] log: rework log_syntax_invalid_utf8() a bit The macro used utf8.h functions without including that. Let's clean this up, by moving that code inside of log.c. Let's also make the call return -EINVAL in all cases. This is in line with log_oom() which also returns a well-defined error code even though it doesn#t take one. --- src/basic/log.c | 22 ++++++++++++++++++++++ src/basic/log.h | 19 +++++++++++++------ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/basic/log.c b/src/basic/log.c index 318c55e9017..9169474289b 100644 --- a/src/basic/log.c +++ b/src/basic/log.c @@ -54,6 +54,7 @@ #include "syslog-util.h" #include "terminal-util.h" #include "time-util.h" +#include "utf8.h" #include "util.h" #define SNDBUF_SIZE (8*1024*1024) @@ -1290,6 +1291,27 @@ int log_syntax_internal( NULL); } +int log_syntax_invalid_utf8_internal( + const char *unit, + int level, + const char *config_file, + unsigned config_line, + const char *file, + int line, + const char *func, + const char *rvalue) { + + _cleanup_free_ char *p = NULL; + + if (rvalue) + p = utf8_escape_invalid(rvalue); + + log_syntax_internal(unit, level, config_file, config_line, 0, file, line, func, + "String is not UTF-8 clean, ignoring assignment: %s", strna(p)); + + return -EINVAL; +} + void log_set_upgrade_syslog_to_journal(bool b) { upgrade_syslog_to_journal = b; } diff --git a/src/basic/log.h b/src/basic/log.h index a731c751531..811e5a6cc54 100644 --- a/src/basic/log.h +++ b/src/basic/log.h @@ -317,6 +317,16 @@ int log_syntax_internal( const char *func, const char *format, ...) _printf_(9, 10); +int log_syntax_invalid_utf8_internal( + const char *unit, + int level, + const char *config_file, + unsigned config_line, + const char *file, + int line, + const char *func, + const char *rvalue); + #define log_syntax(unit, level, config_file, config_line, error, ...) \ ({ \ int _level = (level), _e = (error); \ @@ -328,12 +338,9 @@ int log_syntax_internal( #define log_syntax_invalid_utf8(unit, level, config_file, config_line, rvalue) \ ({ \ int _level = (level); \ - if (log_get_max_level() >= LOG_PRI(_level)) { \ - _cleanup_free_ char *_p = NULL; \ - _p = utf8_escape_invalid(rvalue); \ - log_syntax_internal(unit, _level, config_file, config_line, 0, __FILE__, __LINE__, __func__, \ - "String is not UTF-8 clean, ignoring assignment: %s", strna(_p)); \ - } \ + (log_get_max_level() >= LOG_PRI(_level)) \ + ? log_syntax_invalid_utf8_internal(unit, _level, config_file, config_line, __FILE__, __LINE__, __func__, rvalue) \ + : -EINVAL; \ }) #define DEBUG_LOGGING _unlikely_(log_get_max_level() >= LOG_DEBUG)