path: autodetect filesystem encoding on Win32
WinAPI explicitly declares filesystem encoding. It can be determined by GetACP(). Use that instead of Glib routine that always "detects" UTF-8 on Win32, which is incorrect for MPD case.
This commit is contained in:
parent
c30c46cd5f
commit
6452461c39
1
NEWS
1
NEWS
|
@ -1,6 +1,7 @@
|
|||
ver 0.16.6 (2010/??/??)
|
||||
* event_pipe: fix WIN32 regression
|
||||
* define WINVER in ./configure
|
||||
* WIN32: autodetect filesystem encoding
|
||||
|
||||
|
||||
ver 0.16.5 (2010/10/09)
|
||||
|
|
16
src/path.c
16
src/path.c
|
@ -27,6 +27,11 @@
|
|||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
#include <windows.h> // for GetACP()
|
||||
#include <stdio.h> // for sprintf()
|
||||
#endif
|
||||
|
||||
#undef G_LOG_DOMAIN
|
||||
#define G_LOG_DOMAIN "path"
|
||||
|
||||
|
@ -85,11 +90,22 @@ void path_global_init(void)
|
|||
|
||||
charset = config_get_string(CONF_FS_CHARSET, NULL);
|
||||
if (charset == NULL) {
|
||||
#ifndef G_OS_WIN32
|
||||
const gchar **encodings;
|
||||
g_get_filename_charsets(&encodings);
|
||||
|
||||
if (encodings[0] != NULL && *encodings[0] != '\0')
|
||||
charset = encodings[0];
|
||||
#else /* G_OS_WIN32 */
|
||||
/* Glib claims that file system encoding is always utf-8
|
||||
* on native Win32 (i.e. not Cygwin).
|
||||
* However this is true only if <gstdio.h> helpers are used.
|
||||
* MPD uses regular <stdio.h> functions.
|
||||
* Those functions use encoding determined by GetACP(). */
|
||||
char win_charset[13];
|
||||
sprintf(win_charset, "cp%u", GetACP());
|
||||
charset = win_charset;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (charset) {
|
||||
|
|
Loading…
Reference in New Issue