Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet
Dir : e17/libs/efreet/src/lib Modified Files: efreet_desktop.c Log Message: Don't reallocate the Efreet_Desktop on re-read =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_desktop.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- efreet_desktop.c 26 Mar 2007 16:17:40 -0000 1.9 +++ efreet_desktop.c 27 Mar 2007 19:41:23 -0000 1.10 @@ -46,6 +46,8 @@ }; static Efreet_Desktop *efreet_desktop_new(const char *file); +static int efreet_desktop_read(Efreet_Desktop *desktop); +static void efreet_desktop_clear(Efreet_Desktop *desktop); static Efreet_Desktop_Type_Info *efreet_desktop_type_parse(const char *type_str); static Ecore_List *efreet_desktop_string_list_parse(const char *string); static char *efreet_desktop_string_list_join(Ecore_List *list); @@ -193,6 +195,10 @@ if (efreet_desktop_cache_check(desktop)) return desktop; + efreet_desktop_clear(desktop); + if (efreet_desktop_read(desktop)) + return desktop; + ecore_hash_remove(efreet_desktop_cache, file); efreet_desktop_free(desktop); } @@ -235,9 +241,6 @@ efreet_desktop_new(const char *file) { Efreet_Desktop *desktop; - Efreet_Ini *ini; - int error = 0; - int ok; desktop = NEW(Efreet_Desktop, 1); if (!desktop) return NULL; @@ -245,13 +248,32 @@ desktop->orig_path = strdup(file); desktop->load_time = ecore_time_get(); - ini = efreet_ini_new(file); + if (!efreet_desktop_read(desktop)) + { + efreet_desktop_free(desktop); + return NULL; + } + return desktop; +} + +/** + * @internal + * @param desktop: The desktop to fill + * @return Returns 1 on success, 0 on failure + * @brief initialize an Efreet_Desktop from the contents of @a file + */ +static int +efreet_desktop_read(Efreet_Desktop *desktop) +{ + Efreet_Ini *ini; + int error = 0; + int ok; + + ini = efreet_ini_new(desktop->orig_path); if (!ini->data) { efreet_ini_free(ini); - IF_FREE(desktop->orig_path); - free(desktop); - return NULL; + return 0; } ok = efreet_ini_section_set(ini, "Desktop Entry"); @@ -287,11 +309,45 @@ efreet_ini_free(ini); - if (!error) - return desktop; + if (error) return 0; - efreet_desktop_free(desktop); - return NULL; + return 1; +} + +/** + * @internal + * @param desktop: The Efreet_Desktop to work with + * @return Returns no value + * @brief Frees the Efreet_Desktop's data + */ +static void +efreet_desktop_clear(Efreet_Desktop *desktop) +{ + IF_FREE(desktop->name); + IF_FREE(desktop->generic_name); + IF_FREE(desktop->comment); + IF_FREE(desktop->icon); + IF_FREE(desktop->url); + + IF_FREE(desktop->try_exec); + IF_FREE(desktop->exec); + IF_FREE(desktop->path); + IF_FREE(desktop->startup_wm_class); + + IF_FREE_LIST(desktop->only_show_in); + IF_FREE_LIST(desktop->not_show_in); + IF_FREE_LIST(desktop->categories); + IF_FREE_LIST(desktop->mime_types); + + IF_FREE_HASH(desktop->x); + + if (desktop->type_data) + { + Efreet_Desktop_Type_Info *info; + info = ecore_list_goto_index(efreet_desktop_types, desktop->type); + if (info->free_func) + info->free_func(desktop->type_data); + } } /** ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs