aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis Krjuchkov <denis@crazydev.net>2012-06-03 13:00:11 +0600
committerMax Kellermann <max@duempel.org>2012-06-12 19:31:19 +0200
commit25d053cbf288fb966526c554bea6158ef5c38202 (patch)
treeceb3bda54406eec336aedf138ab326e966077a5f
parent055257a210015a623062ad3ad3cb8a40fbc6839f (diff)
downloadmpd-25d053cbf288fb966526c554bea6158ef5c38202.tar.gz
mpd-25d053cbf288fb966526c554bea6158ef5c38202.tar.xz
mpd-25d053cbf288fb966526c554bea6158ef5c38202.zip
Work around incorrect g_file_test() behavior on Win32
g_file_test is redefined to be g_file_test_utf8 and thus can't handle non-ASCII characters. This fix adds simple wrapper (taken from glib) that fixes encoding and calls g_file_test_utf8. All required inclusions of glib_compat.h are added as well.
-rw-r--r--NEWS1
-rw-r--r--src/cmdline.c1
-rw-r--r--src/decoder/wildmidi_decoder_plugin.c1
-rw-r--r--src/glib_compat.h28
-rw-r--r--src/playlist_save.c1
-rw-r--r--src/update_walk.c1
6 files changed, 33 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index 00972bab4..091548700 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,7 @@
ver 0.16.9 (2012/??/??)
* decoder:
- ffmpeg: support WebM
+* WIN32: fix renaming of stored playlists with non-ASCII names
ver 0.16.8 (2012/04/04)
diff --git a/src/cmdline.c b/src/cmdline.c
index d986c8eb8..b1482c350 100644
--- a/src/cmdline.c
+++ b/src/cmdline.c
@@ -27,6 +27,7 @@
#include "output_list.h"
#include "ls.h"
#include "mpd_error.h"
+#include "glib_compat.h"
#ifdef ENABLE_ENCODER
#include "encoder_list.h"
diff --git a/src/decoder/wildmidi_decoder_plugin.c b/src/decoder/wildmidi_decoder_plugin.c
index 66e6c61cf..5eb0638da 100644
--- a/src/decoder/wildmidi_decoder_plugin.c
+++ b/src/decoder/wildmidi_decoder_plugin.c
@@ -19,6 +19,7 @@
#include "config.h"
#include "decoder_api.h"
+#include "glib_compat.h"
#include <glib.h>
diff --git a/src/glib_compat.h b/src/glib_compat.h
index 4d0e7040d..0b96a662d 100644
--- a/src/glib_compat.h
+++ b/src/glib_compat.h
@@ -74,4 +74,32 @@ g_uri_parse_scheme(const char *uri)
#endif
+#if defined(G_OS_WIN32) && defined(g_file_test)
+
+/* Modern GLib on Win32 likes to use UTF-8 for file names.
+It redefines g_file_test() to be g_file_test_utf8().
+This gives incorrect results for non-ASCII files.
+Old g_file_test() is available for *binary compatibility*,
+but symbol is hidden from linker, we copy-paste its definition here */
+
+#undef g_file_test
+
+static inline gboolean
+g_file_test(const gchar *filename, GFileTest test)
+{
+ gchar *utf8_filename = g_locale_to_utf8(filename, -1, NULL, NULL, NULL);
+ gboolean retval;
+
+ if (utf8_filename == NULL)
+ return FALSE;
+
+ retval = g_file_test_utf8(utf8_filename, test);
+
+ g_free(utf8_filename);
+
+ return retval;
+}
+
+#endif
+
#endif
diff --git a/src/playlist_save.c b/src/playlist_save.c
index 8ddc93ec9..d290d889c 100644
--- a/src/playlist_save.c
+++ b/src/playlist_save.c
@@ -26,6 +26,7 @@
#include "uri.h"
#include "database.h"
#include "idle.h"
+#include "glib_compat.h"
#include <glib.h>
diff --git a/src/update_walk.c b/src/update_walk.c
index 5d2f778ff..b93c9c453 100644
--- a/src/update_walk.c
+++ b/src/update_walk.c
@@ -29,6 +29,7 @@
#include "decoder_list.h"
#include "decoder_plugin.h"
#include "playlist_list.h"
+#include "glib_compat.h"
#include "conf.h"
#ifdef ENABLE_ARCHIVE