* efreet: Fix previously broken efreet cache.

SVN revision: 39211
This commit is contained in:
Cedric BAIL 2009-02-25 16:46:51 +00:00
parent 27f001875b
commit 0b41f0e138
5 changed files with 67 additions and 77 deletions

View File

@ -142,8 +142,8 @@ ef_cb_desktop_save(void)
desktop->generic_name = strdup("Test Application");
desktop->exec = strdup("efreet_test");
desktop->categories = NULL;
desktop->categories = eina_list_append(desktop->categories, strdup("Test"));
desktop->categories = eina_list_append(desktop->categories, strdup("Enlightenment"));
desktop->categories = eina_list_append(desktop->categories, eina_stringshare_add("Test"));
desktop->categories = eina_list_append(desktop->categories, eina_stringshare_add("Enlightenment"));
printf("save test: %d\n", efreet_desktop_save(desktop));
unlink("/tmp/test.desktop");
efreet_desktop_free(desktop);
@ -198,8 +198,7 @@ ef_cb_desktop_command_get(void)
expected = eina_list_append(expected, "app '/relative_uri'");
efreet_desktop_command_get(desktop, files, _cb_command, info);
while (expected)
expected = eina_list_remove_list(expected, expected);
expected = eina_list_free(expected);
/* test single uri */
info->type = 'u';
@ -211,8 +210,7 @@ ef_cb_desktop_command_get(void)
expected = eina_list_append(expected, "app 'file:///relative_uri'");
efreet_desktop_command_get(desktop, files, _cb_command, info);
while (expected)
expected = eina_list_remove_list(expected, expected);
expected = eina_list_free(expected);
/* test single dir */
info->type = 'd';
@ -224,8 +222,7 @@ ef_cb_desktop_command_get(void)
expected = eina_list_append(expected, "app '/'");
efreet_desktop_command_get(desktop, files, _cb_command, info);
while (expected)
expected = eina_list_remove_list(expected, expected);
expected = eina_list_free(expected);
/* test single names */
@ -238,8 +235,7 @@ ef_cb_desktop_command_get(void)
expected = eina_list_append(expected, "app 'relative_uri'");
efreet_desktop_command_get(desktop, files, _cb_command, info);
while (expected)
expected = eina_list_remove_list(expected, expected);
expected = eina_list_free(expected);
/* test multiple fullpaths */
info->type = 'F';
@ -248,8 +244,7 @@ ef_cb_desktop_command_get(void)
expected = eina_list_append(expected, "app '/tmp/absolute_path' '/relative_path' '/tmp/absolute_uri' '/relative_uri'");
efreet_desktop_command_get(desktop, files, _cb_command, info);
while (expected)
expected = eina_list_remove_list(expected, expected);
expected = eina_list_free(expected);
/* test multiple URIs */
info->type = 'U';
@ -258,8 +253,7 @@ ef_cb_desktop_command_get(void)
expected = eina_list_append(expected, "app 'file:///tmp/absolute_path' 'file:///relative_path' 'file:///tmp/absolute_uri' 'file:///relative_uri'");
efreet_desktop_command_get(desktop, files, _cb_command, info);
while (expected)
expected = eina_list_remove_list(expected, expected);
expected = eina_list_free(expected);
/* test multiple dirs */
info->type = 'D';
@ -268,8 +262,7 @@ ef_cb_desktop_command_get(void)
expected = eina_list_append(expected, "app '/tmp' '/' '/tmp' '/'");
efreet_desktop_command_get(desktop, files, _cb_command, info);
while (expected)
expected = eina_list_remove_list(expected, expected);
expected = eina_list_free(expected);
/* test multiple names */
info->type = 'N';
@ -278,8 +271,7 @@ ef_cb_desktop_command_get(void)
expected = eina_list_append(expected, "app 'absolute_path' 'relative_path' 'absolute_uri' 'relative_uri'");
efreet_desktop_command_get(desktop, files, _cb_command, info);
while (expected)
expected = eina_list_remove_list(expected, expected);
expected = eina_list_free(expected);
/* test icon appending */
info->type = 'i';
@ -288,8 +280,7 @@ ef_cb_desktop_command_get(void)
expected = eina_list_append(expected, "app --icon 'icon.png'");
efreet_desktop_command_get(desktop, NULL, _cb_command, info);
while (expected)
expected = eina_list_remove_list(expected, expected);
expected = eina_list_free(expected);
/* test app name */
info->type = 'c';
@ -298,8 +289,7 @@ ef_cb_desktop_command_get(void)
expected = eina_list_append(expected, "app 'App Name'");
efreet_desktop_command_get(desktop, NULL, _cb_command, info);
while (expected)
expected = eina_list_remove_list(expected, expected);
expected = eina_list_free(expected);
/* test desktop path */
info->type = 'k';
@ -308,15 +298,12 @@ ef_cb_desktop_command_get(void)
expected = eina_list_append(expected, "app 'test.desktop'");
efreet_desktop_command_get(desktop, NULL, _cb_command, info);
while (expected)
expected = eina_list_remove_list(expected, expected);
expected = eina_list_free(expected);
/* clean up */
efreet_desktop_free(desktop);
while (files)
files = eina_list_remove_list(files, expected);
while (expected)
expected = eina_list_remove_list(expected, expected);
files = eina_list_free(files);
expected = eina_list_free(expected);
ret = info->error > 0 ? 0 : 1;
free(info);
@ -348,8 +335,6 @@ _cb_command(void *data, Efreet_Desktop *desktop __UNUSED__,
info->error++;
}
}
free(exec);
return NULL;
}

