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.
This commit is contained in:
parent
055257a210
commit
25d053cbf2
1
NEWS
1
NEWS
|
@ -1,6 +1,7 @@
|
||||||
ver 0.16.9 (2012/??/??)
|
ver 0.16.9 (2012/??/??)
|
||||||
* decoder:
|
* decoder:
|
||||||
- ffmpeg: support WebM
|
- ffmpeg: support WebM
|
||||||
|
* WIN32: fix renaming of stored playlists with non-ASCII names
|
||||||
|
|
||||||
|
|
||||||
ver 0.16.8 (2012/04/04)
|
ver 0.16.8 (2012/04/04)
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "output_list.h"
|
#include "output_list.h"
|
||||||
#include "ls.h"
|
#include "ls.h"
|
||||||
#include "mpd_error.h"
|
#include "mpd_error.h"
|
||||||
|
#include "glib_compat.h"
|
||||||
|
|
||||||
#ifdef ENABLE_ENCODER
|
#ifdef ENABLE_ENCODER
|
||||||
#include "encoder_list.h"
|
#include "encoder_list.h"
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "decoder_api.h"
|
#include "decoder_api.h"
|
||||||
|
#include "glib_compat.h"
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
|
|
|
@ -74,4 +74,32 @@ g_uri_parse_scheme(const char *uri)
|
||||||
|
|
||||||
#endif
|
#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
|
#endif
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include "uri.h"
|
#include "uri.h"
|
||||||
#include "database.h"
|
#include "database.h"
|
||||||
#include "idle.h"
|
#include "idle.h"
|
||||||
|
#include "glib_compat.h"
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include "decoder_list.h"
|
#include "decoder_list.h"
|
||||||
#include "decoder_plugin.h"
|
#include "decoder_plugin.h"
|
||||||
#include "playlist_list.h"
|
#include "playlist_list.h"
|
||||||
|
#include "glib_compat.h"
|
||||||
#include "conf.h"
|
#include "conf.h"
|
||||||
|
|
||||||
#ifdef ENABLE_ARCHIVE
|
#ifdef ENABLE_ARCHIVE
|
||||||
|
|
Loading…
Reference in New Issue