[PATCH] winemenubuilder: Simplify MIME types list management
Nikolay Sivov
nsivov at codeweavers.com
Mon Dec 21 16:23:29 CST 2015
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
programs/winemenubuilder/winemenubuilder.c | 53 ++++++++++++------------------
1 file changed, 21 insertions(+), 32 deletions(-)
diff --git a/programs/winemenubuilder/winemenubuilder.c b/programs/winemenubuilder/winemenubuilder.c
index e6fd042..2b7340f 100644
--- a/programs/winemenubuilder/winemenubuilder.c
+++ b/programs/winemenubuilder/winemenubuilder.c
@@ -2102,16 +2102,13 @@ static void free_native_mime_types(struct list *native_mime_types)
HeapFree(GetProcessHeap(), 0, mime_type_entry->mimeType);
HeapFree(GetProcessHeap(), 0, mime_type_entry);
}
- HeapFree(GetProcessHeap(), 0, native_mime_types);
}
-static BOOL build_native_mime_types(const char *xdg_data_home, struct list **mime_types)
+static BOOL build_native_mime_types(const char *xdg_data_home, struct list *mime_types)
{
char *xdg_data_dirs;
BOOL ret;
- *mime_types = NULL;
-
xdg_data_dirs = getenv("XDG_DATA_DIRS");
if (xdg_data_dirs == NULL)
xdg_data_dirs = heap_printf("/usr/local/share/:/usr/share/");
@@ -2120,39 +2117,29 @@ static BOOL build_native_mime_types(const char *xdg_data_home, struct list **mim
if (xdg_data_dirs)
{
- *mime_types = HeapAlloc(GetProcessHeap(), 0, sizeof(struct list));
- if (*mime_types)
- {
- const char *begin;
- char *end;
+ const char *begin;
+ char *end;
- list_init(*mime_types);
- ret = add_mimes(xdg_data_home, *mime_types);
- if (ret)
+ ret = add_mimes(xdg_data_home, mime_types);
+ if (ret)
+ {
+ for (begin = xdg_data_dirs; (end = strchr(begin, ':')); begin = end + 1)
{
- for (begin = xdg_data_dirs; (end = strchr(begin, ':')); begin = end + 1)
- {
- *end = '\0';
- ret = add_mimes(begin, *mime_types);
- *end = ':';
- if (!ret)
- break;
- }
- if (ret)
- ret = add_mimes(begin, *mime_types);
+ *end = '\0';
+ ret = add_mimes(begin, mime_types);
+ *end = ':';
+ if (!ret)
+ break;
}
+ if (ret)
+ ret = add_mimes(begin, mime_types);
}
- else
- ret = FALSE;
HeapFree(GetProcessHeap(), 0, xdg_data_dirs);
}
else
ret = FALSE;
- if (!ret && *mime_types)
- {
- free_native_mime_types(*mime_types);
- *mime_types = NULL;
- }
+ if (!ret)
+ free_native_mime_types(mime_types);
return ret;
}
@@ -2557,7 +2544,7 @@ static BOOL generate_associations(const char *xdg_data_home, const char *package
{
static const WCHAR openW[] = {'o','p','e','n',0};
struct wine_rb_tree mimeProgidTree;
- struct list *nativeMimeTypes = NULL;
+ struct list nativeMimeTypes;
LSTATUS ret = 0;
int i;
BOOL hasChanged = FALSE;
@@ -2567,6 +2554,8 @@ static BOOL generate_associations(const char *xdg_data_home, const char *package
WINE_ERR("wine_rb_init failed\n");
return FALSE;
}
+
+ list_init(&nativeMimeTypes);
if (!build_native_mime_types(xdg_data_home, &nativeMimeTypes))
{
WINE_ERR("could not build native MIME types\n");
@@ -2634,7 +2623,7 @@ static BOOL generate_associations(const char *xdg_data_home, const char *package
if (contentTypeW)
strlwrW(contentTypeW);
- if (!freedesktop_mime_type_for_extension(nativeMimeTypes, extensionA, extensionW, &mimeTypeA))
+ if (!freedesktop_mime_type_for_extension(&nativeMimeTypes, extensionA, extensionW, &mimeTypeA))
goto end;
if (mimeTypeA == NULL)
@@ -2780,7 +2769,7 @@ static BOOL generate_associations(const char *xdg_data_home, const char *package
}
wine_rb_destroy(&mimeProgidTree, winemenubuilder_rb_destroy, NULL);
- free_native_mime_types(nativeMimeTypes);
+ free_native_mime_types(&nativeMimeTypes);
return hasChanged;
}
--
2.6.4
More information about the wine-patches
mailing list