Enlightenment CVS committal Author : shorne Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_int_config_intl.c Log Message: Free up configuration data =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_intl.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- e_int_config_intl.c 21 Sep 2006 10:58:42 -0000 1.1 +++ e_int_config_intl.c 21 Sep 2006 11:52:52 -0000 1.2 @@ -27,6 +27,9 @@ static Evas_Bool _lang_hash_cb(Evas_Hash *hash, const char *key, void *data, void *fdata); static Evas_Bool _region_hash_cb(Evas_Hash *hash, const char *key, void *data, void *fdata); +static Evas_Bool _language_hash_free_cb(Evas_Hash *hash, const char *key, void *data, void *fdata); +static Evas_Bool _region_hash_free_cb(Evas_Hash *hash, const char *key, void *data, void *fdata); + struct _E_Intl_Pair { const char *locale_key; @@ -675,8 +678,59 @@ _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { E_FREE(cfdata->cur_language); + E_FREE(cfdata->cur_blang); + E_FREE(cfdata->cur_lang); + E_FREE(cfdata->cur_reg); + E_FREE(cfdata->cur_cs); + E_FREE(cfdata->cur_mod); + evas_hash_foreach(cfdata->locale_hash, _language_hash_free_cb, NULL); + evas_hash_free(cfdata->locale_hash); + free(cfdata); +} + +static Evas_Bool +_language_hash_free_cb(Evas_Hash *hash, const char *key, void *data, void *fdata) +{ + E_Intl_Language_Node *node; + + node = data; + if (node->lang_code) evas_stringshare_del(node->lang_code); + evas_hash_foreach(node->region_hash, _region_hash_free_cb, NULL); + evas_hash_free(node->region_hash); + free(node); + + return 1; +} + +static Evas_Bool +_region_hash_free_cb(Evas_Hash *hash, const char *key, void *data, void *fdata) +{ + E_Intl_Region_Node *node; + + node = data; + if (node->region_code) evas_stringshare_del(node->region_code); + while (node->available_codesets) + { + const char *str; + + str = node->available_codesets->data; + if (str) evas_stringshare_del(str); + node->available_codesets = evas_list_remove_list(node->available_codesets, node->available_codesets); + } + + while (node->available_modifiers) + { + const char *str; + + str = node->available_modifiers->data; + if (str) evas_stringshare_del(str); + node->available_modifiers = evas_list_remove_list(node->available_modifiers, node->available_modifiers); + } + + free(node); + return 1; } static int ------------------------------------------------------------------------- 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