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.
This commit is contained in:
Max Kellermann 2008-11-05 18:39:13 +01:00
parent 787c6f5e18
commit 130fa94423

View File

@ -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;
}
}