Efreet: Fix caching of recursive directories

SVN revision: 62985
This commit is contained in:
Sebastian Dransfeld 2011-08-30 12:19:19 +00:00
parent a4e32175bb
commit dc78efed2b
2 changed files with 15 additions and 17 deletions

View File

@ -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);

View File

@ -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));
}