View File

@ -115,6 +115,8 @@ main(int argc, char ** argv)
Eina_List *run = NULL;
double total;
eina_init();
total = ecore_time_get();
if (argc > 1)
{
@ -176,5 +178,7 @@ main(int argc, char ** argv)
run = eina_list_remove_list(run, run);
printf("Total run: %.3f seconds\n", ecore_time_get() - total);
eina_shutdown();
return 0;
}

View File

@ -488,6 +488,8 @@ efreet_desktop_save_as(Efreet_Desktop *desktop, const char *file)
EAPI void
efreet_desktop_free(Efreet_Desktop *desktop)
{
char *str;
if (!desktop) return;
desktop->ref--;
@ -512,16 +514,10 @@ efreet_desktop_free(Efreet_Desktop *desktop)
IF_FREE_LIST(desktop->only_show_in);
IF_FREE_LIST(desktop->not_show_in);
while (desktop->categories)
{
eina_stringshare_del(eina_list_data_get(desktop->categories));
desktop->categories = eina_list_remove_list(desktop->categories, desktop->categories);
}
while (desktop->mime_types)
{
eina_stringshare_del(eina_list_data_get(desktop->mime_types));
desktop->mime_types = eina_list_remove_list(desktop->mime_types, desktop->mime_types);
}
EINA_LIST_FREE(desktop->categories, str)
eina_stringshare_del(str);
EINA_LIST_FREE(desktop->mime_types, str)
eina_stringshare_del(str);
IF_FREE_HASH(desktop->x);
@ -1058,7 +1054,7 @@ efreet_desktop_x_fields_save(const Eina_Hash *hash, const void *key, void *value
static int
efreet_desktop_environment_check(Efreet_Ini *ini)
{
Eina_List *list, *l;
Eina_List *list;
int found = 0;
char *val;
@ -1207,12 +1203,8 @@ efreet_desktop_command_progress_get(Efreet_Desktop *desktop, Eina_List *files,
Eina_List *execs;
execs = efreet_desktop_command_build(command);
ret = efreet_desktop_command_execs_process(command, execs);
while (execs)
{
exec = eina_list_data_get(execs);
free(exec);
execs = eina_list_remove_list(execs, execs);
}
EINA_LIST_FREE(execs, exec)
free(exec);
efreet_desktop_command_free(command);
}

View File

@ -74,11 +74,13 @@ static int efreet_icon_theme_cache_check_dir(Efreet_Icon_Theme *theme,
const char *dir);
static int efreet_icon_cache_find(Efreet_Icon_Cache *value, const char *key);
static void efreet_icon_cache_flush(Eina_List *list);
static void efreet_icon_cache_flush(Efreet_Icon_Theme *theme, Eina_List *list);
static void efreet_icon_cache_free(Efreet_Icon_Cache *value);
static char *efreet_icon_cache_check(Efreet_Icon_Theme *theme, const char *icon, unsigned int size);
static void efreet_icon_cache_add(Efreet_Icon_Theme *theme, const char *icon, unsigned int size, const char *value);
static Efreet_Icon_Theme *fake_null = NULL;
static void
_efreet_icon_cache_list_destroy(Eina_List *list)
{
@ -262,17 +264,16 @@ efreet_icon_theme_list_get(void)
EAPI Efreet_Icon_Theme *
efreet_icon_theme_find(const char *theme_name)
{
const char *key;
Efreet_Icon_Theme *theme;
key = eina_stringshare_add(theme_name);
theme = eina_hash_find(efreet_icon_themes, key);
if (!theme_name) return fake_null;
theme = eina_hash_find(efreet_icon_themes, theme_name);
if (!theme)
{
efreet_icon_theme_dir_scan_all(theme_name);
theme = eina_hash_find(efreet_icon_themes, key);
theme = eina_hash_find(efreet_icon_themes, theme_name);
}
eina_stringshare_del(key);
return theme;
}
@ -327,9 +328,17 @@ efreet_icon_find_theme_check(const char *theme_name)
{
theme = efreet_icon_theme_new();
theme->fake = 1;
theme->name.internal = eina_stringshare_add(theme_name);
eina_hash_del(efreet_icon_themes, (void *)theme->name.internal, NULL);
eina_hash_add(efreet_icon_themes, (void *)theme->name.internal, theme);
if (theme_name)
{
theme->name.internal = eina_stringshare_add(theme_name);
eina_hash_del(efreet_icon_themes, (void *)theme->name.internal, NULL);
eina_hash_add(efreet_icon_themes, (void *)theme->name.internal, theme);
}
else
{
theme->name.internal = NULL;
fake_null = theme;
}
}
return theme;
@ -409,12 +418,8 @@ efreet_icon_list_find(const char *theme_name, Eina_List *icons,
tmps = eina_list_append(tmps, efreet_icon_remove_extension(icon));
value = efreet_icon_list_find_helper(theme, tmps, size);
while (tmps)
{
data = eina_list_data_get(tmps);
EINA_LIST_FREE(tmps, data)
free(data);
tmps = eina_list_remove_list(tmps, tmps);
}
}
#else
value = efreet_icon_list_find_helper(theme, icons, size);
@ -793,7 +798,7 @@ efreet_icon_fallback_icon(const char *icon_name)
char *icon;
if (!icon_name) return NULL;
icon = efreet_icon_cache_check(NULL, icon_name, 0);
icon = efreet_icon_cache_check(efreet_icon_find_theme_check(NULL), icon_name, 0);
if (icon) return icon;
icon = efreet_icon_fallback_dir_scan(efreet_icon_deprecated_user_dir_get(), icon_name);
@ -810,7 +815,7 @@ efreet_icon_fallback_icon(const char *icon_name)
icon = efreet_icon_fallback_dir_scan(dir, icon_name);
if (icon)
{
efreet_icon_cache_add(NULL, icon_name, 0, icon);
efreet_icon_cache_add(efreet_icon_find_theme_check(NULL), icon_name, 0, icon);
return icon;
}
}
@ -823,7 +828,7 @@ efreet_icon_fallback_icon(const char *icon_name)
icon = efreet_icon_fallback_dir_scan(path, icon_name);
if (icon)
{
efreet_icon_cache_add(NULL, icon_name, 0, icon);
efreet_icon_cache_add(efreet_icon_find_theme_check(NULL), icon_name, 0, icon);
return icon;
}
}
@ -831,7 +836,7 @@ efreet_icon_fallback_icon(const char *icon_name)
icon = efreet_icon_fallback_dir_scan("/usr/share/pixmaps", icon_name);
}
efreet_icon_cache_add(NULL, icon_name, 0, icon);
efreet_icon_cache_add(efreet_icon_find_theme_check(NULL), icon_name, 0, icon);
return icon;
}
@ -1201,7 +1206,7 @@ efreet_icon_theme_cache_check_dir(Efreet_Icon_Theme *theme, const char *dir)
/* have we modified this directory since our last cache check? */
if (stat(dir, &buf) || (buf.st_mtime > theme->last_cache_check))
{
eina_hash_del(efreet_icon_cache, &theme, NULL);
eina_hash_del(efreet_icon_cache, theme, NULL);
return 0;
}
@ -1412,7 +1417,7 @@ efreet_icon_theme_index_read(Efreet_Icon_Theme *theme, const char *path)
static void
efreet_icon_theme_dir_validity_check(void)
{
Eina_List *keys, *l;
Eina_List *keys;
const char *name;
Eina_Iterator *it;
@ -1421,7 +1426,7 @@ efreet_icon_theme_dir_validity_check(void)
eina_iterator_foreach(it, EINA_EACH(_hash_keys), &keys);
eina_iterator_free(it);
EINA_LIST_FOREACH(keys, l, name)
EINA_LIST_FREE(keys, name)
{
Efreet_Icon_Theme *theme;
@ -1429,8 +1434,6 @@ efreet_icon_theme_dir_validity_check(void)
if (theme && !theme->valid && !theme->fake)
eina_hash_del(efreet_icon_themes, name, theme);
}
while (keys)
keys = eina_list_remove_list(keys, keys);
}
/**
@ -1525,7 +1528,7 @@ efreet_icon_cache_find(Efreet_Icon_Cache *value, const char *key)
}
static void
efreet_icon_cache_flush(Eina_List *list)
efreet_icon_cache_flush(Efreet_Icon_Theme *theme, Eina_List *list)
{
/* TODO:
* * Dynamic cache size
@ -1541,6 +1544,8 @@ efreet_icon_cache_flush(Eina_List *list)
efreet_icon_cache_free(cache);
list = eina_list_remove_list(list, last);
}
eina_hash_modify(efreet_icon_cache, theme, list);
}
static void
@ -1561,7 +1566,7 @@ efreet_icon_cache_check(Efreet_Icon_Theme *theme, const char *icon, unsigned int
char key[4096];
struct stat st;
list = eina_hash_find(efreet_icon_cache, &theme);
list = eina_hash_find(efreet_icon_cache, theme);
if (!list) return NULL;
snprintf(key, sizeof(key), "%s %d", icon, size);
@ -1571,15 +1576,19 @@ efreet_icon_cache_check(Efreet_Icon_Theme *theme, const char *icon, unsigned int
if (!cache->path)
{
list = eina_list_promote_list(list, eina_list_data_find_list(list, cache));
eina_hash_modify(efreet_icon_cache, theme, list);
return NON_EXISTING;
}
else if (!stat(cache->path, &st) && st.st_mtime == cache->lasttime)
{
list = eina_list_promote_list(list, eina_list_data_find_list(list, cache));
eina_hash_modify(efreet_icon_cache, theme, list);
return strdup(cache->path);
}
efreet_icon_cache_free(cache);
list = eina_list_remove(list, cache);
if (list != NULL) eina_hash_modify(efreet_icon_cache, theme, list);
else eina_hash_del(efreet_icon_cache, theme, NULL);
}
return NULL;
}
@ -1592,7 +1601,7 @@ efreet_icon_cache_add(Efreet_Icon_Theme *theme, const char *icon, unsigned int s
char key[4096];
struct stat st;
list = eina_hash_find(efreet_icon_cache, &theme);
list = eina_hash_find(efreet_icon_cache, theme);
snprintf(key, sizeof(key), "%s %d", icon, size);
cache = NEW(Efreet_Icon_Cache, 1);
@ -1608,8 +1617,8 @@ efreet_icon_cache_add(Efreet_Icon_Theme *theme, const char *icon, unsigned int s
l = list;
list = eina_list_prepend(list, cache);
if (!l) eina_hash_add(efreet_icon_cache, &theme, list);
else eina_hash_modify(efreet_icon_cache, &theme, list);
if (!l) eina_hash_add(efreet_icon_cache, theme, list);
else eina_hash_modify(efreet_icon_cache, theme, list);
efreet_icon_cache_flush(list);
efreet_icon_cache_flush(theme, list);
}

View File

@ -178,7 +178,7 @@ efreet_util_shutdown(void)
static char *
efreet_util_path_in_default(const char *section, const char *path)
{
Eina_List *dirs, *l;
Eina_List *dirs;
char *ret = NULL;
char *dir;