1
0
mirror of https://github.com/systemd/systemd.git synced 2024-11-07 18:27:04 +03:00

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.
This commit is contained in:
Lennart Poettering 2018-01-11 13:13:02 +01:00
parent a6ab236595
commit d04ce5a9c4
2 changed files with 35 additions and 6 deletions

View File

@ -54,6 +54,7 @@
#include "syslog-util.h" #include "syslog-util.h"
#include "terminal-util.h" #include "terminal-util.h"
#include "time-util.h" #include "time-util.h"
#include "utf8.h"
#include "util.h" #include "util.h"
#define SNDBUF_SIZE (8*1024*1024) #define SNDBUF_SIZE (8*1024*1024)
@ -1290,6 +1291,27 @@ int log_syntax_internal(
NULL); 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) { void log_set_upgrade_syslog_to_journal(bool b) {
upgrade_syslog_to_journal = b; upgrade_syslog_to_journal = b;
} }

View File

@ -317,6 +317,16 @@ int log_syntax_internal(
const char *func, const char *func,
const char *format, ...) _printf_(9, 10); 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, ...) \ #define log_syntax(unit, level, config_file, config_line, error, ...) \
({ \ ({ \
int _level = (level), _e = (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) \ #define log_syntax_invalid_utf8(unit, level, config_file, config_line, rvalue) \
({ \ ({ \
int _level = (level); \ int _level = (level); \
if (log_get_max_level() >= LOG_PRI(_level)) { \ (log_get_max_level() >= LOG_PRI(_level)) \
_cleanup_free_ char *_p = NULL; \ ? log_syntax_invalid_utf8_internal(unit, _level, config_file, config_line, __FILE__, __LINE__, __func__, rvalue) \
_p = utf8_escape_invalid(rvalue); \ : -EINVAL; \
log_syntax_internal(unit, _level, config_file, config_line, 0, __FILE__, __LINE__, __func__, \
"String is not UTF-8 clean, ignoring assignment: %s", strna(_p)); \
} \
}) })
#define DEBUG_LOGGING _unlikely_(log_get_max_level() >= LOG_DEBUG) #define DEBUG_LOGGING _unlikely_(log_get_max_level() >= LOG_DEBUG)