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/??/??)
|
ver 0.16.6 (2010/??/??)
|
||||||
* event_pipe: fix WIN32 regression
|
* event_pipe: fix WIN32 regression
|
||||||
* define WINVER in ./configure
|
* define WINVER in ./configure
|
||||||
|
* WIN32: autodetect filesystem encoding
|
||||||
|
|
||||||
|
|
||||||
ver 0.16.5 (2010/10/09)
|
ver 0.16.5 (2010/10/09)
|
||||||
|
16
src/path.c
16
src/path.c
@ -27,6 +27,11 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef G_OS_WIN32
|
||||||
|
#include <windows.h> // for GetACP()
|
||||||
|
#include <stdio.h> // for sprintf()
|
||||||
|
#endif
|
||||||
|
|
||||||
#undef G_LOG_DOMAIN
|
#undef G_LOG_DOMAIN
|
||||||
#define G_LOG_DOMAIN "path"
|
#define G_LOG_DOMAIN "path"
|
||||||
|
|
||||||
@ -85,11 +90,22 @@ void path_global_init(void)
|
|||||||
|
|
||||||
charset = config_get_string(CONF_FS_CHARSET, NULL);
|
charset = config_get_string(CONF_FS_CHARSET, NULL);
|
||||||
if (charset == NULL) {
|
if (charset == NULL) {
|
||||||
|
#ifndef G_OS_WIN32
|
||||||
const gchar **encodings;
|
const gchar **encodings;
|
||||||
g_get_filename_charsets(&encodings);
|
g_get_filename_charsets(&encodings);
|
||||||
|
|
||||||
if (encodings[0] != NULL && *encodings[0] != '\0')
|
if (encodings[0] != NULL && *encodings[0] != '\0')
|
||||||
charset = encodings[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) {
|
if (charset) {
|
||||||
|
Loading…
Reference in New Issue
Block a user