"String is not UTF-8 clean, ignoring assignment: %s", strna(p));
}
+int log_syntax_parse_error_internal(
+ const char *unit,
+ const char *config_file,
+ unsigned config_line,
+ int error,
+ bool critical,
+ const char *file,
+ int line,
+ const char *func,
+ const char *lvalue,
+ const char *rvalue) {
+
+ PROTECT_ERRNO;
+ _cleanup_free_ char *escaped = NULL;
+
+ /* OOM is always handled as critical. */
+ if (ERRNO_VALUE(error) == ENOMEM)
+ return log_oom_internal(LOG_ERR, file, line, func);
+
+ if (rvalue && !utf8_is_valid(rvalue)) {
+ escaped = utf8_escape_invalid(rvalue);
+ if (!escaped)
+ rvalue = "(oom)";
+ else
+ rvalue = " (escaped)";
+ }
+
+ log_syntax_internal(unit, critical ? LOG_ERR : LOG_WARNING, config_file, config_line, error,
+ file, line, func,
+ "Failed to parse %s=%s%s%s%s%s",
+ strna(lvalue), strempty(escaped), strempty(rvalue),
+ critical ? "" : ", ignoring",
+ error == 0 ? "." : ": ",
+ error == 0 ? "" : STRERROR(error));
+
+ return critical ? -ERRNO_VALUE(error) : 0;
+}
+
void log_set_upgrade_syslog_to_journal(bool b) {
upgrade_syslog_to_journal = b;
const char *func,
const char *rvalue);
+int log_syntax_parse_error_internal(
+ const char *unit,
+ const char *config_file,
+ unsigned config_line,
+ int error,
+ bool critical, /* When true, propagate the passed error, otherwise this always returns 0. */
+ const char *file,
+ int line,
+ const char *func,
+ const char *lvalue,
+ const char *rvalue);
+
#define log_syntax(unit, level, config_file, config_line, error, ...) \
({ \
int _level = (level), _e = (error); \
: -EINVAL; \
})
+#define log_syntax_parse_error_full(unit, config_file, config_line, error, critical, lvalue, rvalue) \
+ log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
+
+#define log_syntax_parse_error(unit, config_file, config_line, error, lvalue, rvalue) \
+ log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
+
#define DEBUG_LOGGING _unlikely_(log_get_max_level() >= LOG_DEBUG)
void log_setup(void);