From f8cfff06863ae0d860446abc3e348ca7628ea87c Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 9 Jan 2009 05:19:17 +0000 Subject: [PATCH] Don't assume filenames are UTF-8. * xdgmime/xdgmimecache.c: * xdgmime/xdgmimeglob.c: Don't assume filenames are UTF-8. svn path=/trunk/; revision=7784 --- gio/ChangeLog | 8 ++++++++ gio/xdgmime/xdgmimecache.c | 23 +++++++++++------------ gio/xdgmime/xdgmimeglob.c | 13 ++++++------- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/gio/ChangeLog b/gio/ChangeLog index 3cf89c3..e2d5664 100644 --- a/gio/ChangeLog +++ b/gio/ChangeLog @@ -1,5 +1,13 @@ 2009-01-08 Matthias Clasen + Bug 565484 – g_content_type_guess passes non-UTF8 text to XDG + functions in non-UTF8 locale + + * xdgmime/xdgmimecache.c: + * xdgmime/xdgmimeglob.c: Don't assume filenames are UTF-8. + +2009-01-08 Matthias Clasen + * xdgmime/test-mime.c: Make tests work with current shared-mime-info. 2009-01-07 Matthias Clasen diff --git a/gio/xdgmime/xdgmimecache.c b/gio/xdgmime/xdgmimecache.c index c93472e..5bdac5b 100644 --- a/gio/xdgmime/xdgmimecache.c +++ b/gio/xdgmime/xdgmimecache.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -439,7 +440,7 @@ static int cache_glob_node_lookup_suffix (XdgMimeCache *cache, xdg_uint32_t n_entries, xdg_uint32_t offset, - xdg_unichar_t *file_name, + const char *file_name, int len, int ignore_case, MimeWeight mime_types[], @@ -456,7 +457,7 @@ cache_glob_node_lookup_suffix (XdgMimeCache *cache, character = file_name[len - 1]; if (ignore_case) - character = _xdg_ucs4_to_lower (character); + character = tolower (character); assert (character != 0); @@ -511,11 +512,11 @@ cache_glob_node_lookup_suffix (XdgMimeCache *cache, } static int -cache_glob_lookup_suffix (xdg_unichar_t *file_name, - int len, - int ignore_case, - MimeWeight mime_types[], - int n_mime_types) +cache_glob_lookup_suffix (const char *file_name, + int len, + int ignore_case, + MimeWeight mime_types[], + int n_mime_types) { int i, n; @@ -557,7 +558,6 @@ cache_glob_lookup_file_name (const char *file_name, MimeWeight mimes[10]; int n_mimes = 10; int i; - xdg_unichar_t *ucs4; int len; assert (file_name != NULL && n_mime_types > 0); @@ -567,12 +567,11 @@ cache_glob_lookup_file_name (const char *file_name, if (n > 0) return n; - ucs4 = _xdg_convert_to_ucs4 (file_name, &len); - n = cache_glob_lookup_suffix (ucs4, len, FALSE, mimes, n_mimes); + len = strlen (file_name); + n = cache_glob_lookup_suffix (file_name, len, FALSE, mimes, n_mimes); if (n == 0) - n = cache_glob_lookup_suffix (ucs4, len, TRUE, mimes, n_mimes); - free(ucs4); + n = cache_glob_lookup_suffix (file_name, len, TRUE, mimes, n_mimes); /* Last, try fnmatch */ if (n == 0) diff --git a/gio/xdgmime/xdgmimeglob.c b/gio/xdgmime/xdgmimeglob.c index 9aa9ad9..22acd3e 100644 --- a/gio/xdgmime/xdgmimeglob.c +++ b/gio/xdgmime/xdgmimeglob.c @@ -36,6 +36,7 @@ #include #include #include +#include #ifndef FALSE #define FALSE (0) @@ -297,7 +298,7 @@ typedef struct { static int _xdg_glob_hash_node_lookup_file_name (XdgGlobHashNode *glob_hash_node, - xdg_unichar_t *file_name, + const char *file_name, int len, int ignore_case, MimeWeight mime_types[], @@ -312,7 +313,7 @@ _xdg_glob_hash_node_lookup_file_name (XdgGlobHashNode *glob_hash_node, character = file_name[len - 1]; if (ignore_case) - character = _xdg_ucs4_to_lower(character); + character = tolower(character); for (node = glob_hash_node; node && character >= node->character; node = node->next) { @@ -392,15 +393,13 @@ _xdg_glob_hash_lookup_file_name (XdgGlobHash *glob_hash, } } - ucs4 = _xdg_convert_to_ucs4 (file_name, &len); - n = _xdg_glob_hash_node_lookup_file_name (glob_hash->simple_node, ucs4, len, FALSE, + len = strlen (file_name); + n = _xdg_glob_hash_node_lookup_file_name (glob_hash->simple_node, file_name, len, FALSE, mimes, n_mimes); if (n == 0) - n = _xdg_glob_hash_node_lookup_file_name (glob_hash->simple_node, ucs4, len, TRUE, + n = _xdg_glob_hash_node_lookup_file_name (glob_hash->simple_node, file_name, len, TRUE, mimes, n_mimes); - free(ucs4); - /* FIXME: Not UTF-8 safe */ if (n == 0) { for (list = glob_hash->full_list; list && n < n_mime_types; list = list->next) -- 2.7.4