2009-01-08 Matthias Clasen <mclasen@redhat.com>
+ 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 <mclasen@redhat.com>
+
* xdgmime/test-mime.c: Make tests work with current shared-mime-info.
2009-01-07 Matthias Clasen <mclasen@redhat.com>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <ctype.h>
#include <fcntl.h>
#include <unistd.h>
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[],
character = file_name[len - 1];
if (ignore_case)
- character = _xdg_ucs4_to_lower (character);
+ character = tolower (character);
assert (character != 0);
}
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;
MimeWeight mimes[10];
int n_mimes = 10;
int i;
- xdg_unichar_t *ucs4;
int len;
assert (file_name != NULL && n_mime_types > 0);
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)
#include <assert.h>
#include <string.h>
#include <fnmatch.h>
+#include <ctype.h>
#ifndef FALSE
#define FALSE (0)
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[],
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)
{
}
}
- 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)