From dc78efed2beee20da5a4d14e2e9d4d2463f13878 Mon Sep 17 00:00:00 2001 From: Sebastian Dransfeld Date: Tue, 30 Aug 2011 12:19:19 +0000 Subject: [PATCH] Efreet: Fix caching of recursive directories SVN revision: 62985 --- .../src/bin/efreet_desktop_cache_create.c | 21 ++++++++++++------- legacy/efreet/src/lib/efreet_cache.c | 11 +--------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/legacy/efreet/src/bin/efreet_desktop_cache_create.c b/legacy/efreet/src/bin/efreet_desktop_cache_create.c index 84630a07ce..bcc6bad754 100644 --- a/legacy/efreet/src/bin/efreet_desktop_cache_create.c +++ b/legacy/efreet/src/bin/efreet_desktop_cache_create.c @@ -35,6 +35,12 @@ static Eina_Hash *generic_name = NULL; static Eina_Hash *comment = NULL; static Eina_Hash *exec = NULL; +static int +strcmplen(const void *data1, const void *data2) +{ + return strncmp(data1, data2, eina_stringshare_strlen(data1)); +} + static int cache_add(const char *path, const char *file_id, int priority __UNUSED__, int *changed) { @@ -200,7 +206,7 @@ main(int argc, char **argv) Efreet_Cache_Hash hash; Efreet_Cache_Version version; Eina_List *dirs = NULL; - Eina_List *scanned = NULL; + Eina_List *system = NULL; Efreet_Cache_Array_String *user_dirs = NULL; Eina_List *extra_dirs = NULL; Eina_List *store_dirs = NULL; @@ -320,7 +326,7 @@ main(int argc, char **argv) char file_id[PATH_MAX] = { '\0' }; if (!cache_scan(path, file_id, priority++, 1, &changed)) goto error; - scanned = eina_list_append(scanned, path); + system = eina_list_append(system, path); } if (user_dirs) @@ -329,11 +335,10 @@ main(int argc, char **argv) for (j = 0; j < user_dirs->array_count; j++) { - if (eina_list_search_unsorted_list(scanned, EINA_COMPARE_CB(strcmp), user_dirs->array[j])) + if (eina_list_search_unsorted_list(system, strcmplen, user_dirs->array[j])) continue; if (!ecore_file_is_dir(user_dirs->array[j])) continue; if (!cache_scan(user_dirs->array[j], NULL, priority, 0, &changed)) goto error; - scanned = eina_list_append(scanned, eina_stringshare_add(user_dirs->array[j])); store_dirs = eina_list_append(store_dirs, user_dirs->array[j]); } @@ -346,7 +351,9 @@ main(int argc, char **argv) EINA_LIST_FOREACH(extra_dirs, l, path) { - if (eina_list_search_unsorted_list(scanned, EINA_COMPARE_CB(strcmp), path)) + if (eina_list_search_unsorted_list(system, strcmplen, path)) + continue; + if (eina_list_search_unsorted_list(store_dirs, EINA_COMPARE_CB(strcmp), path)) continue; if (!ecore_file_is_dir(path)) continue; @@ -479,7 +486,7 @@ main(int argc, char **argv) close(tmpfd); } - EINA_LIST_FREE(scanned, dir) + EINA_LIST_FREE(system, dir) eina_stringshare_del(dir); eina_list_free(extra_dirs); eina_list_free(store_dirs); @@ -500,7 +507,7 @@ efreet_error: ecore_error: eet_shutdown(); eet_error: - EINA_LIST_FREE(scanned, dir) + EINA_LIST_FREE(system, dir) eina_stringshare_del(dir); eina_list_free(extra_dirs); eina_list_free(store_dirs); diff --git a/legacy/efreet/src/lib/efreet_cache.c b/legacy/efreet/src/lib/efreet_cache.c index 4f3d6ce51d..424f46976b 100644 --- a/legacy/efreet/src/lib/efreet_cache.c +++ b/legacy/efreet/src/lib/efreet_cache.c @@ -109,8 +109,6 @@ static void icon_cache_update_free(void *data, void *ev); static void *hash_array_string_add(void *hash, const char *key, void *data); -static int strcmplen(const void *data1, const void *data2); - EAPI int EFREET_EVENT_ICON_CACHE_UPDATE = 0; EAPI int EFREET_EVENT_DESKTOP_CACHE_UPDATE = 0; EAPI int EFREET_EVENT_DESKTOP_CACHE_BUILD = 0; @@ -928,7 +926,7 @@ efreet_cache_desktop_add(Efreet_Desktop *desktop) } efreet_cache_array_string_free(arr); } - if (!eina_list_search_unsorted_list(desktop_dirs_add, strcmplen, dir)) + if (!eina_list_search_unsorted_list(desktop_dirs_add, EINA_COMPARE_CB(strcmp), dir)) desktop_dirs_add = eina_list_append(desktop_dirs_add, eina_stringshare_add(dir)); efreet_cache_desktop_update(); @@ -1385,10 +1383,3 @@ hash_array_string_add(void *hash, const char *key, void *data) eina_hash_add(hash, key, data); return hash; } - -static int -strcmplen(const void *data1, const void *data2) -{ - return strncmp(data1, data2, strlen(data1)); -} -