It turns out that the strategy introduced with my last patch didn't work properly for three or more matching MIME types, and we didn't allow 0 priorities. from xdgmime ChangeLog: 2006-02-25 Christian Neumair <chris gnome-de org> * src/xdgmimemagic.c: (_xdg_mime_magic_lookup_data): Make priority equality check more robust so that it works for three or more matches. Also allow matchlets with 0 priority. Attached is a GnomeVFS variant. OK to commit? -- Christian Neumair <chris gnome-de org>
Index: libgnomevfs/xdgmimemagic.c =================================================================== RCS file: /cvs/gnome/gnome-vfs/libgnomevfs/xdgmimemagic.c,v retrieving revision 1.13 diff -u -p -r1.13 xdgmimemagic.c --- libgnomevfs/xdgmimemagic.c 19 Feb 2006 16:29:57 -0000 1.13 +++ libgnomevfs/xdgmimemagic.c 25 Feb 2006 10:47:00 -0000 @@ -661,21 +662,27 @@ _xdg_mime_magic_lookup_data (XdgMimeMagi const char *mime_type; int n; int priority; + int had_match; mime_type = NULL; priority = 0; + had_match = 0; for (match = mime_magic->match_list; match; match = match->next) { if (_xdg_mime_magic_match_compare_to_data (match, data, len)) { - if ((mime_type == NULL) || (xdg_mime_mime_type_subclass (match->mime_type, mime_type)) || match->priority > priority) { - mime_type = match->mime_type; - priority = match->priority; - } else if (match->priority == priority) { + if (!had_match || match->priority > priority || + (mime_type != NULL && xdg_mime_mime_type_subclass (match->mime_type, mime_type))) + { + mime_type = match->mime_type; + priority = match->priority; + } + else if (had_match && match->priority == priority) /* multiple unrelated patterns with the same priority matched, * so we can't tell what type this is. */ mime_type = NULL; - } + + had_match = 1; } else {
Attachment:
signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil