winemenubuilder: Simplify MIME types list management.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
c9fb3b7f8f
commit
f2538c6e26
@ -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->mimeType);
|
||||||
HeapFree(GetProcessHeap(), 0, mime_type_entry);
|
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;
|
char *xdg_data_dirs;
|
||||||
BOOL ret;
|
BOOL ret;
|
||||||
|
|
||||||
*mime_types = NULL;
|
|
||||||
|
|
||||||
xdg_data_dirs = getenv("XDG_DATA_DIRS");
|
xdg_data_dirs = getenv("XDG_DATA_DIRS");
|
||||||
if (xdg_data_dirs == NULL)
|
if (xdg_data_dirs == NULL)
|
||||||
xdg_data_dirs = heap_printf("/usr/local/share/:/usr/share/");
|
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)
|
if (xdg_data_dirs)
|
||||||
{
|
{
|
||||||
*mime_types = HeapAlloc(GetProcessHeap(), 0, sizeof(struct list));
|
const char *begin;
|
||||||
if (*mime_types)
|
char *end;
|
||||||
{
|
|
||||||
const char *begin;
|
|
||||||
char *end;
|
|
||||||
|
|
||||||
list_init(*mime_types);
|
ret = add_mimes(xdg_data_home, mime_types);
|
||||||
ret = add_mimes(xdg_data_home, *mime_types);
|
if (ret)
|
||||||
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 = '\0';
|
*end = ':';
|
||||||
ret = add_mimes(begin, *mime_types);
|
if (!ret)
|
||||||
*end = ':';
|
break;
|
||||||
if (!ret)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (ret)
|
|
||||||
ret = add_mimes(begin, *mime_types);
|
|
||||||
}
|
}
|
||||||
|
if (ret)
|
||||||
|
ret = add_mimes(begin, mime_types);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
ret = FALSE;
|
|
||||||
HeapFree(GetProcessHeap(), 0, xdg_data_dirs);
|
HeapFree(GetProcessHeap(), 0, xdg_data_dirs);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ret = FALSE;
|
ret = FALSE;
|
||||||
if (!ret && *mime_types)
|
if (!ret)
|
||||||
{
|
free_native_mime_types(mime_types);
|
||||||
free_native_mime_types(*mime_types);
|
|
||||||
*mime_types = NULL;
|
|
||||||
}
|
|
||||||
return ret;
|
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};
|
static const WCHAR openW[] = {'o','p','e','n',0};
|
||||||
struct wine_rb_tree mimeProgidTree;
|
struct wine_rb_tree mimeProgidTree;
|
||||||
struct list *nativeMimeTypes = NULL;
|
struct list nativeMimeTypes;
|
||||||
LSTATUS ret = 0;
|
LSTATUS ret = 0;
|
||||||
int i;
|
int i;
|
||||||
BOOL hasChanged = FALSE;
|
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");
|
WINE_ERR("wine_rb_init failed\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
list_init(&nativeMimeTypes);
|
||||||
if (!build_native_mime_types(xdg_data_home, &nativeMimeTypes))
|
if (!build_native_mime_types(xdg_data_home, &nativeMimeTypes))
|
||||||
{
|
{
|
||||||
WINE_ERR("could not build native MIME types\n");
|
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)
|
if (contentTypeW)
|
||||||
strlwrW(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;
|
goto end;
|
||||||
|
|
||||||
if (mimeTypeA == NULL)
|
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);
|
wine_rb_destroy(&mimeProgidTree, winemenubuilder_rb_destroy, NULL);
|
||||||
free_native_mime_types(nativeMimeTypes);
|
free_native_mime_types(&nativeMimeTypes);
|
||||||
return hasChanged;
|
return hasChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user