aboutsummaryrefslogtreecommitdiff
path: root/src/log.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-11-05 18:39:13 +0100
committerMax Kellermann <max@duempel.org>2008-11-05 18:39:13 +0100
commit130fa94423213f56cd49d0a9e2ebc784195bcaf7 (patch)
treee1187cc1e8c5541c1d1a0a854fba06e11e695324 /src/log.c
parent787c6f5e18a6855b3c16a9957edef8da109d686b (diff)
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.
Diffstat (limited to 'src/log.c')
-rw-r--r--src/log.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/log.c b/src/log.c
index feae78bf..f0c8a9ca 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;
}
}