From 25d053cbf288fb966526c554bea6158ef5c38202 Mon Sep 17 00:00:00 2001 From: Denis Krjuchkov Date: Sun, 3 Jun 2012 13:00:11 +0600 Subject: 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. --- src/glib_compat.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/glib_compat.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 -- cgit v1.2.3