diff options
author | Matthias Clasen <mclasen@redhat.com> | 2005-04-29 18:24:38 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2005-04-29 18:24:38 +0000 |
commit | 2464763a22d588cc7a30de8abc8e83428ab2d75d (patch) | |
tree | 6e67042850b4577b31394e156b29ff0156143fca /gtk/xdgmime | |
parent | eb92e0784ad81ffc4a3c94440b1dfcc9735c4dd3 (diff) | |
download | gtk+-2464763a22d588cc7a30de8abc8e83428ab2d75d.tar.gz |
Sync to upstream.
2005-04-29 Matthias Clasen <mclasen@redhat.com>
* Sync to upstream.
Diffstat (limited to 'gtk/xdgmime')
-rw-r--r-- | gtk/xdgmime/ChangeLog | 4 | ||||
-rw-r--r-- | gtk/xdgmime/xdgmime.c | 9 | ||||
-rw-r--r-- | gtk/xdgmime/xdgmime.h | 7 | ||||
-rw-r--r-- | gtk/xdgmime/xdgmimeint.c | 2 | ||||
-rw-r--r-- | gtk/xdgmime/xdgmimemagic.c | 13 |
5 files changed, 28 insertions, 7 deletions
diff --git a/gtk/xdgmime/ChangeLog b/gtk/xdgmime/ChangeLog index 1cd2486fe2..c746d85d72 100644 --- a/gtk/xdgmime/ChangeLog +++ b/gtk/xdgmime/ChangeLog @@ -1,3 +1,7 @@ +2005-04-29 Matthias Clasen <mclasen@redhat.com> + + * Sync to upstream. + 2005-04-08 Matthias Clasen <mclasen@redhat.com> * xdgmimecache.c (cache_magic_matchlet_compare_to_data) diff --git a/gtk/xdgmime/xdgmime.c b/gtk/xdgmime/xdgmime.c index 51a9c07f6a..6b400d9ebd 100644 --- a/gtk/xdgmime/xdgmime.c +++ b/gtk/xdgmime/xdgmime.c @@ -147,6 +147,7 @@ xdg_mime_init_from_directory (const char *directory) return FALSE; } } + free (file_name); file_name = malloc (strlen (directory) + strlen ("/mime/globs") + 1); strcpy (file_name, directory); strcat (file_name, "/mime/globs"); @@ -563,6 +564,12 @@ xdg_mime_shutdown (void) _xdg_mime_alias_list_free (alias_list); alias_list = NULL; } + + if (parent_list) + { + _xdg_mime_parent_list_free (parent_list); + parent_list = NULL; + } for (list = callback_list; list; list = list->next) (list->callback) (list->data); @@ -668,7 +675,7 @@ xdg_mime_mime_type_subclass (const char *mime, /* We really want to handle text/ * in GtkFileFilter, so we just * turn on the supertype matching */ -#if 1 +#if 1 /* Handle supertypes */ if (xdg_mime_is_super_type (ubase) && xdg_mime_media_type_equal (umime, ubase)) diff --git a/gtk/xdgmime/xdgmime.h b/gtk/xdgmime/xdgmime.h index db69b1243f..92ee60e26a 100644 --- a/gtk/xdgmime/xdgmime.h +++ b/gtk/xdgmime/xdgmime.h @@ -54,6 +54,7 @@ typedef void (*XdgMimeDestroy) (void *user_data); #define xdg_mime_media_type_equal XDG_ENTRY(media_type_equal) #define xdg_mime_mime_type_subclass XDG_ENTRY(mime_type_subclass) #define xdg_mime_get_mime_parents XDG_ENTRY(get_mime_parents) +#define xdg_mime_list_mime_parents XDG_ENTRY(list_mime_parents) #define xdg_mime_unalias_mime_type XDG_ENTRY(unalias_mime_type) #define xdg_mime_get_max_buffer_extents XDG_ENTRY(get_max_buffer_extents) #define xdg_mime_shutdown XDG_ENTRY(shutdown) @@ -77,7 +78,13 @@ int xdg_mime_media_type_equal (const char *mime_a, const char *mime_b); int xdg_mime_mime_type_subclass (const char *mime_a, const char *mime_b); + /* xdg_mime_get_mime_parents() is deprecated since it does + * not work correctly with caches. Use xdg_mime_list_parents() + * instead, but notice that that function expects you to free + * the array it returns. + */ const char **xdg_mime_get_mime_parents (const char *mime); +char ** xdg_mime_list_mime_parents (const char *mime); const char *xdg_mime_unalias_mime_type (const char *mime); int xdg_mime_get_max_buffer_extents (void); void xdg_mime_shutdown (void); diff --git a/gtk/xdgmime/xdgmimeint.c b/gtk/xdgmime/xdgmimeint.c index c24f8194ec..4a0ac4cc39 100644 --- a/gtk/xdgmime/xdgmimeint.c +++ b/gtk/xdgmime/xdgmimeint.c @@ -41,7 +41,7 @@ #define TRUE (!FALSE) #endif -static const unsigned char _xdg_utf8_skip_data[256] = { +static const char _xdg_utf8_skip_data[256] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, diff --git a/gtk/xdgmime/xdgmimemagic.c b/gtk/xdgmime/xdgmimemagic.c index b98c1e7321..352886d0f6 100644 --- a/gtk/xdgmime/xdgmimemagic.c +++ b/gtk/xdgmime/xdgmimemagic.c @@ -268,7 +268,7 @@ _xdg_mime_magic_parse_header (FILE *magic_file, XdgMimeMagicMatch *match) if (c != ':') return XDG_MIME_MAGIC_ERROR; - buffer = _xdg_mime_magic_read_to_newline (magic_file, &end_of_file); + buffer = (char *)_xdg_mime_magic_read_to_newline (magic_file, &end_of_file); if (end_of_file) return XDG_MIME_MAGIC_EOF; @@ -520,8 +520,7 @@ _xdg_mime_magic_matchlet_compare_to_data (XdgMimeMagicMatchlet *matchlet, size_t len) { int i, j; - - for (i = matchlet->offset; i <= matchlet->offset + matchlet->range_length; i++) + for (i = matchlet->offset; i < matchlet->offset + matchlet->range_length; i++) { int valid_matchlet = TRUE; @@ -657,16 +656,20 @@ _xdg_mime_magic_lookup_data (XdgMimeMagic *mime_magic, size_t len) { XdgMimeMagicMatch *match; + const char *mime_type; + mime_type = NULL; for (match = mime_magic->match_list; match; match = match->next) { if (_xdg_mime_magic_match_compare_to_data (match, data, len)) { - return match->mime_type; + if ((mime_type == NULL) || (xdg_mime_mime_type_subclass (match->mime_type, mime_type))) { + mime_type = match->mime_type; + } } } - return NULL; + return mime_type; } static void |