Yasumichi Akahoshi
yasum****@users*****
2005年 9月 2日 (金) 01:23:59 JST
Index: libcxp/src/cxp-mime-manager.c diff -u libcxp/src/cxp-mime-manager.c:1.1 libcxp/src/cxp-mime-manager.c:1.2 --- libcxp/src/cxp-mime-manager.c:1.1 Wed Aug 31 23:15:22 2005 +++ libcxp/src/cxp-mime-manager.c Fri Sep 2 01:23:59 2005 @@ -34,6 +34,7 @@ gchar *country; gchar *last_matched; gchar *common; + gchar **xdgdirs; gint parse_flag; GHashTable *comments; }; @@ -110,6 +111,7 @@ obj->priv->common = NULL; obj->priv->parse_flag = NO_NEED_PARSE; obj->priv->comments = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); + obj->priv->xdgdirs = g_strsplit (g_getenv("XDG_DATA_DIRS"), ":", 0); } static void @@ -122,6 +124,7 @@ g_free(cobj->priv->lang); g_free(cobj->priv->country); g_hash_table_destroy (cobj->priv->comments); + g_strfreev (cobj->priv->xdgdirs); g_free(cobj->priv); G_OBJECT_CLASS(parent_class)->finalize(object); @@ -214,6 +217,7 @@ gchar *filename; gchar *content; gssize len; + gint idx; GMarkupParseContext *context; GMarkupParser parser = { cxp_mime_manager_on_start_element, @@ -227,30 +231,34 @@ { manager->priv->parse_flag = NO_NEED_PARSE; - filename = g_strdup_printf("/usr/share/mime/%s.xml", mimetype); - if (g_file_get_contents (filename, &content, &len, NULL)) + for(idx=0; manager->priv->xdgdirs[idx] != NULL; idx++) { - context = g_markup_parse_context_new (&parser, 0, manager, NULL); - g_markup_parse_context_parse (context, content, len, NULL); - g_markup_parse_context_free (context); - if(manager->priv->last_matched != NULL) - { - result = g_strdup (manager->priv->last_matched); - g_hash_table_replace (manager->priv->comments, g_strdup(mimetype), manager->priv->last_matched); - g_free (manager->priv->common); - } - else + filename = g_strdup_printf("%s/mime/%s.xml", manager->priv->xdgdirs[idx], mimetype); + if (g_file_get_contents (filename, &content, &len, NULL)) { - result = g_strdup (manager->priv->common); - g_hash_table_replace (manager->priv->comments, g_strdup(mimetype), manager->priv->common); + context = g_markup_parse_context_new (&parser, 0, manager, NULL); + g_markup_parse_context_parse (context, content, len, NULL); + g_markup_parse_context_free (context); + if(manager->priv->last_matched != NULL) + { + result = g_strdup (manager->priv->last_matched); + g_hash_table_replace (manager->priv->comments, g_strdup(mimetype), manager->priv->last_matched); + g_free (manager->priv->common); + } + else + { + result = g_strdup (manager->priv->common); + g_hash_table_replace (manager->priv->comments, g_strdup(mimetype), manager->priv->common); + } + break; } + g_free (filename); } - else + if(result == NULL) { result = g_strdup ("unknown file"); g_hash_table_replace (manager->priv->comments, g_strdup(mimetype), g_strdup("unknown file")); } - g_free (filename); } return result;