From 130fa94423213f56cd49d0a9e2ebc784195bcaf7 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 5 Nov 2008 18:39:13 +0100 Subject: log: convert messages to system charset When logging to the terminal, we should print messages in the system character set. Convert all messages in this case. --- src/log.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/log.c') diff --git a/src/log.c b/src/log.c index feae78bfc..f0c8a9cad 100644 --- a/src/log.c +++ b/src/log.c @@ -40,6 +40,8 @@ static unsigned int log_threshold = G_LOG_LEVEL_INFO; +static const char *log_charset; + static bool stdout_mode = true; static int out_fd = -1; static int err_fd = -1; @@ -71,16 +73,27 @@ mpd_log_func(G_GNUC_UNUSED const gchar *log_domain, { FILE *file = log_level <= G_LOG_LEVEL_WARNING ? stderr : stdout; + char *converted; + + converted = g_convert_with_fallback(message, -1, + log_charset, "utf-8", + NULL, NULL, NULL, NULL); + if (converted != NULL) + message = converted; fprintf(file, "%s%s", stdout_mode ? "" : log_date(), message); + + g_free(converted); } void initLog(bool verbose) { ConfigParam *param; + g_get_charset(&log_charset); + g_log_set_default_handler(mpd_log_func, NULL); /* unbuffer stdout, stderr is unbuffered by default, leave it */ @@ -136,6 +149,7 @@ void setup_log_output(bool use_stdout) if (!use_stdout) { redirect_logs(); stdout_mode = false; + log_charset = NULL; } } -- cgit v1.2.3