efreet: Fix leak on error

If we encountered an error, special hashes in internal desktop struct
wasn't free'd.
This commit is contained in:
Sebastian Dransfeld 2014-09-25 09:01:12 +02:00
parent 793fd5e847
commit 0f4f0a7e5e
1 changed files with 6 additions and 14 deletions

View File

@ -651,35 +651,27 @@ efreet_menu_parse(const char *path)
if (!efreet_menu_handle_menu(internal, xml)) if (!efreet_menu_handle_menu(internal, xml))
{ {
efreet_xml_del(xml); efreet_xml_del(xml);
efreet_menu_internal_free(internal); goto error;
return NULL;
} }
efreet_xml_del(xml); efreet_xml_del(xml);
efreet_menu_resolve_moves(internal); efreet_menu_resolve_moves(internal);
if (!efreet_menu_process_dirs(internal)) if (!efreet_menu_process_dirs(internal))
{ goto error;
efreet_menu_internal_free(internal);
return NULL;
}
/* handle all .desktops */ /* handle all .desktops */
if (!efreet_menu_process(internal, 0)) if (!efreet_menu_process(internal, 0))
{ goto error;
efreet_menu_internal_free(internal);
return NULL;
}
/* handle menus with only unallocated .desktops */ /* handle menus with only unallocated .desktops */
if (!efreet_menu_process(internal, 1)) if (!efreet_menu_process(internal, 1))
{ goto error;
efreet_menu_internal_free(internal);
return NULL;
}
/* layout menu */ /* layout menu */
entry = efreet_menu_layout_menu(internal); entry = efreet_menu_layout_menu(internal);
error:
IF_FREE_HASH(internal->efreet_merged_menus); IF_FREE_HASH(internal->efreet_merged_menus);
IF_FREE_HASH(internal->efreet_merged_dirs); IF_FREE_HASH(internal->efreet_merged_dirs);
efreet_menu_internal_free(internal); efreet_menu_internal_free(internal);