From e9b089452a9959ff804e7a6f8b3b76d7299e58a8 Mon Sep 17 00:00:00 2001 From: "yigang.jing" Date: Wed, 14 Nov 2012 13:14:59 +0800 Subject: [PATCH] [Bug] free per node while freeing eina_list in Setting >Storage . Change-Id: I0a0f80791defd4cd1d9ce9bcca8820ed8d59b828 --- setting-storage/src/setting-storage-main.c | 24 +++++++++++++++ .../src/setting-storage-miscellaneous-files.c | 36 ++++++++++++++++++++-- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/setting-storage/src/setting-storage-main.c b/setting-storage/src/setting-storage-main.c index 67ad910..84ad3ef 100755 --- a/setting-storage/src/setting-storage-main.c +++ b/setting-storage/src/setting-storage-main.c @@ -243,11 +243,23 @@ static long long __setting_storage_main_folder_size_get(char *path) } if (file_list) { + Eina_List *l = NULL; + Node_Info *node = NULL; + EINA_LIST_FOREACH(file_list, l, node) + { + FREE(node); + } eina_list_free(file_list); file_list = NULL; } if (dir_list) { + Eina_List *l = NULL; + Node_Info *node = NULL; + EINA_LIST_FOREACH(dir_list, l, node) + { + FREE(node); + } eina_list_free(dir_list); dir_list = NULL; } @@ -574,11 +586,23 @@ static double __setting_storage_main_miscellaneous_size_get() } if (file_list) { + Eina_List *l = NULL; + Node_Info *node = NULL; + EINA_LIST_FOREACH(file_list, l, node) + { + FREE(node); + } eina_list_free(file_list); file_list = NULL; } if (dir_list) { + Eina_List *l = NULL; + Node_Info *node = NULL; + EINA_LIST_FOREACH(dir_list, l, node) + { + FREE(node); + } eina_list_free(dir_list); dir_list = NULL; } diff --git a/setting-storage/src/setting-storage-miscellaneous-files.c b/setting-storage/src/setting-storage-miscellaneous-files.c index 08055eb..e3021a8 100755 --- a/setting-storage/src/setting-storage-miscellaneous-files.c +++ b/setting-storage/src/setting-storage-miscellaneous-files.c @@ -136,7 +136,8 @@ static int setting_storage_miscellaneous_files_create(void *cb) pNode = (Node_Info *)eina_list_nth(list, i); if (pNode == NULL) continue; - list_data->chk_items[i].item_name = pNode->name; + G_FREE(list_data->chk_items[i].item_name); + list_data->chk_items[i].item_name = (char *)g_strdup(pNode->name); } list_data->cur_item_num = i; @@ -145,6 +146,12 @@ static int setting_storage_miscellaneous_files_create(void *cb) elm_object_part_content_set(view_layout, "elm.swallow.contents", scroller); if (list) { + Eina_List *l = NULL; + Node_Info *node = NULL; + EINA_LIST_FOREACH(list, l, node) + { + FREE(node); + } eina_list_free(list); list = NULL; } @@ -165,6 +172,11 @@ static int setting_storage_miscellaneous_files_destroy(void *cb) retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER); SettingStorageUG *ad = (SettingStorageUG *)cb; + int i = 0; + for (; i < MAX_RESET_MENU_NUM; i++) { + G_FREE(ad->miscellaneous_list.chk_items[i].item_name); + } + if (ad->miscellaneous_list.selInfoPop) { evas_object_del(ad->miscellaneous_list.selInfoPop); ad->miscellaneous_list.selInfoPop = NULL; @@ -254,11 +266,23 @@ static int __setting_storage_file_remove(char *path) } if (file_list) { + Eina_List *l = NULL; + Node_Info *node = NULL; + EINA_LIST_FOREACH(file_list, l, node) + { + FREE(node); + } eina_list_free(file_list); file_list = NULL; } if (dir_list) { + Eina_List *l = NULL; + Node_Info *node = NULL; + EINA_LIST_FOREACH(dir_list, l, node) + { + FREE(node); + } eina_list_free(dir_list); dir_list = NULL; } @@ -293,7 +317,9 @@ static void __setting_storage_miscellaneous_files_genlist_update(void *data) pNode = (Node_Info *)eina_list_nth(list, i); if (pNode == NULL) continue; - ad->miscellaneous_list.chk_items[i].item_name = pNode->name; + + G_FREE(ad->miscellaneous_list.chk_items[i].item_name); + ad->miscellaneous_list.chk_items[i].item_name = (char *)g_strdup(pNode->name); } ad->miscellaneous_list.cur_item_num = i; @@ -302,6 +328,12 @@ static void __setting_storage_miscellaneous_files_genlist_update(void *data) elm_object_part_content_set(view_layout, "elm.swallow.contents", scroller); if (list) { + Eina_List *l = NULL; + Node_Info *node = NULL; + EINA_LIST_FOREACH(list, l, node) + { + FREE(node); + } eina_list_free(list); list = NULL; } -- 2.7.4