* efreet: little speedup for icon lookup.

But really you should not call it as it will call stat for
	every path it guess an icon could be in. For example, elementary_test
	Toolbar 5 trigger 41132 call to stat on random place on your harddrive.


SVN revision: 54339
This commit is contained in:
Cedric BAIL 2010-11-08 18:09:25 +00:00
parent 87d707ee2c
commit 5cec7beb53
1 changed files with 19 additions and 7 deletions

View File

@ -719,16 +719,20 @@ efreet_icon_lookup_directory(Efreet_Icon_Theme *theme,
const char *icon_name) const char *icon_name)
{ {
Eina_List *l; Eina_List *l;
char *icon; char *icon = NULL;
const char *path; const char *path;
const char *tmp;
tmp = eina_stringshare_add(icon_name);
EINA_LIST_FOREACH(theme->paths, l, path) EINA_LIST_FOREACH(theme->paths, l, path)
{ {
icon = efreet_icon_lookup_directory_helper(dir, path, icon_name); icon = efreet_icon_lookup_directory_helper(dir, path, tmp);
if (icon) return icon; if (icon) break;
} }
return NULL; eina_stringshare_del(tmp);
return icon;
} }
/** /**
@ -928,14 +932,22 @@ efreet_icon_lookup_directory_helper(Efreet_Icon_Theme_Directory *dir,
Eina_List *l; Eina_List *l;
char *icon = NULL; char *icon = NULL;
char file_path[PATH_MAX]; char file_path[PATH_MAX];
const char *ext, *path_strs[] = { path, "/", dir->name, "/", icon_name, NULL }; const char *ext;
size_t len; size_t len;
len = efreet_array_cat(file_path, sizeof(file_path), path_strs); /* build "$(path)/$(dir->name)/$(icon_name) */
len = eina_stringshare_strlen(path);
memcpy(file_path, path, len);
file_path[len++] = '/';
memcpy(file_path + len, dir->name, eina_stringshare_strlen(dir->name));
len += eina_stringshare_strlen(dir->name);
file_path[len++] = '/';
memcpy(file_path + len, icon_name, eina_stringshare_strlen(icon_name));
len += eina_stringshare_strlen(icon_name);
EINA_LIST_FOREACH(efreet_icon_extensions, l, ext) EINA_LIST_FOREACH(efreet_icon_extensions, l, ext)
{ {
eina_strlcpy(file_path + len, ext, sizeof(file_path) - len); memcpy(file_path + len, ext, eina_stringshare_strlen(ext) + 1);
if (ecore_file_exists(file_path)) if (ecore_file_exists(file_path))
{ {