From: Enlightenment S. <no-...@en...> - 2010-03-01 19:06:06
|
Log: TODO++ Author: englebass Date: 2010-03-01 11:05:59 -0800 (Mon, 01 Mar 2010) New Revision: 46731 Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c trunk/efreet/src/lib/efreet_desktop.c Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-03-01 19:05:49 UTC (rev 46730) +++ trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-03-01 19:05:59 UTC (rev 46731) @@ -146,6 +146,9 @@ /* TODO: * - Add file monitor on files, so that we catch changes on files * during whilst this program runs. + * - Only update cache, don't recreate everything. + * - Use return value to signal calling process wheter cache was + * updated or not. */ char file[PATH_MAX]; char util_file[PATH_MAX]; Modified: trunk/efreet/src/lib/efreet_desktop.c =================================================================== --- trunk/efreet/src/lib/efreet_desktop.c 2010-03-01 19:05:49 UTC (rev 46730) +++ trunk/efreet/src/lib/efreet_desktop.c 2010-03-01 19:05:59 UTC (rev 46731) @@ -373,6 +373,10 @@ return desktop; } } + /* TODO: + * Add .desktop file path to a cache file, so that + * efreet_desktop_cache_create can add it to the cache + */ if (!ecore_file_exists(file)) return NULL; |
From: Enlightenment S. <no-...@en...> - 2010-03-03 12:28:47
|
Log: rename function Author: englebass Date: 2010-03-03 04:28:40 -0800 (Wed, 03 Mar 2010) New Revision: 46831 Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c trunk/efreet/src/lib/efreet_private.h trunk/efreet/src/lib/efreet_utils.c Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-03-03 12:28:30 UTC (rev 46830) +++ trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-03-03 12:28:40 UTC (rev 46831) @@ -196,16 +196,16 @@ close(fd); /* create dir for util cache */ - dir = ecore_file_dir_get(efreet_util_cache_file()); + dir = ecore_file_dir_get(efreet_desktop_util_cache_file()); if (!ecore_file_mkpath(dir)) goto efreet_error; free(dir); /* unlink old cache file */ - if (unlink(efreet_util_cache_file()) < 0) + if (unlink(efreet_desktop_util_cache_file()) < 0) { if (errno != ENOENT) goto efreet_error; } /* create util cache file */ - fd = open(efreet_util_cache_file(), O_CREAT | O_EXCL | O_RDONLY, S_IRUSR | S_IWUSR); + fd = open(efreet_desktop_util_cache_file(), O_CREAT | O_EXCL | O_RDONLY, S_IRUSR | S_IWUSR); if (fd < 0) goto efreet_error; close(fd); @@ -223,7 +223,7 @@ ef = eet_open(file, EET_FILE_MODE_WRITE); if (!ef) goto error; - snprintf(util_file, sizeof(util_file), "%s.XXXXXX", efreet_util_cache_file()); + snprintf(util_file, sizeof(util_file), "%s.XXXXXX", efreet_desktop_util_cache_file()); tmpfd = mkstemp(util_file); if (tmpfd < 0) goto error; close(tmpfd); @@ -260,7 +260,7 @@ /* rename tmp files to real files */ if (rename(file, efreet_desktop_cache_file()) < 0) goto error; - if (rename(util_file, efreet_util_cache_file()) < 0) goto error; + if (rename(util_file, efreet_desktop_util_cache_file()) < 0) goto error; efreet_desktop_edd_shutdown(edd); efreet_shutdown(); Modified: trunk/efreet/src/lib/efreet_private.h =================================================================== --- trunk/efreet/src/lib/efreet_private.h 2010-03-03 12:28:30 UTC (rev 46830) +++ trunk/efreet/src/lib/efreet_private.h 2010-03-03 12:28:40 UTC (rev 46831) @@ -202,7 +202,7 @@ EAPI Eet_Data_Descriptor *efreet_desktop_edd_init(void); EAPI void efreet_desktop_edd_shutdown(Eet_Data_Descriptor *edd); -EAPI const char *efreet_util_cache_file(void); +EAPI const char *efreet_desktop_util_cache_file(void); EAPI const char *efreet_desktop_cache_file(void); #define NON_EXISTING (void *)-1 Modified: trunk/efreet/src/lib/efreet_utils.c =================================================================== --- trunk/efreet/src/lib/efreet_utils.c 2010-03-03 12:28:30 UTC (rev 46830) +++ trunk/efreet/src/lib/efreet_utils.c 2010-03-03 12:28:40 UTC (rev 46831) @@ -69,7 +69,7 @@ } /* TODO: Need file monitor on cache in case it is updated */ - cache = eet_open(efreet_util_cache_file(), EET_FILE_MODE_READ); + cache = eet_open(efreet_desktop_util_cache_file(), EET_FILE_MODE_READ); if (!cache) goto cache_error; file_id_by_desktop_path = eina_hash_string_superfast_new(EINA_FREE_CB(eina_stringshare_del)); @@ -97,7 +97,7 @@ * Needs EAPI because of helper binaries */ EAPI const char * -efreet_util_cache_file(void) +efreet_desktop_util_cache_file(void) { char tmp[PATH_MAX] = { '\0' }; const char *home, *lang, *country, *modifier; |
From: Enlightenment S. <no-...@en...> - 2010-03-03 19:42:47
|
Log: Clarify difference between _get and _new efreet_desktop_get for long living cached structs, efreet_desktop_new for shortlived non cached. Author: englebass Date: 2010-03-03 11:42:38 -0800 (Wed, 03 Mar 2010) New Revision: 46840 Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c trunk/efreet/src/lib/efreet_desktop.c Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-03-03 19:02:01 UTC (rev 46839) +++ trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-03-03 19:42:38 UTC (rev 46840) @@ -237,6 +237,10 @@ dirs = efreet_default_dirs_get(efreet_data_home_get(), efreet_data_dirs_get(), "applications"); + /* TODO: + * - read dirs cache + * - skip dirs/subdirs in default dirs + */ if (!dirs) goto error; while (dirs) { Modified: trunk/efreet/src/lib/efreet_desktop.c =================================================================== --- trunk/efreet/src/lib/efreet_desktop.c 2010-03-03 19:02:01 UTC (rev 46839) +++ trunk/efreet/src/lib/efreet_desktop.c 2010-03-03 19:42:38 UTC (rev 46840) @@ -312,6 +312,9 @@ * on failure. This reference should not be freed. * @brief Gets a reference to an Efreet_Desktop structure representing the * contents of @a file or NULL if @a file is not a valid .desktop file. + * + * By using efreet_desktop_get the Efreet_Desktop will be saved in an internal + * cache, and changes will be signalled by events. */ EAPI Efreet_Desktop * efreet_desktop_get(const char *file) @@ -347,8 +350,29 @@ desktop = efreet_desktop_new(file); if (!desktop) return NULL; + if (!desktop->eet) + { + char buf[PATH_MAX]; + char *p; + + /* + * Read file from disk, save path in cache so it will be included in next + * cache update + */ + strncpy(buf, desktop->orig_path, PATH_MAX); + buf[PATH_MAX - 1] = '\0'; + p = dirname(buf); + if (!eina_list_search_unsorted(efreet_desktop_dirs, EINA_COMPARE_CB(strcmp), p)) + { + efreet_desktop_dirs = eina_list_append(efreet_desktop_dirs, strdup(p)); + if (efreet_desktop_job) ecore_job_del(efreet_desktop_job); + efreet_desktop_job = ecore_job_add(efreet_desktop_update_cache_dirs, NULL); + } + } + if (efreet_desktop_cache) eina_hash_add(efreet_desktop_cache, file, desktop); desktop->cached = 1; + /* TODO: Need file monitor on file and events to notify change */ return desktop; } @@ -386,20 +410,20 @@ } /** - * @internal * @param file: The file to create the Efreet_Desktop from * @return Returns a new Efreet_Desktop on success, NULL on failure * @brief Creates a new Efreet_Desktop structure initialized from the * contents of @a file or NULL on failure + * + * By using efreet_desktop_new the caller will get a unique copy of a + * Efreet_Desktop. The Efreet_Desktop should immidiatly after use be free'd, + * as there is no guarantee how long the pointers will be valid. */ EAPI Efreet_Desktop * efreet_desktop_new(const char *file) { - /* TODO: Need file monitor on file and events to notify change */ Efreet_Desktop *desktop = NULL; char *rp = NULL; - char *p; - char buf[PATH_MAX]; rp = ecore_file_realpath(file); if (cache) @@ -430,16 +454,6 @@ desktop->ref = 1; - strncpy(buf, rp, PATH_MAX); - buf[PATH_MAX - 1] = '\0'; - p = dirname(buf); - if (!eina_list_search_unsorted(efreet_desktop_dirs, EINA_COMPARE_CB(strcmp), p)) - { - efreet_desktop_dirs = eina_list_append(efreet_desktop_dirs, strdup(p)); - if (efreet_desktop_job) ecore_job_del(efreet_desktop_job); - efreet_desktop_job = ecore_job_add(efreet_desktop_update_cache_dirs, NULL); - } - return desktop; error: if (desktop) efreet_desktop_free(desktop); |
From: Enlightenment S. <no-...@en...> - 2010-03-28 18:54:32
|
Log: efreet: Add variable to prevent cache update Author: englebass Date: 2010-03-28 11:54:25 -0700 (Sun, 28 Mar 2010) New Revision: 47536 Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c trunk/efreet/src/lib/efreet.c trunk/efreet/src/lib/efreet_desktop.c trunk/efreet/src/lib/efreet_private.h Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-03-28 18:46:57 UTC (rev 47535) +++ trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-03-28 18:54:25 UTC (rev 47536) @@ -193,6 +193,8 @@ if (!eina_init()) goto eina_error; if (!eet_init()) goto eet_error; + efreet_cache_update = 0; + /* create homedir */ snprintf(file, sizeof(file), "%s/.efreet", efreet_home_dir_get()); if (!ecore_file_mkpath(file)) goto efreet_error; Modified: trunk/efreet/src/lib/efreet.c =================================================================== --- trunk/efreet/src/lib/efreet.c 2010-03-28 18:46:57 UTC (rev 47535) +++ trunk/efreet/src/lib/efreet.c 2010-03-28 18:54:25 UTC (rev 47536) @@ -12,6 +12,8 @@ #include "efreet_private.h" #include "efreet_xml.h" +EAPI int efreet_cache_update = 1; + static int _efreet_init_count = 0; static int efreet_parsed_locale = 0; static const char *efreet_lang = NULL; Modified: trunk/efreet/src/lib/efreet_desktop.c =================================================================== --- trunk/efreet/src/lib/efreet_desktop.c 2010-03-28 18:46:57 UTC (rev 47535) +++ trunk/efreet/src/lib/efreet_desktop.c 2010-03-28 18:54:25 UTC (rev 47536) @@ -177,8 +177,6 @@ int efreet_desktop_init(void) { - char buf[PATH_MAX]; - _efreet_desktop_log_dom = eina_log_domain_register("Efreet_desktop", EFREET_DEFAULT_LOG_COLOR); if (_efreet_desktop_log_dom < 0) { @@ -206,12 +204,17 @@ EFREET_EVENT_CACHE_UPDATE = ecore_event_type_new(); - snprintf(buf, sizeof(buf), "%s/.efreet", efreet_home_dir_get()); - if (!ecore_file_mkpath(buf)) goto edd_error; - cache_monitor = ecore_file_monitor_add(buf, - efreet_desktop_cache_update, - NULL); + if (efreet_cache_update) + { + char buf[PATH_MAX]; + snprintf(buf, sizeof(buf), "%s/.efreet", efreet_home_dir_get()); + if (!ecore_file_mkpath(buf)) goto edd_error; + cache_monitor = ecore_file_monitor_add(buf, + efreet_desktop_cache_update, + NULL); + } + /* TODO: * Should add a lock here, so that several programs starting at the same * time wont run several copies of efreet_desktop_cache_create Modified: trunk/efreet/src/lib/efreet_private.h =================================================================== --- trunk/efreet/src/lib/efreet_private.h 2010-03-28 18:46:57 UTC (rev 47535) +++ trunk/efreet/src/lib/efreet_private.h 2010-03-28 18:54:25 UTC (rev 47536) @@ -212,6 +212,8 @@ #define NON_EXISTING (void *)-1 +EAPI extern int efreet_cache_update; + /** * @} */ |
From: Enlightenment S. <no-...@en...> - 2010-03-29 20:14:51
|
Log: efreet: fix strdup + stringshare Author: englebass Date: 2010-03-29 13:14:43 -0700 (Mon, 29 Mar 2010) New Revision: 47568 Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c trunk/efreet/src/lib/efreet.c trunk/efreet/src/lib/efreet_base.c trunk/efreet/src/lib/efreet_menu.c trunk/efreet/src/lib/efreet_utils.c Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-03-29 20:11:12 UTC (rev 47567) +++ trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-03-29 20:14:43 UTC (rev 47568) @@ -29,7 +29,7 @@ static int strcmplen(const void *data1, const void *data2) { - return strncmp(data1, data2, strlen(data2)); + return strncmp(data1, data2, eina_stringshare_strlen(data2)); } static int @@ -187,6 +187,7 @@ int priority = 0; char *dir = NULL; char *map = MAP_FAILED; + char *path; int fd = -1, tmpfd, dirsfd = -1; struct stat st; int changed = 0; @@ -258,7 +259,7 @@ { unsigned int size = *(unsigned int *)p; p += sizeof(unsigned int); - user_dirs = eina_list_append(user_dirs, strdup(p)); + user_dirs = eina_list_append(user_dirs, eina_stringshare_add(p)); p += size; } munmap(map, st.st_size); @@ -266,25 +267,19 @@ if (ftruncate(dirsfd, 0) < 0) goto error; } - while (dirs) + EINA_LIST_FREE(dirs, path) { char file_id[PATH_MAX] = { '\0' }; - char *path; Eina_List *l; - path = eina_list_data_get(dirs); - if (path) + if (!cache_scan(path, file_id, priority++, 1, &changed)) goto error; + l = eina_list_search_unsorted_list(user_dirs, strcmplen, path); + if (l) { - if (!cache_scan(path, file_id, priority++, 1, &changed)) goto error; - l = eina_list_search_unsorted_list(user_dirs, strcmplen, path); - if (l) - { - free(eina_list_data_get(l)); - user_dirs = eina_list_remove_list(user_dirs, l); - } - free(path); + eina_stringshare_del(eina_list_data_get(l)); + user_dirs = eina_list_remove_list(user_dirs, l); } - dirs = eina_list_remove_list(dirs, dirs); + eina_stringshare_del(path); } EINA_LIST_FREE(user_dirs, dir) { @@ -295,7 +290,7 @@ write(dirsfd, dir, size); } if (!cache_scan(dir, NULL, priority, 0, &changed)) goto error; - free(dir); + eina_stringshare_del(dir); } eina_hash_free(file_ids); eina_hash_free(paths); Modified: trunk/efreet/src/lib/efreet.c =================================================================== --- trunk/efreet/src/lib/efreet.c 2010-03-29 20:11:12 UTC (rev 47567) +++ trunk/efreet/src/lib/efreet.c 2010-03-29 20:14:43 UTC (rev 47568) @@ -7,6 +7,7 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> +#include <limits.h> #include "Efreet.h" #include "efreet_private.h" @@ -196,12 +197,13 @@ efreet_parse_locale_setting(const char *env) { int found = 0; - char *setting; + char setting[PATH_MAX]; char *p; - setting = getenv(env); - if (!setting) return 0; - setting = strdup(setting); + p = getenv(env); + if (!p) return 0; + strncpy(setting, p, sizeof(setting)); + setting[PATH_MAX - 1] = '\0'; /* pull the modifier off the end */ p = strrchr(setting, '@'); @@ -225,14 +227,12 @@ found = 1; } - if (setting && (*setting != '\0')) + if (*setting != '\0') { efreet_lang = eina_stringshare_add(setting); found = 1; } - FREE(setting); - return found; } Modified: trunk/efreet/src/lib/efreet_base.c =================================================================== --- trunk/efreet/src/lib/efreet_base.c 2010-03-29 20:11:12 UTC (rev 47567) +++ trunk/efreet/src/lib/efreet_base.c 2010-03-29 20:14:43 UTC (rev 47568) @@ -6,6 +6,7 @@ #include <stdio.h> #include <string.h> +#include <limits.h> #include "Efreet.h" #include "efreet_private.h" @@ -225,14 +226,15 @@ { Eina_List *dirs = NULL; const char *path; - char *tmp, *s, *p; + char tmp[PATH_MAX], *s, *p; path = getenv(key); if (!path || (path[0] == '\0')) path = fallback; if (!path) return dirs; - tmp = strdup(path); + strncpy(tmp, path, sizeof(tmp)); + tmp[PATH_MAX - 1] = '\0'; s = tmp; p = strchr(s, EFREET_PATH_SEP); while (p) @@ -246,7 +248,6 @@ } if (!eina_list_search_unsorted(dirs, EINA_COMPARE_CB(strcmp), s)) dirs = eina_list_append(dirs, (void *)eina_stringshare_add(s)); - FREE(tmp); return dirs; } Modified: trunk/efreet/src/lib/efreet_menu.c =================================================================== --- trunk/efreet/src/lib/efreet_menu.c 2010-03-29 20:11:12 UTC (rev 47567) +++ trunk/efreet/src/lib/efreet_menu.c 2010-03-29 20:14:43 UTC (rev 47568) @@ -224,7 +224,7 @@ static const char *efreet_menu_prefix = NULL; /**< The $XDG_MENU_PREFIX env var */ Eina_List *efreet_menu_kde_legacy_dirs = NULL; /**< The directories to use for KDELegacy entries */ static const char *efreet_tag_menu = NULL; -static char *efreet_menu_file = NULL; /**< A menu file set explicityl as default */ +static const char *efreet_menu_file = NULL; /**< A menu file set explicityl as default */ static Eina_Hash *efreet_merged_menus = NULL; static Eina_Hash *efreet_merged_dirs = NULL; @@ -580,7 +580,7 @@ void efreet_menu_shutdown(void) { - IF_FREE(efreet_menu_file); + IF_RELEASE(efreet_menu_file); IF_FREE_HASH(efreet_menu_handle_cbs); IF_FREE_HASH(efreet_menu_filter_cbs); @@ -623,9 +623,9 @@ EAPI void efreet_menu_file_set(const char *file) { - IF_FREE(efreet_menu_file); + IF_RELEASE(efreet_menu_file); efreet_menu_file = NULL; - if (file) efreet_menu_file = strdup(file); + if (file) efreet_menu_file = eina_stringshare_add(file); } /** @@ -990,12 +990,12 @@ Eina_List *l; snprintf(dir, sizeof(dir), "%s/%s", user_dir, suffix); - list = eina_list_append(list, strdup(dir)); + list = eina_list_append(list, eina_stringshare_add(dir)); EINA_LIST_FOREACH(system_dirs, l, xdg_dir) { snprintf(dir, sizeof(dir), "%s/%s", xdg_dir, suffix); - list = eina_list_append(list, strdup(dir)); + list = eina_list_append(list, eina_stringshare_add(dir)); } return list; @@ -1203,19 +1203,19 @@ "applications"); EINA_LIST_FREE(dirs, dir) { - Efreet_Menu_App_Dir *app_dir; + if (!eina_list_search_unsorted(parent->app_dirs, + EINA_COMPARE_CB(efreet_menu_cb_app_dirs_compare), + dir)) + { + Efreet_Menu_App_Dir *app_dir; - if (eina_list_search_unsorted(parent->app_dirs, - EINA_COMPARE_CB(efreet_menu_cb_app_dirs_compare), - dir)) - continue; + app_dir = efreet_menu_app_dir_new(); + app_dir->path = strdup(dir); - app_dir = efreet_menu_app_dir_new(); - app_dir->path = strdup(dir); + prepend = eina_list_append(prepend, app_dir); + } - prepend = eina_list_append(prepend, app_dir); - - free(dir); + eina_stringshare_del(dir); } parent->app_dirs = eina_list_merge(prepend, parent->app_dirs); @@ -1262,7 +1262,7 @@ static int efreet_menu_handle_default_directory_dirs(Efreet_Menu_Internal *parent, Efreet_Xml *xml __UNUSED__) { - Eina_List *dirs, *l; + Eina_List *dirs; char *dir; if (!parent) return 0; @@ -1270,20 +1270,13 @@ efreet_menu_create_directory_dirs_list(parent); dirs = efreet_default_dirs_get(efreet_data_home_get(), efreet_data_dirs_get(), "desktop-directories"); - EINA_LIST_FOREACH(dirs, l, dir) + EINA_LIST_FREE(dirs, dir) { - if (eina_list_search_unsorted(parent->directory_dirs, EINA_COMPARE_CB(strcmp), dir)) - continue; - - parent->directory_dirs = eina_list_prepend(parent->directory_dirs, strdup(dir)); + if (!eina_list_search_unsorted(parent->directory_dirs, EINA_COMPARE_CB(strcmp), dir)) + parent->directory_dirs = eina_list_prepend(parent->directory_dirs, strdup(dir)); + eina_stringshare_del(dir); } - while (dirs) - { - free(eina_list_data_get(dirs)); - dirs = eina_list_remove_list(dirs, dirs); - } - return 1; } @@ -1817,11 +1810,10 @@ dirs = efreet_default_dirs_get(efreet_config_home_get(), efreet_config_dirs_get(), path); - while ((p = eina_list_data_get(dirs))) + EINA_LIST_FREE(dirs, p) { - dirs = eina_list_remove_list(dirs, dirs); efreet_menu_merge_dir(parent, xml, p); - FREE(p); + eina_stringshare_del(p); } #ifndef STRICT_SPEC /* Also check the path of the parent file */ Modified: trunk/efreet/src/lib/efreet_utils.c =================================================================== --- trunk/efreet/src/lib/efreet_utils.c 2010-03-29 20:11:12 UTC (rev 47567) +++ trunk/efreet/src/lib/efreet_utils.c 2010-03-29 20:14:43 UTC (rev 47568) @@ -114,7 +114,7 @@ if (!strncmp(path, dir, strlen(dir))) ret = dir; else - free(dir); + eina_stringshare_del(dir); } return ret; @@ -124,7 +124,7 @@ efreet_util_path_to_file_id(const char *path) { size_t len; - char *tmp, *p; + char tmp[PATH_MAX], *p; char *base; const char *file_id; @@ -139,25 +139,25 @@ len = strlen(base); if (strlen(path) <= len) { - free(base); + eina_stringshare_del(base); return NULL; } if (strncmp(path, base, len)) { - free(base); + eina_stringshare_del(base); return NULL; } - tmp = strdup(path + len + 1); + strncpy(tmp, path + len + 1, sizeof(tmp)); + tmp[PATH_MAX - 1] = '\0'; p = tmp; while (*p) { if (*p == '/') *p = '-'; p++; } - free(base); + eina_stringshare_del(base); file_id = eina_stringshare_add(tmp); - free(tmp); eina_hash_del(file_id_by_desktop_path, path, NULL); eina_hash_add(file_id_by_desktop_path, path, (void *)file_id); return file_id; |
From: Enlightenment S. <no-...@en...> - 2010-04-03 18:45:53
|
Log: efreet: rename lock file Author: englebass Date: 2010-04-03 11:45:46 -0700 (Sat, 03 Apr 2010) New Revision: 47729 Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c trunk/efreet/src/lib/efreet_desktop.c Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-04-03 18:29:38 UTC (rev 47728) +++ trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-04-03 18:45:46 UTC (rev 47729) @@ -206,7 +206,7 @@ if (!ecore_file_mkpath(file)) goto efreet_error; /* lock process, so that we only run one copy of this program */ - snprintf(file, sizeof(file), "%s/.efreet/lock", efreet_home_dir_get()); + snprintf(file, sizeof(file), "%s/.efreet/desktop_data.lock", efreet_home_dir_get()); fd = open(file, O_CREAT | O_RDONLY, S_IRUSR | S_IWUSR); if (fd < 0) goto efreet_error; if (flock(fd, LOCK_EX | LOCK_NB) < 0) goto efreet_error; Modified: trunk/efreet/src/lib/efreet_desktop.c =================================================================== --- trunk/efreet/src/lib/efreet_desktop.c 2010-04-03 18:29:38 UTC (rev 47728) +++ trunk/efreet/src/lib/efreet_desktop.c 2010-04-03 18:45:46 UTC (rev 47729) @@ -2207,7 +2207,7 @@ snprintf(file, sizeof(file), "%s/.efreet", efreet_home_dir_get()); if (!ecore_file_mkpath(file)) return; - snprintf(file, sizeof(file), "%s/.efreet/lock", efreet_home_dir_get()); + snprintf(file, sizeof(file), "%s/.efreet/desktop_data.lock", efreet_home_dir_get()); fd = open(file, O_CREAT | O_RDONLY, S_IRUSR | S_IWUSR); if (fd < 0) return; /* TODO: Retry update cache later */ |
From: Enlightenment S. <no-...@en...> - 2010-04-17 18:39:20
|
Log: efreet: Check return value from opendir Author: englebass Date: 2010-04-17 11:39:13 -0700 (Sat, 17 Apr 2010) New Revision: 48081 Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c trunk/efreet/src/lib/efreet_menu.c Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-04-17 18:28:01 UTC (rev 48080) +++ trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-04-17 18:39:13 UTC (rev 48081) @@ -141,6 +141,7 @@ if (!ecore_file_is_dir(path)) return 1; files = opendir(path); + if (!files) return 1; id[0] = '\0'; while ((file = readdir(files))) { Modified: trunk/efreet/src/lib/efreet_menu.c =================================================================== --- trunk/efreet/src/lib/efreet_menu.c 2010-04-17 18:28:01 UTC (rev 48080) +++ trunk/efreet/src/lib/efreet_menu.c 2010-04-17 18:39:13 UTC (rev 48081) @@ -1928,80 +1928,83 @@ path_len = strlen(path); files = opendir(path); - while ((file = readdir(files))) + if (files) { - Efreet_Desktop *desktop = NULL; - char buf[PATH_MAX]; - char *exten; + while ((file = readdir(files))) + { + Efreet_Desktop *desktop = NULL; + char buf[PATH_MAX]; + char *exten; - if (!strcmp(file->d_name, ".") || !strcmp(file->d_name, "..")) continue; - file_path[0] = '\0'; - eina_strlcpy(file_path, path, PATH_MAX); - eina_strlcpy(file_path + path_len, "/", PATH_MAX - path_len); - eina_strlcpy(file_path + path_len + 1, file->d_name, PATH_MAX - path_len - 1); + if (!strcmp(file->d_name, ".") || !strcmp(file->d_name, "..")) continue; + file_path[0] = '\0'; + eina_strlcpy(file_path, path, PATH_MAX); + eina_strlcpy(file_path + path_len, "/", PATH_MAX - path_len); + eina_strlcpy(file_path + path_len + 1, file->d_name, PATH_MAX - path_len - 1); - /* recurse into sub directories */ - if (ecore_file_is_dir(file_path)) - { - Efreet_Menu_Internal *ret; + /* recurse into sub directories */ + if (ecore_file_is_dir(file_path)) + { + Efreet_Menu_Internal *ret; - ret = efreet_menu_handle_legacy_dir_helper(root ? root : legacy_internal, - legacy_internal, file_path, prefix); - if (!ret) + ret = efreet_menu_handle_legacy_dir_helper(root ? root : legacy_internal, + legacy_internal, file_path, prefix); + if (!ret) + { + efreet_menu_internal_free(legacy_internal); + eina_stringshare_del(path); + closedir(files); + return NULL; + } + + efreet_menu_create_sub_menu_list(legacy_internal); + legacy_internal->sub_menus = eina_list_prepend(legacy_internal->sub_menus, ret); + + continue; + } + + if (!strcmp(file->d_name, ".directory")) { - efreet_menu_internal_free(legacy_internal); - eina_stringshare_del(path); - closedir(files); - return NULL; + legacy_internal->directory = efreet_desktop_get(file_path); + if (legacy_internal->directory + && legacy_internal->directory->type != EFREET_DESKTOP_TYPE_DIRECTORY) + { + efreet_desktop_free(legacy_internal->directory); + legacy_internal->directory = NULL; + } + continue; } - efreet_menu_create_sub_menu_list(legacy_internal); - legacy_internal->sub_menus = eina_list_prepend(legacy_internal->sub_menus, ret); + exten = strrchr(file->d_name, '.'); - continue; - } + if (exten && !strcmp(exten, ".desktop")) + desktop = efreet_desktop_get(file_path); - if (!strcmp(file->d_name, ".directory")) - { - legacy_internal->directory = efreet_desktop_get(file_path); - if (legacy_internal->directory - && legacy_internal->directory->type != EFREET_DESKTOP_TYPE_DIRECTORY) + if (!desktop) continue; + + /* if the .desktop has categories it isn't legacy */ + if (efreet_desktop_category_count_get(desktop) != 0) { - efreet_desktop_free(legacy_internal->directory); - legacy_internal->directory = NULL; + efreet_desktop_free(desktop); + continue; } - continue; - } - exten = strrchr(file->d_name, '.'); + /* XXX: This will disappear when the .desktop is free'd */ + efreet_desktop_category_add(desktop, "Legacy"); - if (exten && !strcmp(exten, ".desktop")) - desktop = efreet_desktop_get(file_path); + if (prefix) + { + snprintf(buf, sizeof(buf), "%s%s", prefix, file->d_name); + filter->op->filenames = eina_list_append(filter->op->filenames, eina_stringshare_add(buf)); + } + else + filter->op->filenames = eina_list_append(filter->op->filenames, eina_stringshare_add(file->d_name)); - if (!desktop) continue; - - /* if the .desktop has categories it isn't legacy */ - if (efreet_desktop_category_count_get(desktop) != 0) - { + count++; efreet_desktop_free(desktop); - continue; } - - /* XXX: This will disappear when the .desktop is free'd */ - efreet_desktop_category_add(desktop, "Legacy"); - - if (prefix) - { - snprintf(buf, sizeof(buf), "%s%s", prefix, file->d_name); - filter->op->filenames = eina_list_append(filter->op->filenames, eina_stringshare_add(buf)); - } - else - filter->op->filenames = eina_list_append(filter->op->filenames, eina_stringshare_add(file->d_name)); - - count++; - efreet_desktop_free(desktop); + closedir(files); } - closedir(files); eina_stringshare_del(path); return legacy_internal; |
From: Enlightenment S. <no-...@en...> - 2010-08-29 08:47:43
|
Log: Always munmap mmap'ed data Author: englebass Date: 2010-08-29 01:47:37 -0700 (Sun, 29 Aug 2010) New Revision: 51713 Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c trunk/efreet/src/lib/efreet_desktop.c Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-08-29 08:47:27 UTC (rev 51712) +++ trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-08-29 08:47:37 UTC (rev 51713) @@ -209,7 +209,6 @@ Eina_List *dirs = NULL, *user_dirs = NULL; int priority = 0; char *dir = NULL; - char *map = MAP_FAILED; char *path; int fd = -1, tmpfd, dirsfd = -1; struct stat st; @@ -297,25 +296,25 @@ if (!dirs) goto error; dirsfd = open(efreet_desktop_cache_dirs(), O_APPEND | O_RDWR, S_IRUSR | S_IWUSR); - if ((dirsfd > 0) && (fstat(dirsfd, &st) == 0) && (st.st_size > 0)) + if (dirsfd >= 0) { - char *p; - - map = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, dirsfd, 0); - if (map == MAP_FAILED) goto error; - p = map; - while (p < map + st.st_size) + if ((fstat(dirsfd, &st) == 0) && (st.st_size > 0)) { - unsigned int size = *(unsigned int *)p; - p += sizeof(unsigned int); - user_dirs = eina_list_append(user_dirs, eina_stringshare_add(p)); - p += size; + char *p; + char *map; + + map = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, dirsfd, 0); + if (map == MAP_FAILED) goto error; + p = map; + while (p < map + st.st_size) + { + unsigned int size = *(unsigned int *)p; + p += sizeof(unsigned int); + user_dirs = eina_list_append(user_dirs, eina_stringshare_add(p)); + p += size; + } + munmap(map, st.st_size); } - munmap(map, st.st_size); - map = MAP_FAILED; - } - if (dirsfd > 0) - { close(dirsfd); dirsfd = -1; unlink(efreet_desktop_cache_dirs()); @@ -372,7 +371,7 @@ if (old) eet_close(old); } - + /* cleanup */ eet_close(util_ef); eet_close(ef); @@ -406,8 +405,7 @@ close(fd); return 0; error: - if (map != MAP_FAILED) munmap(map, st.st_size); - if (dirsfd > 0) close(dirsfd); + if (dirsfd >= 0) close(dirsfd); IF_FREE(dir); efreet_desktop_edd_shutdown(edd); edd_error: Modified: trunk/efreet/src/lib/efreet_desktop.c =================================================================== --- trunk/efreet/src/lib/efreet_desktop.c 2010-08-29 08:47:27 UTC (rev 51712) +++ trunk/efreet/src/lib/efreet_desktop.c 2010-08-29 08:47:37 UTC (rev 51713) @@ -75,7 +75,7 @@ static Eina_Hash *change_monitors = NULL; -#ifdef EFREET_MODULE_LOG_DOM +#ifdef EFREET_MODULE_LOG_DOM #undef EFREET_MODULE_LOG_DOM #endif @@ -1334,7 +1334,6 @@ char file[PATH_MAX]; int fd = -1; int cachefd = -1; - char *map = MAP_FAILED; char *dir; struct stat st; struct flock fl; @@ -1357,6 +1356,7 @@ { Eina_List *l, *ln; char *p; + char *map; map = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, cachefd, 0); if (map == MAP_FAILED) goto error; @@ -1376,6 +1376,7 @@ } p += size; } + munmap(map, st.st_size); } EINA_LIST_FREE(efreet_desktop_dirs, dir) { @@ -1397,7 +1398,6 @@ return 1; error: - if (map != MAP_FAILED) munmap(map, st.st_size); if (fd >= 0) close(fd); if (cachefd >= 0) close(cachefd); return 0; @@ -1443,7 +1443,7 @@ { Efreet_Old_Cache *d; int dangling = 0; - + d = data; /* * All users should now had the chance to update their pointers, so we can now @@ -1453,19 +1453,19 @@ { Eina_Iterator *it; Eina_Hash_Tuple *tuple; - + it = eina_hash_iterator_tuple_new(d->desktop_cache); EINA_ITERATOR_FOREACH(it, tuple) { - printf("Efreet: %d:%s still in cache on cache close!\n", + printf("Efreet: %d:%s still in cache on cache close!\n", ((Efreet_Desktop *)tuple->data)->ref, (char *)tuple->key); dangling++; } eina_iterator_free(it); - + eina_hash_free(d->desktop_cache); } - /* + /* * If there are dangling references the eet file won't be closed - to * avoid crashes, but this will leak instead. */ @@ -1504,7 +1504,7 @@ struct flock fl; efreet_desktop_job = NULL; - + /* TODO: Retry update cache later */ if (efreet_desktop_exe_lock > 0) return; @@ -1567,28 +1567,31 @@ } dirsfd = open(efreet_desktop_cache_dirs(), O_RDONLY, S_IRUSR | S_IWUSR); - if ((dirsfd > 0) && (fstat(dirsfd, &st) == 0) && (st.st_size > 0)) + if (dirsfd >= 0) { - char *p; - char *map; + if ((fstat(dirsfd, &st) == 0) && (st.st_size > 0)) + { + char *p; + char *map; - map = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, dirsfd, 0); - if (map == MAP_FAILED) goto error; - p = map; - while (p < map + st.st_size) - { - unsigned int size = *(unsigned int *)p; - p += sizeof(unsigned int); - efreet_desktop_changes_monitor_add(p); - p += size; + map = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, dirsfd, 0); + if (map == MAP_FAILED) goto error; + p = map; + while (p < map + st.st_size) + { + unsigned int size = *(unsigned int *)p; + p += sizeof(unsigned int); + efreet_desktop_changes_monitor_add(p); + p += size; + } + munmap(map, st.st_size); } - munmap(map, st.st_size); + close(dirsfd); } - if (dirsfd > 0) close(dirsfd); return; error: - if (dirsfd > 0) close(dirsfd); + if (dirsfd >= 0) close(dirsfd); } static void |
From: Enlightenment S. <no-...@en...> - 2010-11-15 21:06:59
|
Log: share edd between lib and bin Author: englebass Date: 2010-11-15 13:06:52 -0800 (Mon, 15 Nov 2010) New Revision: 54573 Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c trunk/efreet/src/lib/efreet_desktop.c trunk/efreet/src/lib/efreet_private.h Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-11-15 21:04:42 UTC (rev 54572) +++ trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-11-15 21:06:52 UTC (rev 54573) @@ -399,7 +399,6 @@ unlink(file); } - efreet_desktop_edd_shutdown(edd); efreet_shutdown(); ecore_shutdown(); eet_shutdown(); @@ -409,7 +408,6 @@ error: if (dirsfd >= 0) close(dirsfd); IF_FREE(dir); - efreet_desktop_edd_shutdown(edd); edd_error: efreet_shutdown(); efreet_error: Modified: trunk/efreet/src/lib/efreet_desktop.c =================================================================== --- trunk/efreet/src/lib/efreet_desktop.c 2010-11-15 21:04:42 UTC (rev 54572) +++ trunk/efreet/src/lib/efreet_desktop.c 2010-11-15 21:06:52 UTC (rev 54573) @@ -128,6 +128,7 @@ void *fdata); static int efreet_desktop_environment_check(Efreet_Desktop *desktop); +static void efreet_desktop_edd_shutdown(void); static int efreet_desktop_write_cache_dirs_file(void); static void efreet_desktop_cache_update_cb(void *data, Ecore_File_Monitor *em, @@ -163,8 +164,7 @@ } if (!ecore_file_init()) goto ecore_error; - desktop_edd = efreet_desktop_edd_init(); - if (!desktop_edd) + if (!efreet_desktop_edd_init()) goto edd_error; efreet_desktop_cache = eina_hash_string_superfast_new(NULL); @@ -239,7 +239,7 @@ if (cache_monitor) ecore_file_monitor_del(cache_monitor); if (change_monitors) eina_hash_free(change_monitors); if (cache) eet_close(cache); - efreet_desktop_edd_shutdown(desktop_edd); + efreet_desktop_edd_shutdown(); ecore_file_shutdown(); eina_log_domain_unregister(_efreet_desktop_log_dom); IF_RELEASE(cache_file); @@ -1307,44 +1307,44 @@ EAPI Eet_Data_Descriptor * efreet_desktop_edd_init(void) { - Eet_Data_Descriptor *edd; + if (!desktop_edd) + { + Eet_Data_Descriptor_Class eddc; - Eet_Data_Descriptor_Class eddc; - if (!eet_eina_file_data_descriptor_class_set(&eddc, sizeof (eddc), "cache", sizeof(Efreet_Desktop))) return NULL; - edd = eet_data_descriptor_file_new(&eddc); - if (!edd) return NULL; - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Efreet_Desktop, "type", type, EET_T_INT); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Efreet_Desktop, "version", version, EET_T_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Efreet_Desktop, "orig_path", orig_path, EET_T_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Efreet_Desktop, "load_time", load_time, EET_T_LONG_LONG); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Efreet_Desktop, "name", name, EET_T_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Efreet_Desktop, "generic_name", generic_name, EET_T_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Efreet_Desktop, "comment", comment, EET_T_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Efreet_Desktop, "icon", icon, EET_T_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Efreet_Desktop, "try_exec", try_exec, EET_T_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Efreet_Desktop, "exec", exec, EET_T_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Efreet_Desktop, "path", path, EET_T_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Efreet_Desktop, "startup_wm_class", startup_wm_class, EET_T_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Efreet_Desktop, "url", url, EET_T_STRING); - eet_data_descriptor_element_add(edd, "only_show_in", EET_T_STRING, EET_G_LIST, offsetof(Efreet_Desktop, only_show_in), 0, NULL, NULL); - eet_data_descriptor_element_add(edd, "not_show_in", EET_T_STRING, EET_G_LIST, offsetof(Efreet_Desktop, not_show_in), 0, NULL, NULL); - eet_data_descriptor_element_add(edd, "categories", EET_T_STRING, EET_G_LIST, offsetof(Efreet_Desktop, categories), 0, NULL, NULL); - eet_data_descriptor_element_add(edd, "mime_types", EET_T_STRING, EET_G_LIST, offsetof(Efreet_Desktop, mime_types), 0, NULL, NULL); - eet_data_descriptor_element_add(edd, "x", EET_T_STRING, EET_G_HASH, offsetof(Efreet_Desktop, x), 0, NULL, NULL); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Efreet_Desktop, "no_display", no_display, EET_T_UCHAR); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Efreet_Desktop, "hidden", hidden, EET_T_UCHAR); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Efreet_Desktop, "terminal", terminal, EET_T_UCHAR); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd, Efreet_Desktop, "startup_notify", startup_notify, EET_T_UCHAR); - return edd; + EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Efreet_Desktop); + desktop_edd = eet_data_descriptor_file_new(&eddc); + if (!desktop_edd) return NULL; + EET_DATA_DESCRIPTOR_ADD_BASIC(desktop_edd, Efreet_Desktop, "type", type, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(desktop_edd, Efreet_Desktop, "version", version, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(desktop_edd, Efreet_Desktop, "orig_path", orig_path, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(desktop_edd, Efreet_Desktop, "load_time", load_time, EET_T_LONG_LONG); + EET_DATA_DESCRIPTOR_ADD_BASIC(desktop_edd, Efreet_Desktop, "name", name, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(desktop_edd, Efreet_Desktop, "generic_name", generic_name, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(desktop_edd, Efreet_Desktop, "comment", comment, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(desktop_edd, Efreet_Desktop, "icon", icon, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(desktop_edd, Efreet_Desktop, "try_exec", try_exec, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(desktop_edd, Efreet_Desktop, "exec", exec, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(desktop_edd, Efreet_Desktop, "path", path, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(desktop_edd, Efreet_Desktop, "startup_wm_class", startup_wm_class, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(desktop_edd, Efreet_Desktop, "url", url, EET_T_STRING); + eet_data_descriptor_element_add(desktop_edd, "only_show_in", EET_T_STRING, EET_G_LIST, offsetof(Efreet_Desktop, only_show_in), 0, NULL, NULL); + eet_data_descriptor_element_add(desktop_edd, "not_show_in", EET_T_STRING, EET_G_LIST, offsetof(Efreet_Desktop, not_show_in), 0, NULL, NULL); + eet_data_descriptor_element_add(desktop_edd, "categories", EET_T_STRING, EET_G_LIST, offsetof(Efreet_Desktop, categories), 0, NULL, NULL); + eet_data_descriptor_element_add(desktop_edd, "mime_types", EET_T_STRING, EET_G_LIST, offsetof(Efreet_Desktop, mime_types), 0, NULL, NULL); + eet_data_descriptor_element_add(desktop_edd, "x", EET_T_STRING, EET_G_HASH, offsetof(Efreet_Desktop, x), 0, NULL, NULL); + EET_DATA_DESCRIPTOR_ADD_BASIC(desktop_edd, Efreet_Desktop, "no_display", no_display, EET_T_UCHAR); + EET_DATA_DESCRIPTOR_ADD_BASIC(desktop_edd, Efreet_Desktop, "hidden", hidden, EET_T_UCHAR); + EET_DATA_DESCRIPTOR_ADD_BASIC(desktop_edd, Efreet_Desktop, "terminal", terminal, EET_T_UCHAR); + EET_DATA_DESCRIPTOR_ADD_BASIC(desktop_edd, Efreet_Desktop, "startup_notify", startup_notify, EET_T_UCHAR); + } + return desktop_edd; } -/* - * Needs EAPI because of helper binaries - */ -EAPI void -efreet_desktop_edd_shutdown(Eet_Data_Descriptor *edd) +static void +efreet_desktop_edd_shutdown(void) { - eet_data_descriptor_free(edd); + if (desktop_edd) eet_data_descriptor_free(desktop_edd); + desktop_edd = NULL; } static int Modified: trunk/efreet/src/lib/efreet_private.h =================================================================== --- trunk/efreet/src/lib/efreet_private.h 2010-11-15 21:04:42 UTC (rev 54572) +++ trunk/efreet/src/lib/efreet_private.h 2010-11-15 21:06:52 UTC (rev 54573) @@ -166,7 +166,6 @@ const char *efreet_desktop_environment_get(void); EAPI Eet_Data_Descriptor *efreet_desktop_edd_init(void); -EAPI void efreet_desktop_edd_shutdown(Eet_Data_Descriptor *edd); void efreet_util_desktop_cache_reload(void); EAPI const char *efreet_desktop_util_cache_file(void); |
From: Enlightenment S. <no-...@en...> - 2010-11-16 10:32:28
|
Log: create cache for fallback icons Author: englebass Date: 2010-11-16 02:32:21 -0800 (Tue, 16 Nov 2010) New Revision: 54583 Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c trunk/efreet/src/lib/efreet_cache.c trunk/efreet/src/lib/efreet_private.h Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_icon_cache_create.c 2010-11-16 10:32:11 UTC (rev 54582) +++ trunk/efreet/src/bin/efreet_icon_cache_create.c 2010-11-16 10:32:21 UTC (rev 54583) @@ -19,12 +19,103 @@ #include "efreet_private.h" static Eet_Data_Descriptor *edd = NULL; +static Eet_Data_Descriptor *fallback_edd = NULL; static Eina_List *extensions; -int verbose = 0; +static int verbose = 0; static int +cache_fallback_scan_dir(Eet_File *ef, Eina_Hash *dirs, const char *dir, int *changed) +{ + Eina_Iterator *it; + char buf[PATH_MAX]; + const char *ext, *file; + + if (eina_hash_find(dirs, dir)) return 1; + eina_hash_add(dirs, dir, (void *)-1); + + it = eina_file_ls(dir); + if (!it) return 1; + EINA_ITERATOR_FOREACH(it, file) + { + Eina_List *l; + Efreet_Cache_Icon *icon; + char *name, *tmp; + + ext = strrchr(file, '.'); + if (!ext) continue; + ext = eina_stringshare_add(ext); + if (!eina_list_data_find(extensions, ext)) + { + eina_stringshare_del(ext); + continue; + } + /* icon with known extension */ + name = strdup(ecore_file_file_get(file)); + tmp = strrchr(name, '.'); + if (tmp) *tmp = '\0'; + icon = eet_data_read(ef, fallback_edd, name); + if (!icon) + { + icon = NEW(Efreet_Cache_Icon, 1); + icon->free = 1; + icon->fallback = 1; +#if 0 + icon->name = eina_stringshare_add(name); +#endif + icon->theme = NULL; +#if 0 + icon->context = dir->context; +#endif + } + + icon->icons = eina_list_append(icon->icons, eina_stringshare_ref(file)); + if (!eet_data_write(ef, fallback_edd, name, icon, 1)) + { + free(name); + break; + } + efreet_cache_icon_free(icon); + free(name); + } + eina_iterator_free(it); + return 1; +} + +static int +cache_fallback_scan(Eet_File *ef, int *changed) +{ + Eina_List *xdg_dirs, *l; + const char *dir; + char path[PATH_MAX]; + Eina_Hash *dirs; + + dirs = eina_hash_string_superfast_new(NULL); + cache_fallback_scan_dir(ef, dirs, efreet_icon_deprecated_user_dir_get(), changed); + cache_fallback_scan_dir(ef, dirs, efreet_icon_user_dir_get(), changed); + + xdg_dirs = efreet_data_dirs_get(); + EINA_LIST_FOREACH(xdg_dirs, l, dir) + { + snprintf(path, sizeof(path), "%s/icons", dir); + cache_fallback_scan_dir(ef, dirs, path, changed); + } + +#ifndef STRICT_SPEC + EINA_LIST_FOREACH(xdg_dirs, l, dir) + { + snprintf(path, sizeof(path), "%s/pixmaps", dir); + cache_fallback_scan_dir(ef, dirs, path, changed); + } +#endif + + cache_fallback_scan_dir(ef, dirs, "/usr/share/pixmaps", changed); + eina_hash_free(dirs); + return 1; +} + +static int cache_scan_path_dir(Efreet_Icon_Theme *theme, const char *path, Efreet_Icon_Theme_Directory *dir, Eet_File *ef, int *changed) { Eina_Iterator *it; @@ -132,7 +223,6 @@ if (!theme) return 1; if (eina_hash_find(themes, theme->name.internal)) return 1; eina_hash_direct_add(themes, theme->name.internal, theme); - /* TODO: flush icons after each theme */ /* TODO: Maybe always read entry from eet, so when can check changed */ /* scan theme */ @@ -148,7 +238,7 @@ if (!cache_scan(theme, themes, ef, changed)) return 0; } } - else + else if (strcmp(theme->name.internal, "hicolor")) { theme = efreet_icon_theme_find("hicolor"); if (!cache_scan(theme, themes, ef, changed)) return 0; @@ -163,7 +253,10 @@ * - Add file monitor on files, so that we catch changes on files * during whilst this program runs. * - Maybe linger for a while to reduce number of cache re-creates. + * - pass extra dirs to binary, and read them + * - make sure programs with different extra dirs all work together */ + Eet_File *ef; char file[PATH_MAX]; Eina_List *l = NULL; Efreet_Icon_Theme *theme; @@ -226,6 +319,8 @@ if (!efreet_init()) goto efreet_error; edd = efreet_icon_edd_init(); if (!edd) goto edd_error; + fallback_edd = efreet_icon_fallback_edd_init(); + if (!edd) goto edd_error; if (argc > 1) { @@ -239,10 +334,9 @@ l = efreet_icon_theme_list_get(); EINA_LIST_FREE(l, theme) { - Eet_File *ef; Eina_Hash *themes; + changed = 0; - /* create cache */ /* TODO: Copy old cache to temp file, so we can check whether something has changed */ snprintf(file, sizeof(file), "%s.XXXXXX", efreet_icon_cache_file(theme->name.internal)); @@ -296,6 +390,54 @@ eet_clearcache(); } + /* fallback */ + changed = 0; + /* TODO: Copy old cache to temp file, so we can check whether something has changed */ + snprintf(file, sizeof(file), "%s.XXXXXX", efreet_icon_cache_file("_fallback")); + tmpfd = mkstemp(file); + if (tmpfd < 0) goto error; + close(tmpfd); + ef = eet_open(file, EET_FILE_MODE_READ_WRITE); + if (!ef) goto error; + + if (!cache_fallback_scan(ef, &changed)) + { + eet_close(ef); + goto error; + } + + changed = 1; + /* check if old and new caches contain the same number of entries */ +#if 0 + if (!changed) + { + Eet_File *old; + + old = eet_open(efreet_icon_cache_file(), EET_FILE_MODE_READ); + if (!old || eet_num_entries(old) != eet_num_entries(ef)) changed = 1; + if (old) eet_close(old); + + } +#endif + + /* cleanup */ + eet_close(ef); + + /* unlink old cache files */ + if (changed) + { + if (unlink(efreet_icon_cache_file("_fallback")) < 0) + { + if (errno != ENOENT) goto error; + } + /* rename tmp files to real files */ + if (rename(file, efreet_icon_cache_file("_fallback")) < 0) goto error; + } + else + { + unlink(file); + } + eina_list_free(extensions); efreet_shutdown(); Modified: trunk/efreet/src/lib/efreet_cache.c =================================================================== --- trunk/efreet/src/lib/efreet_cache.c 2010-11-16 10:32:11 UTC (rev 54582) +++ trunk/efreet/src/lib/efreet_cache.c 2010-11-16 10:32:21 UTC (rev 54583) @@ -10,13 +10,23 @@ */ static Eet_Data_Descriptor *cache_icon_edd = NULL; static Eet_Data_Descriptor *cache_icon_element_edd = NULL; +static Eet_Data_Descriptor *cache_icon_fallback_edd = NULL; static void efreet_icon_edd_shutdown(void); int efreet_cache_init(void) { - if (!efreet_icon_edd_init()) return 0; + if (!efreet_icon_edd_init()) + { + efreet_icon_edd_shutdown(); + return 0; + } + if (!efreet_icon_fallback_edd_init()) + { + efreet_icon_edd_shutdown(); + return 0; + } return 1; } @@ -84,6 +94,35 @@ return NULL; } +/* + * Needs EAPI because of helper binaries + */ +EAPI Eet_Data_Descriptor * +efreet_icon_fallback_edd_init(void) +{ + Eet_Data_Descriptor_Class eddc; + + if (!cache_icon_fallback_edd) + { + EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Efreet_Cache_Icon); + cache_icon_fallback_edd = eet_data_descriptor_file_new(&eddc); + if (!cache_icon_fallback_edd) + goto error; + +#if 0 + EET_DATA_DESCRIPTOR_ADD_BASIC(cache_icon_fallback_edd, Efreet_Cache_Icon, "name", name, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(cache_icon_fallback_edd, Efreet_Cache_Icon, "theme", theme, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(cache_icon_fallback_edd, Efreet_Cache_Icon, "context", context, EET_T_INT); +#endif + EET_DATA_DESCRIPTOR_ADD_BASIC(cache_icon_fallback_edd, Efreet_Cache_Icon, "fallback", fallback, EET_T_UCHAR); + eet_data_descriptor_element_add(cache_icon_fallback_edd, "icons", EET_T_STRING, EET_G_LIST, offsetof(Efreet_Cache_Icon, icons), 0, NULL, NULL); + } + return cache_icon_fallback_edd; +error: + efreet_icon_edd_shutdown(); + return NULL; +} + static void efreet_icon_edd_shutdown(void) { @@ -91,6 +130,8 @@ cache_icon_edd = NULL; if (cache_icon_element_edd) eet_data_descriptor_free(cache_icon_element_edd); cache_icon_element_edd = NULL; + if (cache_icon_fallback_edd) eet_data_descriptor_free(cache_icon_fallback_edd); + cache_icon_fallback_edd = NULL; } /* @@ -99,7 +140,8 @@ EAPI void efreet_cache_icon_free(Efreet_Cache_Icon *icon) { - Efreet_Cache_Icon_Element *elem; + void *data; + if (icon->free) { #if 0 @@ -108,16 +150,29 @@ eina_stringshare_del(icon->theme); } - EINA_LIST_FREE(icon->icons, elem) + EINA_LIST_FREE(icon->icons, data) { const char *path; - if (icon->free) - EINA_LIST_FREE(elem->paths, path) - eina_stringshare_del(path); + if (icon->fallback) + { + if (icon->free) + eina_stringshare_del(data); + } else - eina_list_free(elem->paths); - free(elem); + { + Efreet_Cache_Icon_Element *elem; + + elem = data; + if (icon->free) + { + EINA_LIST_FREE(elem->paths, path) + eina_stringshare_del(path); + } + else + eina_list_free(elem->paths); + free(elem); + } } free(icon); } Modified: trunk/efreet/src/lib/efreet_private.h =================================================================== --- trunk/efreet/src/lib/efreet_private.h 2010-11-16 10:32:11 UTC (rev 54582) +++ trunk/efreet/src/lib/efreet_private.h 2010-11-16 10:32:21 UTC (rev 54583) @@ -146,6 +146,7 @@ int context; /* the type of icon */ #endif Eina_List *icons; + unsigned char fallback; unsigned char free:1; }; @@ -210,6 +211,7 @@ EAPI const char *efreet_icon_cache_file(const char *theme); EAPI Eet_Data_Descriptor *efreet_icon_edd_init(void); +EAPI Eet_Data_Descriptor *efreet_icon_fallback_edd_init(void); EAPI void efreet_cache_icon_free(Efreet_Cache_Icon *icon); #endif |
From: Enlightenment S. <no-...@en...> - 2010-11-24 19:37:08
|
Log: remove unneeded code Author: englebass Date: 2010-11-24 11:37:01 -0800 (Wed, 24 Nov 2010) New Revision: 54949 Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c trunk/efreet/src/lib/efreet_cache.c trunk/efreet/src/lib/efreet_private.h Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_icon_cache_create.c 2010-11-24 19:22:34 UTC (rev 54948) +++ trunk/efreet/src/bin/efreet_icon_cache_create.c 2010-11-24 19:37:01 UTC (rev 54949) @@ -69,13 +69,7 @@ icon = NEW(Efreet_Cache_Icon, 1); icon->free = 1; icon->fallback = 1; -#if 0 - icon->name = eina_stringshare_add(name); -#endif icon->theme = NULL; -#if 0 - icon->context = dir->context; -#endif } icon->icons = eina_list_append(icon->icons, eina_stringshare_ref(ent)); @@ -157,13 +151,7 @@ { icon = NEW(Efreet_Cache_Icon, 1); icon->free = 1; -#if 0 - icon->name = eina_stringshare_add(name); -#endif icon->theme = eina_stringshare_add(theme->name.internal); -#if 0 - icon->context = dir->context; -#endif } else if (strcmp(icon->theme, theme->name.internal)) { Modified: trunk/efreet/src/lib/efreet_cache.c =================================================================== --- trunk/efreet/src/lib/efreet_cache.c 2010-11-24 19:22:34 UTC (rev 54948) +++ trunk/efreet/src/lib/efreet_cache.c 2010-11-24 19:37:01 UTC (rev 54949) @@ -276,17 +276,8 @@ if (!cache_icon_element_edd) goto error; -#if 0 - EET_DATA_DESCRIPTOR_ADD_BASIC(cache_icon_edd, Efreet_Cache_Icon, "name", name, EET_T_STRING); -#endif EET_DATA_DESCRIPTOR_ADD_BASIC(cache_icon_edd, Efreet_Cache_Icon, "theme", theme, EET_T_STRING); -#if 0 - EET_DATA_DESCRIPTOR_ADD_BASIC(cache_icon_edd, Efreet_Cache_Icon, "context", context, EET_T_INT); -#endif EET_DATA_DESCRIPTOR_ADD_LIST(cache_icon_edd, Efreet_Cache_Icon, "icons", icons, cache_icon_element_edd); -#if 0 - EET_DATA_DESCRIPTOR_ADD_BASIC(cache_icon_element_edd, Efreet_Cache_Icon_Element, "type", type, EET_T_INT); -#endif eet_data_descriptor_element_add(cache_icon_element_edd, "paths", EET_T_STRING, EET_G_LIST, offsetof(Efreet_Cache_Icon_Element, paths), 0, NULL, NULL); EET_DATA_DESCRIPTOR_ADD_BASIC(cache_icon_element_edd, Efreet_Cache_Icon_Element, "size.normal", size.normal, EET_T_USHORT); EET_DATA_DESCRIPTOR_ADD_BASIC(cache_icon_element_edd, Efreet_Cache_Icon_Element, "size.min", size.min, EET_T_USHORT); @@ -313,11 +304,6 @@ if (!cache_icon_fallback_edd) goto error; -#if 0 - EET_DATA_DESCRIPTOR_ADD_BASIC(cache_icon_fallback_edd, Efreet_Cache_Icon, "name", name, EET_T_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(cache_icon_fallback_edd, Efreet_Cache_Icon, "theme", theme, EET_T_STRING); - EET_DATA_DESCRIPTOR_ADD_BASIC(cache_icon_fallback_edd, Efreet_Cache_Icon, "context", context, EET_T_INT); -#endif EET_DATA_DESCRIPTOR_ADD_BASIC(cache_icon_fallback_edd, Efreet_Cache_Icon, "fallback", fallback, EET_T_UCHAR); eet_data_descriptor_element_add(cache_icon_fallback_edd, "icons", EET_T_STRING, EET_G_LIST, offsetof(Efreet_Cache_Icon, icons), 0, NULL, NULL); } @@ -397,12 +383,7 @@ if (!icon) return; if (icon->free) - { -#if 0 - eina_stringshare_del(icon->name); -#endif eina_stringshare_del(icon->theme); - } EINA_LIST_FREE(icon->icons, data) { Modified: trunk/efreet/src/lib/efreet_private.h =================================================================== --- trunk/efreet/src/lib/efreet_private.h 2010-11-24 19:22:34 UTC (rev 54948) +++ trunk/efreet/src/lib/efreet_private.h 2010-11-24 19:37:01 UTC (rev 54949) @@ -142,13 +142,7 @@ typedef struct Efreet_Cache_Icon Efreet_Cache_Icon; struct Efreet_Cache_Icon { -#if 0 - const char *name; -#endif const char *theme; -#if 0 - int context; /* the type of icon */ -#endif Eina_List *icons; unsigned char fallback; unsigned char free:1; |
From: Enlightenment S. <no-...@en...> - 2010-11-27 20:15:10
|
Log: Rename efreet_icon_private.h to something better efreet_icon_private.h should be private to external code interacting with the icon cache, so name it efreet_cache_private.h and only include Eet.h there. Author: englebass Date: 2010-11-27 12:15:00 -0800 (Sat, 27 Nov 2010) New Revision: 55035 Added: trunk/efreet/src/lib/efreet_cache_private.h Removed: trunk/efreet/src/lib/efreet_icon_private.h Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c trunk/efreet/src/bin/efreet_icon_cache_create.c trunk/efreet/src/bin/efreet_icon_cache_dump.c trunk/efreet/src/lib/Makefile.am trunk/efreet/src/lib/efreet_cache.c trunk/efreet/src/lib/efreet_icon.c trunk/efreet/src/lib/efreet_private.h Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-11-27 17:02:18 UTC (rev 55034) +++ trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-11-27 20:15:00 UTC (rev 55035) @@ -18,7 +18,7 @@ #include "Efreet.h" #include "efreet_private.h" -#include "efreet_icon_private.h" +#include "efreet_cache_private.h" static Eet_Data_Descriptor *edd = NULL; static Eet_File *ef = NULL; Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_icon_cache_create.c 2010-11-27 17:02:18 UTC (rev 55034) +++ trunk/efreet/src/bin/efreet_icon_cache_create.c 2010-11-27 20:15:00 UTC (rev 55035) @@ -17,6 +17,7 @@ #include "Efreet.h" #include "efreet_private.h" +#include "efreet_cache_private.h" static const char *exts[] = { ".png", ".xpm", ".svg", NULL }; Modified: trunk/efreet/src/bin/efreet_icon_cache_dump.c =================================================================== --- trunk/efreet/src/bin/efreet_icon_cache_dump.c 2010-11-27 17:02:18 UTC (rev 55034) +++ trunk/efreet/src/bin/efreet_icon_cache_dump.c 2010-11-27 20:15:00 UTC (rev 55035) @@ -17,6 +17,7 @@ #include "Efreet.h" #include "efreet_private.h" +#include "efreet_cache_private.h" static Eet_Data_Descriptor *edd = NULL; Modified: trunk/efreet/src/lib/Makefile.am =================================================================== --- trunk/efreet/src/lib/Makefile.am 2010-11-27 17:02:18 UTC (rev 55034) +++ trunk/efreet/src/lib/Makefile.am 2010-11-27 20:15:00 UTC (rev 55035) @@ -63,4 +63,4 @@ libefreet_trash_la_LIBADD = @EFREET_LIBS@ libefreet.la libefreet_trash_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @release_info@ -EXTRA_DIST = efreet_private.h efreet_xml.h +EXTRA_DIST = efreet_private.h efreet_xml.h efreet_cache_private.h Modified: trunk/efreet/src/lib/efreet_cache.c =================================================================== --- trunk/efreet/src/lib/efreet_cache.c 2010-11-27 17:02:18 UTC (rev 55034) +++ trunk/efreet/src/lib/efreet_cache.c 2010-11-27 20:15:00 UTC (rev 55035) @@ -12,7 +12,7 @@ #include "Efreet.h" #include "efreet_private.h" -#include "efreet_icon_private.h" +#include "efreet_cache_private.h" typedef struct _Efreet_Old_Cache Efreet_Old_Cache; Modified: trunk/efreet/src/lib/efreet_icon.c =================================================================== --- trunk/efreet/src/lib/efreet_icon.c 2010-11-27 17:02:18 UTC (rev 55034) +++ trunk/efreet/src/lib/efreet_icon.c 2010-11-27 20:15:00 UTC (rev 55035) @@ -34,7 +34,6 @@ #include "Efreet.h" #include "efreet_private.h" -#include "efreet_icon_private.h" #ifdef EFREET_MODULE_LOG_DOM #undef EFREET_MODULE_LOG_DOM Modified: trunk/efreet/src/lib/efreet_private.h =================================================================== --- trunk/efreet/src/lib/efreet_private.h 2010-11-27 17:02:18 UTC (rev 55034) +++ trunk/efreet/src/lib/efreet_private.h 2010-11-27 20:15:00 UTC (rev 55035) @@ -1,10 +1,6 @@ #ifndef EFREET_PRIVATE_H #define EFREET_PRIVATE_H -#ifdef ICON_CACHE -# include <Eet.h> -#endif - /** * @file efreet_private.h * @brief Contains methods and defines that are private to the Efreet @@ -227,8 +223,6 @@ #ifdef ICON_CACHE EAPI const char *efreet_icon_cache_file(void); -EAPI Eet_Data_Descriptor *efreet_icon_theme_edd(void); -EAPI Eet_Data_Descriptor *efreet_icon_fallback_edd(void); EAPI void efreet_cache_icon_free(Efreet_Cache_Icon *icon); EAPI void efreet_cache_icon_fallback_free(Efreet_Cache_Fallback_Icon *icon); Efreet_Cache_Icon *efreet_cache_icon_find(Efreet_Icon_Theme *theme, const char *icon); |
From: Enlightenment S. <no-...@en...> - 2010-11-30 18:41:30
|
Log: formatting Author: englebass Date: 2010-11-30 10:41:21 -0800 (Tue, 30 Nov 2010) New Revision: 55093 Trac: http://trac.enlightenment.org/e/changeset/55093 Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c trunk/efreet/src/lib/efreet_private.h Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_icon_cache_create.c 2010-11-30 18:06:35 UTC (rev 55092) +++ trunk/efreet/src/bin/efreet_icon_cache_create.c 2010-11-30 18:41:21 UTC (rev 55093) @@ -27,7 +27,7 @@ static void _cache_directory_free(void *dcache) { - free(dcache); + free(dcache); } static Eina_Bool @@ -39,13 +39,13 @@ if (stat(dir, &st)) return EINA_FALSE; dcache = eina_hash_find(dirs, dir); if (!dcache) - { - dcache = malloc(sizeof (Efreet_Cache_Directory)); - if (!dcache) return 1; + { + dcache = malloc(sizeof (Efreet_Cache_Directory)); + if (!dcache) return 1; - dcache->modified_time = (long long) st.st_mtime; - eina_hash_add(dirs, dir, dcache); - } + dcache->modified_time = (long long) st.st_mtime; + eina_hash_add(dirs, dir, dcache); + } else if (dcache->modified_time == (long long) st.st_mtime) return EINA_FALSE; dcache->modified_time = st.st_mtime; @@ -167,7 +167,7 @@ snprintf(buf, sizeof(buf), "%s/%s", path, dir->name); if (!cache_directory_find(dirs, buf)) - return 1; + return 1; it = eina_file_stat_ls(buf); if (!it) return 1; @@ -263,7 +263,7 @@ Efreet_Icon_Theme_Directory *dir; EINA_LIST_FOREACH(theme->directories, l, dir) - if (!cache_scan_path_dir(theme, path, dir, icons, dirs, changed)) return 0; + if (!cache_scan_path_dir(theme, path, dir, icons, dirs, changed)) return 0; return 1; } @@ -281,7 +281,7 @@ /* scan theme */ EINA_LIST_FOREACH(theme->paths, l, path) - if (!cache_scan_path(theme, icons, dirs, path, changed)) return 0; + if (!cache_scan_path(theme, icons, dirs, path, changed)) return 0; /* scan inherits */ if (theme->inherits) @@ -460,10 +460,10 @@ } if (!cache->icons) - cache->icons = eina_hash_string_superfast_new((Eina_Free_Cb) efreet_cache_icon_fallback_free); + cache->icons = eina_hash_string_superfast_new((Eina_Free_Cb) efreet_cache_icon_fallback_free); if (!cache->dirs) - cache->dirs = eina_hash_string_superfast_new(_cache_directory_free); + cache->dirs = eina_hash_string_superfast_new(_cache_directory_free); if (cache_scan(theme, themes, cache->icons, cache->dirs, &changed)) { @@ -509,10 +509,10 @@ } if (!cache->icons) - cache->icons = eina_hash_string_superfast_new((Eina_Free_Cb) efreet_cache_icon_fallback_free); + cache->icons = eina_hash_string_superfast_new((Eina_Free_Cb) efreet_cache_icon_fallback_free); if (!cache->dirs) - cache->dirs = eina_hash_string_superfast_new(_cache_directory_free); + cache->dirs = eina_hash_string_superfast_new(_cache_directory_free); /* Save fallback in the right part */ if (cache_fallback_scan(cache->icons, cache->dirs, &changed)) @@ -536,7 +536,7 @@ close(lockfd); while ((path = eina_array_pop(strs))) - eina_stringshare_del(path); + eina_stringshare_del(path); eina_array_free(strs); ecore_shutdown(); Modified: trunk/efreet/src/lib/efreet_private.h =================================================================== --- trunk/efreet/src/lib/efreet_private.h 2010-11-30 18:06:35 UTC (rev 55092) +++ trunk/efreet/src/lib/efreet_private.h 2010-11-30 18:41:21 UTC (rev 55093) @@ -133,12 +133,12 @@ } version; Eina_Hash *icons; - Eina_Hash *dirs; + Eina_Hash *dirs; }; struct _Efreet_Cache_Directory { - long long modified_time; + long long modified_time; }; struct _Efreet_Cache_Icon |
From: Enlightenment S. <no-...@en...> - 2010-12-02 08:32:29
|
Log: Rename to match icon functions Author: englebass Date: 2010-12-02 00:32:22 -0800 (Thu, 02 Dec 2010) New Revision: 55135 Trac: http://trac.enlightenment.org/e/changeset/55135 Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c trunk/efreet/src/lib/efreet_cache.c trunk/efreet/src/lib/efreet_cache_private.h Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-12-02 08:25:36 UTC (rev 55134) +++ trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-12-02 08:32:22 UTC (rev 55135) @@ -299,7 +299,7 @@ /* finish efreet init */ if (!efreet_init()) goto efreet_error; - edd = efreet_desktop_edd_init(); + edd = efreet_desktop_edd(); if (!edd) goto edd_error; /* create cache */ Modified: trunk/efreet/src/lib/efreet_cache.c =================================================================== --- trunk/efreet/src/lib/efreet_cache.c 2010-12-02 08:25:36 UTC (rev 55134) +++ trunk/efreet/src/lib/efreet_cache.c 2010-12-02 08:32:22 UTC (rev 55135) @@ -97,7 +97,7 @@ _efreet_cache_log_dom = eina_log_domain_register("efreet_cache", EFREET_DEFAULT_LOG_COLOR); if (_efreet_cache_log_dom < 0) return 0; - if (!efreet_desktop_edd_init()) + if (!efreet_desktop_edd()) goto error; #ifdef ICON_CACHE @@ -447,7 +447,7 @@ * Needs EAPI because of helper binaries */ EAPI Eet_Data_Descriptor * -efreet_desktop_edd_init(void) +efreet_desktop_edd(void) { Eet_Data_Descriptor_Class eddc; Modified: trunk/efreet/src/lib/efreet_cache_private.h =================================================================== --- trunk/efreet/src/lib/efreet_cache_private.h 2010-12-02 08:25:36 UTC (rev 55134) +++ trunk/efreet/src/lib/efreet_cache_private.h 2010-12-02 08:32:22 UTC (rev 55135) @@ -1,7 +1,7 @@ #ifndef EFREET_CACHE_PRIVATE_H #define EFREET_CACHE_PRIVATE_H -EAPI Eet_Data_Descriptor *efreet_desktop_edd_init(void); +EAPI Eet_Data_Descriptor *efreet_desktop_edd(void); #ifdef ICON_CACHE EAPI Eet_Data_Descriptor *efreet_icon_theme_edd(Eina_Bool include_dirs); EAPI Eet_Data_Descriptor *efreet_icon_fallback_edd(Eina_Bool include_dirs); |
From: Enlightenment S. <no-...@en...> - 2010-12-02 08:34:04
|
Log: use update file for icon cache Author: englebass Date: 2010-12-02 00:33:57 -0800 (Thu, 02 Dec 2010) New Revision: 55144 Trac: http://trac.enlightenment.org/e/changeset/55144 Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c trunk/efreet/src/lib/efreet_cache.c Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_icon_cache_create.c 2010-12-02 08:33:48 UTC (rev 55143) +++ trunk/efreet/src/bin/efreet_icon_cache_create.c 2010-12-02 08:33:57 UTC (rev 55144) @@ -368,6 +368,7 @@ char *dir = NULL; Eina_Bool changed = EINA_FALSE; int lockfd = -1; + int tmpfd = -1; int i; for (i = 1; i < argc; i++) @@ -529,6 +530,15 @@ /* save data */ eet_close(ef); + /* touch update file */ + snprintf(file, sizeof(file), "%s/.efreet/icon_data.update", efreet_home_dir_get()); + tmpfd = open(file, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR); + if (tmpfd >= 0) + { + write(tmpfd, "a", 1); + close(tmpfd); + } + on_error_efreet: efreet_shutdown(); Modified: trunk/efreet/src/lib/efreet_cache.c =================================================================== --- trunk/efreet/src/lib/efreet_cache.c 2010-12-02 08:33:48 UTC (rev 55143) +++ trunk/efreet/src/lib/efreet_cache.c 2010-12-02 08:33:57 UTC (rev 55144) @@ -681,7 +681,7 @@ ecore_event_add(EFREET_EVENT_DESKTOP_CACHE_UPDATE, ev, desktop_cache_update_free, d); } #ifdef ICON_CACHE - else if (!strcmp(file, efreet_icon_cache_file())) + else if (!strcmp(file, "icon_data.update")) { if (theme_cache) { |
From: Enlightenment S. <no-...@en...> - 2010-12-02 08:34:14
|
Log: add global version to cache files Author: englebass Date: 2010-12-02 00:34:07 -0800 (Thu, 02 Dec 2010) New Revision: 55145 Trac: http://trac.enlightenment.org/e/changeset/55145 Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c trunk/efreet/src/bin/efreet_icon_cache_create.c trunk/efreet/src/lib/efreet_cache.c trunk/efreet/src/lib/efreet_cache_private.h trunk/efreet/src/lib/efreet_private.h trunk/efreet/src/lib/efreet_utils.c Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-12-02 08:33:57 UTC (rev 55144) +++ trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-12-02 08:34:07 UTC (rev 55145) @@ -233,6 +233,7 @@ * during whilst this program runs. * - Maybe linger for a while to reduce number of cache re-creates. */ + Efreet_Cache_Version version; Eina_List *dirs = NULL, *user_dirs = NULL; int priority = 0; char *dir = NULL; @@ -404,6 +405,12 @@ } /* cleanup */ + version.major = EFREET_DESKTOP_UTILS_CACHE_MAJOR; + version.minor = EFREET_DESKTOP_UTILS_CACHE_MINOR; + eet_data_write(util_ef, efreet_version_edd(), EFREET_CACHE_VERSION, &version, 1); + version.major = EFREET_DESKTOP_CACHE_MAJOR; + version.minor = EFREET_DESKTOP_CACHE_MINOR; + eet_data_write(ef, efreet_version_edd(), EFREET_CACHE_VERSION, &version, 1); eet_close(util_ef); eet_close(ef); Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_icon_cache_create.c 2010-12-02 08:33:57 UTC (rev 55144) +++ trunk/efreet/src/bin/efreet_icon_cache_create.c 2010-12-02 08:34:07 UTC (rev 55145) @@ -358,6 +358,7 @@ * - pass extra dirs to binary, and read them * - make sure programs with different extra dirs all work together */ + Efreet_Cache_Version *version; Efreet_Cache_Theme *cache; Efreet_Icon_Theme *theme; Eet_Data_Descriptor *edd; @@ -425,7 +426,26 @@ ef = eet_open(efreet_icon_cache_file(), EET_FILE_MODE_READ_WRITE); if (!ef) goto on_error_efreet; + version = eet_data_read(ef, efreet_version_edd(), EFREET_CACHE_VERSION); + if (version && + ((version->major != EFREET_ICON_CACHE_MAJOR) || + (version->minor != EFREET_ICON_CACHE_MINOR))) + { + // delete old cache + eet_close(ef); + if (unlink(efreet_icon_cache_file()) < 0) + { + if (errno != ENOENT) goto on_error_efreet; + } + ef = eet_open(efreet_icon_cache_file(), EET_FILE_MODE_READ_WRITE); + if (!ef) goto on_error_efreet; + } + if (!version) + version = NEW(Efreet_Cache_Version, 1); + version->major = EFREET_ICON_CACHE_MAJOR; + version->minor = EFREET_ICON_CACHE_MINOR; + edd = efreet_icon_theme_edd(EINA_TRUE); EINA_LIST_FREE(l, theme) @@ -437,26 +457,12 @@ /* read icons from the eet file */ cache = eet_data_read(ef, edd, theme->name.internal); - /* Wype out in case of version change */ - if (cache && - (cache->version.major != EFREET_CACHE_MAJOR - || cache->version.minor != EFREET_CACHE_MINOR)) - { - eina_hash_free(cache->icons); - eina_hash_free(cache->dirs); - free(cache); - cache = NULL; - } - /* No existing cache before, so create it */ if (!cache) { cache = NEW(Efreet_Cache_Theme, 1); if (!cache) goto on_error_efreet; - cache->version.major = EFREET_CACHE_MAJOR; - cache->version.minor = EFREET_CACHE_MINOR; - changed = EINA_TRUE; } @@ -486,16 +492,7 @@ edd = efreet_icon_fallback_edd(EINA_TRUE); /* read fallback icons from the eet file */ - cache = eet_data_read(ef, edd, "efreet/fallback"); - if (cache && - (cache->version.major != EFREET_CACHE_MAJOR - || cache->version.minor != EFREET_CACHE_MINOR)) - { - if (cache->icons) eina_hash_free(cache->icons); - if (cache->dirs) eina_hash_free(cache->dirs); - free(cache); - cache = NULL; - } + cache = eet_data_read(ef, edd, EFREET_CACHE_ICON_FALLBACK); /* No existing fallback, create it */ if (!cache) @@ -503,9 +500,6 @@ cache = NEW(Efreet_Cache_Theme, 1); if (!cache) goto on_error_efreet; - cache->version.major = EFREET_CACHE_MAJOR; - cache->version.minor = EFREET_CACHE_MINOR; - changed = EINA_TRUE; } @@ -520,7 +514,7 @@ { fprintf(stderr, "generated: fallback %i (%i)\n", changed, eina_hash_population(cache->icons)); if (changed) - eet_data_write(ef, edd, "efreet/fallback", cache, 1); + eet_data_write(ef, edd, EFREET_CACHE_ICON_FALLBACK, cache, 1); } eina_hash_free(cache->icons); @@ -528,6 +522,7 @@ free(cache); /* save data */ + eet_data_write(ef, efreet_version_edd(), EFREET_CACHE_VERSION, version, 1); eet_close(ef); /* touch update file */ Modified: trunk/efreet/src/lib/efreet_cache.c =================================================================== --- trunk/efreet/src/lib/efreet_cache.c 2010-12-02 08:33:57 UTC (rev 55144) +++ trunk/efreet/src/lib/efreet_cache.c 2010-12-02 08:34:07 UTC (rev 55145) @@ -33,6 +33,7 @@ * Data for cache files */ #ifdef ICON_CACHE +static Eet_Data_Descriptor *cache_version_edd = NULL; static Eet_Data_Descriptor *directory_edd = NULL; static Eet_Data_Descriptor *cache_theme_edd = NULL; static Eet_Data_Descriptor *cache_fallback_edd = NULL; @@ -142,12 +143,10 @@ if (theme_name) eina_stringshare_del(theme_name); theme_name = NULL; - if (cache) eet_close(cache); - cache = NULL; + cache = efreet_cache_close(cache); #endif - if (desktop_cache) eet_close(desktop_cache); - desktop_cache = NULL; + desktop_cache = efreet_cache_close(desktop_cache); IF_RELEASE(desktop_cache_file); IF_RELEASE(desktop_cache_dirs); @@ -257,6 +256,7 @@ static void efreet_cache_edd_shutdown(void) { + EDD_SHUTDOWN(cache_version_edd); EDD_SHUTDOWN(desktop_edd); #ifdef ICON_CACHE EDD_SHUTDOWN(cache_fallback_edd); @@ -330,6 +330,28 @@ * Needs EAPI because of helper binaries */ EAPI Eet_Data_Descriptor * +efreet_version_edd(void) +{ + Eet_Data_Descriptor_Class eddc; + + if (cache_version_edd) return cache_version_edd; + + EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Efreet_Cache_Version); + cache_version_edd = eet_data_descriptor_file_new(&eddc); + if (!cache_version_edd) return NULL; + + EET_DATA_DESCRIPTOR_ADD_BASIC(cache_version_edd, Efreet_Cache_Version, + "minor", minor, EET_T_UCHAR); + EET_DATA_DESCRIPTOR_ADD_BASIC(cache_version_edd, Efreet_Cache_Version, + "major", major, EET_T_UCHAR); + + return cache_version_edd; +} + +/* + * Needs EAPI because of helper binaries + */ +EAPI Eet_Data_Descriptor * efreet_icon_theme_edd(Eina_Bool include_dirs) { Eet_Data_Descriptor_Class eddc; @@ -369,10 +391,6 @@ cache_theme_edd = eet_data_descriptor_file_new(&eddc); if (!cache_theme_edd) return NULL; - EET_DATA_DESCRIPTOR_ADD_BASIC(cache_theme_edd, Efreet_Cache_Theme, - "version.minor", version.minor, EET_T_UCHAR); - EET_DATA_DESCRIPTOR_ADD_BASIC(cache_theme_edd, Efreet_Cache_Theme, - "version.major", version.major, EET_T_UCHAR); EET_DATA_DESCRIPTOR_ADD_HASH(cache_theme_edd, Efreet_Cache_Theme, "icons", icons, icon_edd); @@ -419,10 +437,6 @@ cache_fallback_edd = eet_data_descriptor_file_new(&eddc); if (!cache_fallback_edd) return NULL; - EET_DATA_DESCRIPTOR_ADD_BASIC(cache_fallback_edd, Efreet_Cache_Theme, - "version.minor", version.minor, EET_T_UCHAR); - EET_DATA_DESCRIPTOR_ADD_BASIC(cache_fallback_edd, Efreet_Cache_Theme, - "version.major", version.major, EET_T_UCHAR); EET_DATA_DESCRIPTOR_ADD_HASH(cache_fallback_edd, Efreet_Cache_Theme, "icons", icons, icon_fallback_edd); @@ -507,8 +521,7 @@ Efreet_Cache_Icon * efreet_cache_icon_find(Efreet_Icon_Theme *theme, const char *icon) { - if (!cache) cache = eet_open(efreet_icon_cache_file(), EET_FILE_MODE_READ); - if (!cache) return NULL; + if (!efreet_cache_check(&cache, efreet_icon_cache_file(), EFREET_ICON_CACHE_MAJOR)) return NULL; if (theme_name && strcmp(theme_name, theme->name.internal)) { @@ -529,7 +542,7 @@ theme_name = eina_stringshare_add(theme->name.internal); } - if (!theme_cache || theme_cache->version.major != EFREET_CACHE_MAJOR) return NULL; + if (!theme_cache) return NULL; return eina_hash_find(theme_cache->icons, icon); } @@ -537,18 +550,17 @@ Efreet_Cache_Fallback_Icon * efreet_cache_icon_fallback_find(const char *icon) { - if (!cache) cache = eet_open(efreet_icon_cache_file(), EET_FILE_MODE_READ); - if (!cache) return NULL; + if (!efreet_cache_check(&cache, efreet_icon_cache_file(), EFREET_ICON_CACHE_MAJOR)) return NULL; if (!fallback_cache) { INFO("loading fallback cache"); - fallback_cache = eet_data_read(cache, efreet_icon_fallback_edd(EINA_FALSE), "efreet/fallback"); + fallback_cache = eet_data_read(cache, efreet_icon_fallback_edd(EINA_FALSE), EFREET_CACHE_ICON_FALLBACK); if (fallback_cache && !fallback_cache->icons) fallback_cache->icons = eina_hash_string_superfast_new((Eina_Free_Cb) efreet_cache_icon_fallback_free); } - if (!fallback_cache || fallback_cache->version.major != EFREET_CACHE_MAJOR) return NULL; + if (!fallback_cache) return NULL; return eina_hash_find(fallback_cache->icons, icon); } @@ -562,10 +574,7 @@ if (!realpath(file, rp)) return NULL; - if (!desktop_cache) - desktop_cache = eet_open(efreet_desktop_cache_file(), EET_FILE_MODE_READ); - if (!desktop_cache) - return NULL; + if (!efreet_cache_check(&desktop_cache, efreet_desktop_cache_file(), EFREET_DESKTOP_CACHE_MAJOR)) return NULL; desktop = eet_data_read(desktop_cache, efreet_desktop_edd(), rp); if (!desktop) return NULL; @@ -621,6 +630,40 @@ } } +Eina_Bool +efreet_cache_check(Eet_File **ef, const char *path, int major) +{ + Efreet_Cache_Version *version; + + if (*ef == NON_EXISTING) return EINA_FALSE; + if (!*ef) + *ef = eet_open(path, EET_FILE_MODE_READ); + if (!*ef) + { + *ef = NON_EXISTING; + return EINA_FALSE; + } + + version = eet_data_read(*ef, efreet_version_edd(), EFREET_CACHE_VERSION); + if ((!version) || (version->major != major)) + { + IF_FREE(version); + eet_close(*ef); + *ef = NON_EXISTING; + return EINA_FALSE; + } + free(version); + return EINA_TRUE; +} + +void * +efreet_cache_close(Eet_File *ef) +{ + if (ef && ef != NON_EXISTING) + eet_close(ef); + return NULL; +} + static Eina_Bool cache_exe_cb(void *data __UNUSED__, int type __UNUSED__, void *event) { @@ -698,8 +741,7 @@ fallback_cache = _efreet_cache_free(fallback_cache); } - if (cache) eet_close(cache); - cache = NULL; + cache = efreet_cache_close(cache); ev = NEW(Efreet_Event_Cache_Update, 1); if (!ev) return; @@ -821,7 +863,7 @@ */ if (dangling == 0) { - if (d->ef) eet_close(d->ef); + efreet_cache_close(d->ef); } else { Modified: trunk/efreet/src/lib/efreet_cache_private.h =================================================================== --- trunk/efreet/src/lib/efreet_cache_private.h 2010-12-02 08:33:57 UTC (rev 55144) +++ trunk/efreet/src/lib/efreet_cache_private.h 2010-12-02 08:34:07 UTC (rev 55145) @@ -1,6 +1,15 @@ #ifndef EFREET_CACHE_PRIVATE_H #define EFREET_CACHE_PRIVATE_H +#define EFREET_CACHE_VERSION "efreet//version" +#ifdef ICON_CACHE +#define EFREET_CACHE_ICON_FALLBACK "efreet//fallback" +#endif + +Eina_Bool efreet_cache_check(Eet_File **ef, const char *path, int major); +void *efreet_cache_close(Eet_File *ef); + +EAPI Eet_Data_Descriptor *efreet_version_edd(void); EAPI Eet_Data_Descriptor *efreet_desktop_edd(void); #ifdef ICON_CACHE EAPI Eet_Data_Descriptor *efreet_icon_theme_edd(Eina_Bool include_dirs); Modified: trunk/efreet/src/lib/efreet_private.h =================================================================== --- trunk/efreet/src/lib/efreet_private.h 2010-12-02 08:33:57 UTC (rev 55144) +++ trunk/efreet/src/lib/efreet_private.h 2010-12-02 08:34:07 UTC (rev 55145) @@ -116,22 +116,28 @@ extern Eina_Hash *efreet_desktop_cache; #ifdef ICON_CACHE -#define EFREET_CACHE_MAJOR 0 -#define EFREET_CACHE_MINOR 3 +#define EFREET_ICON_CACHE_MAJOR 0 +#define EFREET_ICON_CACHE_MINOR 4 +#define EFREET_DESKTOP_CACHE_MAJOR 0 +#define EFREET_DESKTOP_CACHE_MINOR 1 +#define EFREET_DESKTOP_UTILS_CACHE_MAJOR 0 +#define EFREET_DESKTOP_UTILS_CACHE_MINOR 1 +typedef struct _Efreet_Cache_Version Efreet_Cache_Version; +typedef struct _Efreet_Cache_Theme Efreet_Cache_Theme; +typedef struct _Efreet_Cache_Directory Efreet_Cache_Directory; +typedef struct _Efreet_Cache_Icon Efreet_Cache_Icon; typedef struct _Efreet_Cache_Icon_Element Efreet_Cache_Icon_Element; typedef struct _Efreet_Cache_Fallback_Icon Efreet_Cache_Fallback_Icon; -typedef struct _Efreet_Cache_Icon Efreet_Cache_Icon; -typedef struct _Efreet_Cache_Theme Efreet_Cache_Theme; -typedef struct _Efreet_Cache_Directory Efreet_Cache_Directory; +struct _Efreet_Cache_Version +{ + unsigned char major; + unsigned char minor; +}; + struct _Efreet_Cache_Theme { - struct { - unsigned char major; - unsigned char minor; - } version; - Eina_Hash *icons; Eina_Hash *dirs; }; Modified: trunk/efreet/src/lib/efreet_utils.c =================================================================== --- trunk/efreet/src/lib/efreet_utils.c 2010-12-02 08:33:57 UTC (rev 55144) +++ trunk/efreet/src/lib/efreet_utils.c 2010-12-02 08:34:07 UTC (rev 55145) @@ -2,6 +2,8 @@ # include <config.h> #endif +/* TODO: move eet file handling to eet_cache.c */ + #undef alloca #ifdef HAVE_ALLOCA_H # include <alloca.h> @@ -32,6 +34,7 @@ #include "Efreet.h" #include "efreet_private.h" +#include "efreet_cache_private.h" /* define macros and variable for using the eina logging system */ @@ -51,8 +54,6 @@ static Eina_List *efreet_util_cache_list(const char *search, const char *what); static Eina_List *efreet_util_cache_glob_list(const char *search, const char *what); -static Eina_Bool cache_check(void); - static Eina_Hash *file_id_by_desktop_path = NULL; static const char *cache_file = NULL; static Eet_File *cache = NULL; @@ -83,7 +84,7 @@ eina_log_domain_unregister(_efreet_utils_log_dom); IF_FREE_HASH(file_id_by_desktop_path); - if (cache) eet_close(cache); + cache = efreet_cache_close(cache); IF_RELEASE(cache_file); return init; } @@ -238,7 +239,7 @@ int num, i; Efreet_Desktop *ret = NULL; - if (!cache_check()) return NULL; + if (!efreet_cache_check(&cache, efreet_desktop_util_cache_file(), EFREET_DESKTOP_UTILS_CACHE_MAJOR)) return NULL; if (!exec) return NULL; keys = eet_list(cache, "*::e", &num); @@ -331,7 +332,7 @@ int num, i; Eina_List *ret = NULL; - if (!cache_check()) return NULL; + if (!efreet_cache_check(&cache, efreet_desktop_util_cache_file(), EFREET_DESKTOP_UTILS_CACHE_MAJOR)) return NULL; if (!glob) return NULL; keys = eet_list(cache, "*::e", &num); @@ -408,7 +409,7 @@ int num, i; Eina_List *ret = NULL; - if (!cache_check()) return NULL; + if (!efreet_cache_check(&cache, efreet_desktop_util_cache_file(), EFREET_DESKTOP_UTILS_CACHE_MAJOR)) return NULL; keys = eet_list(cache, "*::ca", &num); if (!keys) return NULL; for (i = 0; i < num; i++) @@ -506,7 +507,7 @@ int num, i; Efreet_Desktop *ret = NULL; - if (!cache_check()) return NULL; + if (!efreet_cache_check(&cache, efreet_desktop_util_cache_file(), EFREET_DESKTOP_UTILS_CACHE_MAJOR)) return NULL; if ((!what1) && (!what2)) return NULL; keys = eet_list(cache, search, &num); @@ -540,7 +541,7 @@ int num, i; Eina_List *ret = NULL; - if (!cache_check()) return NULL; + if (!efreet_cache_check(&cache, efreet_desktop_util_cache_file(), EFREET_DESKTOP_UTILS_CACHE_MAJOR)) return NULL; if (!what) return NULL; keys = eet_list(cache, search, &num); @@ -575,7 +576,7 @@ int num, i; Eina_List *ret = NULL; - if (!cache_check()) return NULL; + if (!efreet_cache_check(&cache, efreet_desktop_util_cache_file(), EFREET_DESKTOP_UTILS_CACHE_MAJOR)) return NULL; if (!what) return NULL; keys = eet_list(cache, search, &num); @@ -606,20 +607,5 @@ void efreet_util_desktop_cache_reload(void) { - if (cache && cache != NON_EXISTING) eet_close(cache); - cache = NULL; + cache = efreet_cache_close(cache); } - -static Eina_Bool -cache_check(void) -{ - if (cache == NON_EXISTING) return EINA_FALSE; - if (!cache) - cache = eet_open(efreet_desktop_util_cache_file(), EET_FILE_MODE_READ); - if (!cache) - { - cache = NON_EXISTING; - return EINA_FALSE; - } - return EINA_TRUE; -} |
From: Enlightenment S. <no-...@en...> - 2010-12-04 16:02:27
|
Log: fix cache filenames move cache to XDG_CACHE_HOME and add hostname for shared homedirs Author: englebass Date: 2010-12-04 08:02:20 -0800 (Sat, 04 Dec 2010) New Revision: 55263 Trac: http://trac.enlightenment.org/e/changeset/55263 Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c trunk/efreet/src/bin/efreet_icon_cache_create.c trunk/efreet/src/lib/efreet_base.c trunk/efreet/src/lib/efreet_base.h trunk/efreet/src/lib/efreet_cache.c trunk/efreet/src/lib/efreet_utils.c Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-12-04 15:13:47 UTC (rev 55262) +++ trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-12-04 16:02:20 UTC (rev 55263) @@ -269,11 +269,11 @@ efreet_cache_update = 0; /* create homedir */ - snprintf(file, sizeof(file), "%s/.efreet", efreet_home_dir_get()); + snprintf(file, sizeof(file), "%s/efreet", efreet_cache_home_get()); if (!ecore_file_mkpath(file)) goto efreet_error; /* lock process, so that we only run one copy of this program */ - snprintf(file, sizeof(file), "%s/.efreet/desktop_data.lock", efreet_home_dir_get()); + snprintf(file, sizeof(file), "%s/efreet/desktop_data.lock", efreet_cache_home_get()); lockfd = open(file, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR); if (lockfd < 0) goto efreet_error; memset(&fl, 0, sizeof(struct flock)); @@ -442,7 +442,7 @@ } /* touch update file */ - snprintf(file, sizeof(file), "%s/.efreet/desktop_data.update", efreet_home_dir_get()); + snprintf(file, sizeof(file), "%s/efreet/desktop_data.update", efreet_cache_home_get()); tmpfd = open(file, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR); if (tmpfd >= 0) { Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_icon_cache_create.c 2010-12-04 15:13:47 UTC (rev 55262) +++ trunk/efreet/src/bin/efreet_icon_cache_create.c 2010-12-04 16:02:20 UTC (rev 55263) @@ -312,7 +312,7 @@ struct flock fl; int lockfd; - snprintf(file, sizeof(file), "%s/.efreet/icon_data.lock", efreet_home_dir_get()); + snprintf(file, sizeof(file), "%s/efreet/icon_data.lock", efreet_cache_home_get()); lockfd = open(file, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR); if (lockfd < 0) return -1; @@ -377,7 +377,7 @@ /* FIXME: should be in cache dir maybe */ /* create homedir */ - snprintf(file, sizeof(file), "%s/.efreet", efreet_home_dir_get()); + snprintf(file, sizeof(file), "%s/efreet", efreet_cache_home_get()); if (!ecore_file_mkpath(file)) return -1; /* lock process, so that we only run one copy of this program */ @@ -505,7 +505,7 @@ eet_close(ef); /* touch update file */ - snprintf(file, sizeof(file), "%s/.efreet/icon_data.update", efreet_home_dir_get()); + snprintf(file, sizeof(file), "%s/efreet/icon_data.update", efreet_cache_home_get()); tmpfd = open(file, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR); if (tmpfd >= 0) { Modified: trunk/efreet/src/lib/efreet_base.c =================================================================== --- trunk/efreet/src/lib/efreet_base.c 2010-12-04 15:13:47 UTC (rev 55262) +++ trunk/efreet/src/lib/efreet_base.c 2010-12-04 16:02:20 UTC (rev 55263) @@ -23,6 +23,7 @@ #include <stdio.h> #include <string.h> #include <limits.h> +#include <unistd.h> #include "Efreet.h" #include "efreet_private.h" @@ -42,6 +43,7 @@ static const char *xdg_cache_home = NULL; static Eina_List *xdg_data_dirs = NULL; static Eina_List *xdg_config_dirs = NULL; +static const char *hostname = NULL; /* define macros and variable for using the eina logging system */ #ifdef EFREET_MODULE_LOG_DOM @@ -90,6 +92,8 @@ IF_FREE_LIST(xdg_data_dirs, eina_stringshare_del); IF_FREE_LIST(xdg_config_dirs, eina_stringshare_del); + IF_RELEASE(hostname); + eina_log_domain_unregister(_efreet_base_log_dom); } @@ -200,6 +204,23 @@ } /** + * @return Returns the current hostname + * @brief Returns the current hostname or empty string if not found + */ +EAPI const char * +efreet_hostname_get(void) +{ + char buf[256]; + + if (hostname) return hostname; + if (gethostname(buf, sizeof(buf)) < 0) + hostname = eina_stringshare_add(""); + else + hostname = eina_stringshare_add(buf); + return hostname; +} + +/** * @internal * @param key: The environemnt key to lookup * @param fallback: The fallback value to use Modified: trunk/efreet/src/lib/efreet_base.h =================================================================== --- trunk/efreet/src/lib/efreet_base.h 2010-12-04 15:13:47 UTC (rev 55262) +++ trunk/efreet/src/lib/efreet_base.h 2010-12-04 16:02:20 UTC (rev 55263) @@ -17,6 +17,7 @@ EAPI Eina_List *efreet_config_dirs_get(void); EAPI const char *efreet_cache_home_get(void); +EAPI const char *efreet_hostname_get(void); /** * Efreet_Event_Cache_Update Modified: trunk/efreet/src/lib/efreet_cache.c =================================================================== --- trunk/efreet/src/lib/efreet_cache.c 2010-12-04 15:13:47 UTC (rev 55262) +++ trunk/efreet/src/lib/efreet_cache.c 2010-12-04 16:02:20 UTC (rev 55263) @@ -101,7 +101,7 @@ #endif EFREET_EVENT_DESKTOP_CACHE_UPDATE = ecore_event_type_new(); - snprintf(buf, sizeof(buf), "%s/.efreet", efreet_home_dir_get()); + snprintf(buf, sizeof(buf), "%s/efreet", efreet_cache_home_get()); if (!ecore_file_mkpath(buf)) goto error; if (efreet_cache_update) @@ -194,11 +194,11 @@ efreet_icon_cache_file(void) { static char cache_file[PATH_MAX] = { '\0' }; - const char *home; + const char *cache; - home = efreet_home_dir_get(); + cache = efreet_cache_home_get(); - snprintf(cache_file, sizeof(cache_file), "%s/.efreet/icons.eet", home); + snprintf(cache_file, sizeof(cache_file), "%s/efreet/icons_%s.eet", cache, efreet_hostname_get()); return cache_file; } @@ -233,23 +233,23 @@ efreet_desktop_cache_file(void) { char tmp[PATH_MAX] = { '\0' }; - const char *home, *lang, *country, *modifier; + const char *cache, *lang, *country, *modifier; if (desktop_cache_file) return desktop_cache_file; - home = efreet_home_dir_get(); + cache = efreet_cache_home_get(); lang = efreet_lang_get(); country = efreet_lang_country_get(); modifier = efreet_lang_modifier_get(); if (lang && country && modifier) - snprintf(tmp, sizeof(tmp), "%s/.efreet/desktop_%s_%s@%s.eet", home, lang, country, modifier); + snprintf(tmp, sizeof(tmp), "%s/efreet/desktop_%s_%s_%s@%s.eet", cache, efreet_hostname_get(), lang, country, modifier); else if (lang && country) - snprintf(tmp, sizeof(tmp), "%s/.efreet/desktop_%s_%s.eet", home, lang, country); + snprintf(tmp, sizeof(tmp), "%s/efreet/desktop_%s_%s_%s.eet", cache, efreet_hostname_get(), lang, country); else if (lang) - snprintf(tmp, sizeof(tmp), "%s/.efreet/desktop_%s.eet", home, lang); + snprintf(tmp, sizeof(tmp), "%s/efreet/desktop_%s_%s.eet", cache, efreet_hostname_get(), lang); else - snprintf(tmp, sizeof(tmp), "%s/.efreet/desktop.eet", home); + snprintf(tmp, sizeof(tmp), "%s/efreet/desktop_%s.eet", cache, efreet_hostname_get()); desktop_cache_file = eina_stringshare_add(tmp); return desktop_cache_file; @@ -265,7 +265,7 @@ if (desktop_cache_dirs) return desktop_cache_dirs; - snprintf(tmp, sizeof(tmp), "%s/.efreet/desktop_dirs.cache", efreet_home_dir_get()); + snprintf(tmp, sizeof(tmp), "%s/efreet/desktop_dirs.cache", efreet_cache_home_get()); desktop_cache_dirs = eina_stringshare_add(tmp); return desktop_cache_dirs; @@ -768,7 +768,7 @@ if (!efreet_desktop_write_cache_dirs_file()) return; - snprintf(file, sizeof(file), "%s/.efreet/desktop_exec.lock", efreet_home_dir_get()); + snprintf(file, sizeof(file), "%s/efreet/desktop_exec.lock", efreet_cache_home_get()); desktop_cache_exe_lock = open(file, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR); if (desktop_cache_exe_lock < 0) return; @@ -805,7 +805,7 @@ /* TODO: Retry update cache later */ if (icon_cache_exe_lock > 0) return; - snprintf(file, sizeof(file), "%s/.efreet/icon_exec.lock", efreet_home_dir_get()); + snprintf(file, sizeof(file), "%s/efreet/icon_exec.lock", efreet_cache_home_get()); icon_cache_exe_lock = open(file, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR); if (icon_cache_exe_lock < 0) return; Modified: trunk/efreet/src/lib/efreet_utils.c =================================================================== --- trunk/efreet/src/lib/efreet_utils.c 2010-12-04 15:13:47 UTC (rev 55262) +++ trunk/efreet/src/lib/efreet_utils.c 2010-12-04 16:02:20 UTC (rev 55263) @@ -96,23 +96,23 @@ efreet_desktop_util_cache_file(void) { char tmp[PATH_MAX] = { '\0' }; - const char *home, *lang, *country, *modifier; + const char *cache_dir, *lang, *country, *modifier; if (cache_file) return cache_file; - home = efreet_home_dir_get(); + cache_dir = efreet_cache_home_get(); lang = efreet_lang_get(); country = efreet_lang_country_get(); modifier = efreet_lang_modifier_get(); if (lang && country && modifier) - snprintf(tmp, sizeof(tmp), "%s/.efreet/desktop_util_%s_%s@%s.eet", home, lang, country, modifier); + snprintf(tmp, sizeof(tmp), "%s/efreet/desktop_util_%s_%s_%s@%s.eet", cache_dir, efreet_hostname_get(), lang, country, modifier); else if (lang && country) - snprintf(tmp, sizeof(tmp), "%s/.efreet/desktop_util_%s_%s.eet", home, lang, country); + snprintf(tmp, sizeof(tmp), "%s/efreet/desktop_util_%s_%s_%s.eet", cache_dir, efreet_hostname_get(), lang, country); else if (lang) - snprintf(tmp, sizeof(tmp), "%s/.efreet/desktop_util_%s.eet", home, lang); + snprintf(tmp, sizeof(tmp), "%s/efreet/desktop_util_%s_%s.eet", cache_dir, efreet_hostname_get(), lang); else - snprintf(tmp, sizeof(tmp), "%s/.efreet/desktop_util.eet", home); + snprintf(tmp, sizeof(tmp), "%s/efreet/desktop_util_%s.eet", cache_dir, efreet_hostname_get()); cache_file = eina_stringshare_add(tmp); return cache_file; |
From: Enlightenment S. <no-...@en...> - 2010-12-08 21:39:30
|
Log: don't terminate execs they finish very quickly, not need to terminate Author: englebass Date: 2010-12-08 13:39:23 -0800 (Wed, 08 Dec 2010) New Revision: 55383 Trac: http://trac.enlightenment.org/e/changeset/55383 Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c trunk/efreet/src/lib/efreet_cache.c Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-12-08 21:36:54 UTC (rev 55382) +++ trunk/efreet/src/bin/efreet_desktop_cache_create.c 2010-12-08 21:39:23 UTC (rev 55383) @@ -29,31 +29,6 @@ static int verbose = 0; -static char file[PATH_MAX] = { '\0' }; -static char util_file[PATH_MAX] = { '\0' }; - -static void -term_handler(int sig __UNUSED__, siginfo_t * info __UNUSED__, void *data __UNUSED__) -{ - if (util_file[0]) unlink(util_file); - if (file[0]) unlink(file); - if (verbose) printf("EXIT\n"); - exit(1); -} - -static void -catch_sigterm(void) -{ - struct sigaction act; - - act.sa_sigaction = term_handler; - act.sa_flags = SA_RESTART | SA_SIGINFO; - sigemptyset(&act.sa_mask); - - if (sigaction(SIGTERM, &act, NULL) < 0) - perror("sigaction"); /* It's bad if we can't deal with SIGTERM, but not dramatic */ -} - static int strcmplen(const void *data1, const void *data2) { @@ -243,8 +218,10 @@ int changed = 0; int i; struct flock fl; - struct sigaction act; + char file[PATH_MAX] = { '\0' }; + char util_file[PATH_MAX] = { '\0' }; + for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-v")) verbose = 1; @@ -263,9 +240,6 @@ if (!eet_init()) goto eet_error; if (!ecore_init()) goto ecore_error; - // Trap SIGTERM for clean shutdown - catch_sigterm(); - efreet_cache_update = 0; /* create homedir */ @@ -414,12 +388,6 @@ eet_close(util_ef); eet_close(ef); - /* Remove signal handler, no need to exit now */ - act.sa_sigaction = SIG_IGN; - act.sa_flags = SA_RESTART | SA_SIGINFO; - sigemptyset(&act.sa_mask); - sigaction(SIGTERM, &act, NULL); - /* unlink old cache files */ if (changed) { Modified: trunk/efreet/src/lib/efreet_cache.c =================================================================== --- trunk/efreet/src/lib/efreet_cache.c 2010-12-08 21:36:54 UTC (rev 55382) +++ trunk/efreet/src/lib/efreet_cache.c 2010-12-08 21:39:23 UTC (rev 55383) @@ -162,7 +162,6 @@ desktop_cache_job = NULL; } #ifdef ICON_CACHE - if (icon_cache_exe) ecore_exe_terminate(icon_cache_exe); if (icon_cache_exe_lock > 0) { close(icon_cache_exe_lock); @@ -170,7 +169,6 @@ } #endif - if (desktop_cache_exe) ecore_exe_terminate(desktop_cache_exe); if (desktop_cache_exe_lock > 0) { close(desktop_cache_exe_lock); |
From: Enlightenment S. <no-...@en...> - 2010-12-09 08:57:04
|
Log: enable icon theme cache Author: englebass Date: 2010-12-09 00:56:56 -0800 (Thu, 09 Dec 2010) New Revision: 55398 Trac: http://trac.enlightenment.org/e/changeset/55398 Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c trunk/efreet/src/lib/efreet_cache.c trunk/efreet/src/lib/efreet_icon.c trunk/efreet/src/lib/efreet_private.h Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_icon_cache_create.c 2010-12-09 08:56:46 UTC (rev 55397) +++ trunk/efreet/src/bin/efreet_icon_cache_create.c 2010-12-09 08:56:56 UTC (rev 55398) @@ -300,6 +300,73 @@ return 1; } +static Efreet_Icon_Theme_Directory * +icon_theme_directory_new(Efreet_Ini *ini, const char *name) +{ + Efreet_Icon_Theme_Directory *dir; + int val; + const char *tmp; + + if (!ini) return NULL; + + dir = NEW(Efreet_Icon_Theme_Directory, 1); + if (!dir) return NULL; + dir->name = eina_stringshare_add(name); + + efreet_ini_section_set(ini, name); + + tmp = efreet_ini_string_get(ini, "Context"); + if (tmp) + { + if (!strcasecmp(tmp, "Actions")) + dir->context = EFREET_ICON_THEME_CONTEXT_ACTIONS; + + else if (!strcasecmp(tmp, "Devices")) + dir->context = EFREET_ICON_THEME_CONTEXT_DEVICES; + + else if (!strcasecmp(tmp, "FileSystems")) + dir->context = EFREET_ICON_THEME_CONTEXT_FILESYSTEMS; + + else if (!strcasecmp(tmp, "MimeTypes")) + dir->context = EFREET_ICON_THEME_CONTEXT_MIMETYPES; + } + + /* Threshold is fallback */ + dir->type = EFREET_ICON_SIZE_TYPE_THRESHOLD; + + tmp = efreet_ini_string_get(ini, "Type"); + if (tmp) + { + if (!strcasecmp(tmp, "Fixed")) + dir->type = EFREET_ICON_SIZE_TYPE_FIXED; + + else if (!strcasecmp(tmp, "Scalable")) + dir->type = EFREET_ICON_SIZE_TYPE_SCALABLE; + } + + dir->size.normal = efreet_ini_int_get(ini, "Size"); + + if (dir->type == EFREET_ICON_SIZE_TYPE_THRESHOLD) + { + val = efreet_ini_int_get(ini, "Threshold"); + if (val < 0) val = 2; + dir->size.max = dir->size.normal + val; + dir->size.min = dir->size.normal - val; + } + else if (dir->type == EFREET_ICON_SIZE_TYPE_SCALABLE) + { + val = efreet_ini_int_get(ini, "MinSize"); + if (val < 0) dir->size.min = dir->size.normal; + else dir->size.min = val; + + val = efreet_ini_int_get(ini, "MaxSize"); + if (val < 0) dir->size.max = dir->size.normal; + else dir->size.max = val; + } + + return dir; +} + static void icon_theme_index_read(Efreet_Icon_Theme *theme, const char *path) { @@ -376,7 +443,7 @@ if (p) *p = '\0'; - dir = efreet_icon_theme_directory_new(ini, s); + dir = icon_theme_directory_new(ini, s); if (!dir) goto error; theme->directories = eina_list_append(theme->directories, dir); @@ -413,7 +480,7 @@ if (!theme) { - theme = efreet_icon_theme_new(); + theme = NEW(Efreet_Icon_Theme, 1); theme->name.internal = eina_stringshare_add(name); eina_hash_direct_add(icon_themes, (void *)theme->name.internal, theme); Modified: trunk/efreet/src/lib/efreet_cache.c =================================================================== --- trunk/efreet/src/lib/efreet_cache.c 2010-12-09 08:56:46 UTC (rev 55397) +++ trunk/efreet/src/lib/efreet_cache.c 2010-12-09 08:56:56 UTC (rev 55398) @@ -45,6 +45,7 @@ static Eet_Data_Descriptor *icon_edd = NULL; static Eet_File *icon_cache = NULL; +static Eet_File *icon_theme_cache = NULL; static const char *icon_theme_cache_file = NULL; @@ -150,6 +151,7 @@ theme_name = NULL; icon_cache = efreet_cache_close(icon_cache); + icon_theme_cache = efreet_cache_close(icon_theme_cache); #endif desktop_cache = efreet_cache_close(desktop_cache); @@ -627,6 +629,49 @@ return eina_hash_find(fallback_cache->icons, icon); } + +Efreet_Icon_Theme * +efreet_cache_icon_theme_find(const char *theme) +{ + if (!efreet_cache_check(&icon_theme_cache, efreet_icon_theme_cache_file(), EFREET_ICON_CACHE_MAJOR)) return NULL; + return eet_data_read(icon_theme_cache, efreet_icon_theme_edd(), theme); +} + +void +efreet_cache_icon_theme_free(Efreet_Icon_Theme *theme) +{ + void *data; + + if (!theme) return; + + eina_list_free(theme->paths); + eina_list_free(theme->inherits); + EINA_LIST_FREE(theme->directories, data) + free(data); + + free(theme); +} + +char ** +efreet_cache_icon_theme_name_list(int *num) +{ + char **keys; + int i; + + if (!efreet_cache_check(&icon_theme_cache, efreet_icon_theme_cache_file(), EFREET_ICON_CACHE_MAJOR)) return NULL; + keys = eet_list(icon_theme_cache, "*", num); + for (i = 0; i < *num; i++) + { + if (!strcmp(keys[i], EFREET_CACHE_VERSION) && (i < (*num + 1))) + { + memmove(&keys[i], &keys[i + 1], (*num - i - 1) * sizeof(char *)); + (*num)--; + break; + } + } + return keys; +} + #endif Efreet_Desktop * @@ -805,6 +850,7 @@ } icon_cache = efreet_cache_close(icon_cache); + icon_theme_cache = efreet_cache_close(icon_theme_cache); ev = NEW(Efreet_Event_Cache_Update, 1); if (!ev) return; Modified: trunk/efreet/src/lib/efreet_icon.c =================================================================== --- trunk/efreet/src/lib/efreet_icon.c 2010-12-09 08:56:46 UTC (rev 55397) +++ trunk/efreet/src/lib/efreet_icon.c 2010-12-09 08:56:56 UTC (rev 55398) @@ -43,7 +43,6 @@ static int _efreet_icon_log_dom = -1; /* TODO: Scan efreet_extra_icon_dirs for themes */ -/* TODO: icon theme cache */ static const char *efreet_icon_deprecated_user_dir = NULL; static const char *efreet_icon_user_dir = NULL; @@ -65,10 +64,10 @@ }; static char *efreet_icon_remove_extension(const char *icon); + +#ifndef ICON_CACHE static Efreet_Icon_Theme *efreet_icon_find_theme_check(const char *theme_name); - -#ifndef ICON_CACHE static const char *efreet_icon_find_fallback(Efreet_Icon_Theme *theme, const char *icon, unsigned int size); @@ -102,7 +101,6 @@ #ifndef ICON_CACHE static Efreet_Icon_Theme *efreet_icon_theme_new(void); -#endif static void efreet_icon_theme_free(Efreet_Icon_Theme *theme); static void efreet_icon_theme_dir_scan_all(const char *theme_name); static void efreet_icon_theme_dir_scan(const char *dir, @@ -112,13 +110,10 @@ static void efreet_icon_theme_index_read(Efreet_Icon_Theme *theme, const char *path); -#ifndef ICON_CACHE static Efreet_Icon_Theme_Directory *efreet_icon_theme_directory_new(Efreet_Ini *ini, const char *name); -#endif static void efreet_icon_theme_directory_free(Efreet_Icon_Theme_Directory *dir); -#ifndef ICON_CACHE static void efreet_icon_theme_cache_check(Efreet_Icon_Theme *theme); static int efreet_icon_theme_cache_check_dir(Efreet_Icon_Theme *theme, const char *dir); @@ -166,16 +161,16 @@ for (i = 0; default_exts[i]; i++) efreet_icon_extensions = eina_list_append(efreet_icon_extensions, eina_stringshare_add(default_exts[i])); +#ifndef ICON_CACHE efreet_icon_themes = eina_hash_string_superfast_new(EINA_FREE_CB(efreet_icon_theme_free)); - - efreet_extra_icon_dirs = NULL; -#ifndef ICON_CACHE efreet_icon_cache = eina_hash_string_superfast_new(EINA_FREE_CB(efreet_icon_cache_free)); +#else + efreet_icon_themes = eina_hash_string_superfast_new(EINA_FREE_CB(efreet_cache_icon_theme_free)); + efreet_icon_changes_listen(); #endif -#if ICON_CACHE - efreet_icon_changes_listen(); -#endif + efreet_extra_icon_dirs = NULL; + return 1; } @@ -289,6 +284,7 @@ efreet_icon_theme_list_get(void) { Eina_List *list = NULL; +#ifndef ICON_CACHE Eina_Iterator *it; Efreet_Icon_Theme *theme; @@ -307,7 +303,24 @@ list = eina_list_append(list, theme); } eina_iterator_free(it); +#else + char **keys; + int num, i; + keys = efreet_cache_icon_theme_name_list(&num); + if (keys) + { + for (i = 0; i < num; i++) + { + Efreet_Icon_Theme *theme; + + theme = efreet_icon_theme_find(keys[i]); + list = eina_list_append(list, theme); + } + free(keys); + } +#endif + return list; } @@ -327,8 +340,13 @@ theme = eina_hash_find(efreet_icon_themes, theme_name); if (!theme) { +#ifndef ICON_CACHE efreet_icon_theme_dir_scan_all(theme_name); theme = eina_hash_find(efreet_icon_themes, theme_name); +#else + theme = efreet_cache_icon_theme_find(theme_name); + if (theme) eina_hash_direct_add(efreet_icon_themes, theme->name.internal, theme); +#endif } return theme; @@ -370,6 +388,7 @@ return tmp; } +#ifndef ICON_CACHE /** * @internal * @param theme_name: The icon theme to look for @@ -393,6 +412,7 @@ return theme; } +#endif /** * @param theme_name: The icon theme to look for @@ -407,7 +427,11 @@ const char *value = NULL; Efreet_Icon_Theme *theme; +#ifndef ICON_CACHE theme = efreet_icon_find_theme_check(theme_name); +#else + theme = efreet_icon_theme_find(theme_name); +#endif if (theme) { @@ -477,7 +501,11 @@ char *data; Efreet_Icon_Theme *theme; +#ifndef ICON_CACHE theme = efreet_icon_find_theme_check(theme_name); +#else + theme = efreet_icon_theme_find(theme_name); +#endif if (theme) { @@ -1232,6 +1260,7 @@ efreet_ini_free(ini); } +#ifndef ICON_CACHE /** * @internal * @return Returns a new Efreet_Icon_Theme on success or NULL on failure @@ -1239,11 +1268,7 @@ * * Needs EAPI because of helper binaries */ -#ifndef ICON_CACHE static Efreet_Icon_Theme * -#else -EAPI Efreet_Icon_Theme * -#endif efreet_icon_theme_new(void) { Efreet_Icon_Theme *theme; @@ -1295,7 +1320,6 @@ theme->paths = eina_list_append(theme->paths, eina_stringshare_add(path)); } -#ifndef ICON_CACHE /** * @internal * @return Returns no value @@ -1371,7 +1395,6 @@ return 1; } -#endif /** * @internal @@ -1578,11 +1601,7 @@ * * Needs EAPI because of helper binaries */ -#ifndef ICON_CACHE static Efreet_Icon_Theme_Directory * -#else -EAPI Efreet_Icon_Theme_Directory * -#endif efreet_icon_theme_directory_new(Efreet_Ini *ini, const char *name) { Efreet_Icon_Theme_Directory *dir; @@ -1664,7 +1683,6 @@ FREE(dir); } -#ifndef ICON_CACHE static void efreet_icon_cache_free(Efreet_Icon_Cache *value) { Modified: trunk/efreet/src/lib/efreet_private.h =================================================================== --- trunk/efreet/src/lib/efreet_private.h 2010-12-09 08:56:46 UTC (rev 55397) +++ trunk/efreet/src/lib/efreet_private.h 2010-12-09 08:56:56 UTC (rev 55398) @@ -238,10 +238,9 @@ EAPI void efreet_cache_icon_fallback_free(Efreet_Cache_Fallback_Icon *icon); Efreet_Cache_Icon *efreet_cache_icon_find(Efreet_Icon_Theme *theme, const char *icon); Efreet_Cache_Fallback_Icon *efreet_cache_icon_fallback_find(const char *icon); - -EAPI Efreet_Icon_Theme *efreet_icon_theme_new(void); -EAPI Efreet_Icon_Theme_Directory *efreet_icon_theme_directory_new(Efreet_Ini *ini, - const char *name); +Efreet_Icon_Theme *efreet_cache_icon_theme_find(const char *theme); +void efreet_cache_icon_theme_free(Efreet_Icon_Theme *theme); +char **efreet_cache_icon_theme_name_list(int *num); #endif EAPI void efreet_hash_free(Eina_Hash *hash, Eina_Free_Cb free_cb); |
From: Enlightenment S. <no-...@en...> - 2011-02-02 22:58:22
|
Log: Pass extensions and directories to cache process. Author: englebass Date: 2011-02-02 14:58:15 -0800 (Wed, 02 Feb 2011) New Revision: 56666 Trac: http://trac.enlightenment.org/e/changeset/56666 Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c trunk/efreet/src/lib/efreet_cache.c trunk/efreet/src/lib/efreet_icon.c trunk/efreet/src/lib/efreet_icon.h Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_icon_cache_create.c 2011-02-02 22:57:34 UTC (rev 56665) +++ trunk/efreet/src/bin/efreet_icon_cache_create.c 2011-02-02 22:58:15 UTC (rev 56666) @@ -20,7 +20,14 @@ #include "efreet_private.h" #include "efreet_cache_private.h" -static const char *exts[] = { ".png", ".xpm", ".svg", ".edj", NULL }; +/* TODO: + * - Need to cache all exts searched and extra_dirs, so we know if we + * need to rescan dirs. Then re-enable cache_directory_find(). + * - Need to check if files has disappeared, as we only add new. + */ + +static Eina_Array *exts = NULL; +static Eina_Array *extra_dirs = NULL; static Eina_Array *strs = NULL; static Eina_Hash *icon_themes = NULL; static int verbose = 0; @@ -28,6 +35,8 @@ static Eina_Bool cache_directory_find(Eina_Hash *dirs, const char *dir) { + return EINA_TRUE; +#if 0 Efreet_Cache_Directory *dcache; struct stat st; @@ -47,15 +56,16 @@ dcache->modified_time = st.st_mtime; return EINA_TRUE; +#endif } static Eina_Bool -_cache_extension_lookup(const char *ext) +cache_extension_lookup(const char *ext) { unsigned int i; - for (i = 0; exts[i]; ++i) - if (!strcmp(exts[i], ext)) + for (i = 0; i < exts->count; ++i) + if (!strcmp(exts->data[i], ext)) return EINA_TRUE; return EINA_FALSE; } @@ -82,7 +92,7 @@ continue; ext = strrchr(entry->path + entry->name_start, '.'); - if (!ext || !_cache_extension_lookup(ext)) + if (!ext || !cache_extension_lookup(ext)) continue; /* icon with known extension */ @@ -122,10 +132,14 @@ static Eina_Bool cache_fallback_scan(Eina_Hash *icons, Eina_Hash *dirs, Eina_Bool *changed) { + unsigned int i; Eina_List *xdg_dirs, *l; const char *dir; char path[PATH_MAX]; + for (i = 0; i < extra_dirs->count; i++) + cache_fallback_scan_dir(icons, dirs, extra_dirs->data[i], changed); + cache_fallback_scan_dir(icons, dirs, efreet_icon_deprecated_user_dir_get(), changed); cache_fallback_scan_dir(icons, dirs, efreet_icon_user_dir_get(), changed); @@ -180,7 +194,7 @@ continue; ext = strrchr(entry->path + entry->name_start, '.'); - if (!ext || !_cache_extension_lookup(ext)) + if (!ext || !cache_extension_lookup(ext)) continue; /* icon with known extension */ @@ -660,6 +674,12 @@ char **keys; int num, i; + /* init external subsystems */ + if (!eina_init()) return -1; + + exts = eina_array_new(10); + extra_dirs = eina_array_new(10); + for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-v")) verbose = 1; @@ -669,13 +689,28 @@ (!strcmp(argv[i], "--help"))) { printf("Options:\n"); - printf(" -v Verbose mode\n"); + printf(" -v Verbose mode\n"); + printf(" -e .ext1 .ext2 Extensions\n"); + printf(" -d dir1 dir2 Extra dirs\n"); exit(0); } + else if (!strcmp(argv[i], "-e")) + { + while ((i < (argc - 1)) && (argv[(i + 1)][0] != '-')) + eina_array_push(exts, argv[++i]); + } + else if (!strcmp(argv[i], "-d")) + { + while ((i < (argc - 1)) && (argv[(i + 1)][0] != '-')) + eina_array_push(extra_dirs, argv[++i]); + } } + if (exts->count == 0) + { + printf("Error: Need to pass extensions to icon cache create process\n"); + return -1; + } - /* init external subsystems */ - if (!eina_init()) return -1; if (!eet_init()) return -1; if (!ecore_init()) return -1; @@ -892,6 +927,12 @@ free(keys); } + theme->changed = changed; + if (theme->changed && theme->dirs) + { + efreet_hash_free(theme->dirs, free); + theme->dirs = NULL; + } theme = eet_data_read(theme_ef, theme_edd, EFREET_CACHE_ICON_FALLBACK); if (!theme) theme = NEW(Efreet_Cache_Icon_Theme, 1); @@ -947,6 +988,8 @@ while ((path = eina_array_pop(strs))) eina_stringshare_del(path); eina_array_free(strs); + eina_array_free(exts); + eina_array_free(extra_dirs); ecore_shutdown(); eet_shutdown(); Modified: trunk/efreet/src/lib/efreet_cache.c =================================================================== --- trunk/efreet/src/lib/efreet_cache.c 2011-02-02 22:57:34 UTC (rev 56665) +++ trunk/efreet/src/lib/efreet_cache.c 2011-02-02 22:58:15 UTC (rev 56666) @@ -924,6 +924,7 @@ char file[PATH_MAX]; struct flock fl; int prio; + Eina_List **l, *l2; icon_cache_job = NULL; @@ -940,7 +941,34 @@ if (fcntl(icon_cache_exe_lock, F_SETLK, &fl) < 0) goto error; prio = ecore_exe_run_priority_get(); ecore_exe_run_priority_set(19); - icon_cache_exe = ecore_exe_run(PACKAGE_LIB_DIR "/efreet/efreet_icon_cache_create", NULL); + eina_strlcpy(file, PACKAGE_LIB_DIR "/efreet/efreet_icon_cache_create", sizeof(file)); + l = efreet_icon_extra_list_get(); + if (l && eina_list_count(*l) > 0) + { + Eina_List *ll; + char *p; + + eina_strlcat(file, " -d", sizeof(file)); + EINA_LIST_FOREACH(*l, ll, p) + { + eina_strlcat(file, " ", sizeof(file)); + eina_strlcat(file, p, sizeof(file)); + } + } + l2 = efreet_icon_extensions_list_get(); + if (eina_list_count(l2) > 0) + { + Eina_List *ll; + char *p; + + eina_strlcat(file, " -e", sizeof(file)); + EINA_LIST_FOREACH(l2, ll, p) + { + eina_strlcat(file, " ", sizeof(file)); + eina_strlcat(file, p, sizeof(file)); + } + } + icon_cache_exe = ecore_exe_run(file, NULL); ecore_exe_run_priority_set(prio); if (!icon_cache_exe) goto error; Modified: trunk/efreet/src/lib/efreet_icon.c =================================================================== --- trunk/efreet/src/lib/efreet_icon.c 2011-02-02 22:57:34 UTC (rev 56665) +++ trunk/efreet/src/lib/efreet_icon.c 2011-02-02 22:58:15 UTC (rev 56666) @@ -209,6 +209,16 @@ } /** + * @return Returns a list of strings that are icon extensions to look for + * @brief Gets the list of all icon extensions to look for + */ +EAPI Eina_List * +efreet_icon_extensions_list_get(void) +{ + return efreet_icon_extensions; +} + +/** * @return Returns a list of Efreet_Icon structs for all the non-hidden icon * themes * @brief Retrieves all of the non-hidden icon themes available on the system. @@ -850,13 +860,11 @@ path = efreet_cache_icon_fallback_lookup_path_path(icon, efreet_icon_user_dir_get()); if (path) return path; -#if 0 EINA_LIST_FOREACH(efreet_extra_icon_dirs, l, dir) { - path = efreet_cache_icon_lookup_path_path(elem, dir); + path = efreet_cache_icon_fallback_lookup_path_path(icon, dir); if (path) return path; } -#endif xdg_dirs = efreet_data_dirs_get(); Modified: trunk/efreet/src/lib/efreet_icon.h =================================================================== --- trunk/efreet/src/lib/efreet_icon.h 2011-02-02 22:57:34 UTC (rev 56665) +++ trunk/efreet/src/lib/efreet_icon.h 2011-02-02 22:58:15 UTC (rev 56666) @@ -144,6 +144,7 @@ EAPI void efreet_icon_extension_add(const char *ext); EAPI Eina_List **efreet_icon_extra_list_get(void); +EAPI Eina_List *efreet_icon_extensions_list_get(void); EAPI Eina_List *efreet_icon_theme_list_get(void); EAPI Efreet_Icon_Theme *efreet_icon_theme_find(const char *theme_name); EAPI Efreet_Icon *efreet_icon_find(const char *theme_name, |
From: Enlightenment S. <no-...@en...> - 2011-03-18 20:00:28
|
Log: Efreet: formatting Author: englebass Date: 2011-03-18 13:00:22 -0700 (Fri, 18 Mar 2011) New Revision: 57859 Trac: http://trac.enlightenment.org/e/changeset/57859 Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c trunk/efreet/src/lib/efreet_cache.c trunk/efreet/src/lib/efreet_trash.c Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_icon_cache_create.c 2011-03-18 19:47:57 UTC (rev 57858) +++ trunk/efreet/src/bin/efreet_icon_cache_create.c 2011-03-18 20:00:22 UTC (rev 57859) @@ -307,7 +307,7 @@ inherit = eina_hash_find(icon_themes, name); if (!inherit) INF("Theme `%s` not found for `%s`.", - name, theme->name.internal); + name, theme->name.internal); if (!cache_scan(inherit, themes, icons, dirs, changed)) return EINA_FALSE; } } @@ -680,8 +680,8 @@ /* init external subsystems */ if (!eina_init()) return -1; - _efreet_icon_cache_log_dom = eina_log_domain_register - ("efreet_icon_cache", EFREET_DEFAULT_LOG_COLOR); + _efreet_icon_cache_log_dom = + eina_log_domain_register("efreet_icon_cache", EFREET_DEFAULT_LOG_COLOR); if (_efreet_icon_cache_log_dom < 0) { EINA_LOG_ERR("Efreet: Could not create a log domain for efreet_icon_cache."); @@ -696,7 +696,7 @@ for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-v")) - eina_log_domain_level_set("efreet_icon_cache", EINA_LOG_LEVEL_DBG); + eina_log_domain_level_set("efreet_icon_cache", EINA_LOG_LEVEL_DBG); else if ((!strcmp(argv[i], "-h")) || (!strcmp(argv[i], "-help")) || (!strcmp(argv[i], "--h")) || @@ -880,9 +880,9 @@ if (cache_scan(&(theme->theme), themes, icons, theme->dirs, &changed)) { INF("generated: '%s' %i (%i)", - theme->theme.name.internal, - changed, - eina_hash_population(icons)); + theme->theme.name.internal, + changed, + eina_hash_population(icons)); if (changed) { Eina_Iterator *icons_it; @@ -1027,6 +1027,7 @@ ecore_shutdown(); eet_shutdown(); + eina_log_domain_unregister(_efreet_icon_cache_log_dom); eina_shutdown(); return 0; Modified: trunk/efreet/src/lib/efreet_cache.c =================================================================== --- trunk/efreet/src/lib/efreet_cache.c 2011-03-18 19:47:57 UTC (rev 57858) +++ trunk/efreet/src/lib/efreet_cache.c 2011-03-18 20:00:22 UTC (rev 57859) @@ -1263,7 +1263,7 @@ { if (tuple->data == NON_EXISTING) continue; ERR("Efreet: %d:%s still in cache on cache close!", - ((Efreet_Desktop *)tuple->data)->ref, (char *)tuple->key); + ((Efreet_Desktop *)tuple->data)->ref, (char *)tuple->key); dangling++; } eina_iterator_free(it); Modified: trunk/efreet/src/lib/efreet_trash.c =================================================================== --- trunk/efreet/src/lib/efreet_trash.c 2011-03-18 19:47:57 UTC (rev 57858) +++ trunk/efreet/src/lib/efreet_trash.c 2011-03-18 20:00:22 UTC (rev 57859) @@ -319,8 +319,8 @@ files = ecore_file_ls(buf); if (eina_log_domain_level_check(_efreet_trash_log_dom, EINA_LOG_LEVEL_INFO)) - EINA_LIST_FOREACH(files, l, infofile) - INF("FILE: %s\n", infofile); + EINA_LIST_FOREACH(files, l, infofile) + INF("FILE: %s\n", infofile); return files; } |
From: Enlightenment S. <no-...@en...> - 2011-03-23 20:02:53
|
Log: Efreet: Flush cache if we add new extensions Author: englebass Date: 2011-03-23 13:02:46 -0700 (Wed, 23 Mar 2011) New Revision: 58043 Trac: http://trac.enlightenment.org/e/changeset/58043 Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c trunk/efreet/src/lib/efreet_cache_private.h Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_icon_cache_create.c 2011-03-23 20:02:40 UTC (rev 58042) +++ trunk/efreet/src/bin/efreet_icon_cache_create.c 2011-03-23 20:02:46 UTC (rev 58043) @@ -648,6 +648,77 @@ free(theme); } +/** + * @internal + * @return EINA_TRUE if data adds new + */ +static Eina_Bool +add_data(Eet_File *ef, Eina_Array *data, const char *key) +{ + Efreet_Cache_Array_String *add; + unsigned int i, j; + Eina_Bool added = EINA_FALSE; + + add = eet_data_read(ef, efreet_array_string_edd(), key); + if (!add) return EINA_TRUE; + /* loop once to check added */ + for (i = 0; i < data->count; i++) + { + int found = 0; + for (j = 0; j < add->array_count; ++j) + { + if (!strcmp(add->array[j], data->data[i])) + { + found = 1; + break; + } + } + if (!found) + { + added = EINA_TRUE; + break; + } + } + /* loop again to add all data */ + for (i = 0; i < add->array_count; i++) + { + int found = 0; + for (j = 0; j < data->count; ++j) + { + if (!strcmp(add->array[i], data->data[j])) + { + found = 1; + break; + } + } + if (!found) + eina_array_push(data, add->array[i]); + } + IF_FREE(add->array); + free(add); + + return added; +} + + +static void +save_data(Eet_File *ef, Eina_Array *data, const char *key) +{ + Efreet_Cache_Array_String *save; + unsigned int i; + + if (!data || !data->count) return; + + save = NEW(Efreet_Cache_Array_String, 1); + save->array = NEW(char *, data->count); + save->array_count = 0; + for (i = 0; i < data->count; ++i) + save->array[save->array_count++] = data->data[i]; + eet_data_write(ef, efreet_array_string_edd(), key, save, 1); + IF_FREE(save->array); + free(save); +} + int main(int argc, char **argv) { @@ -673,6 +744,7 @@ const char *path; char *dir = NULL; Eina_Bool changed = EINA_FALSE; + Eina_Bool flush = EINA_FALSE; int lockfd = -1; int tmpfd = -1; char **keys; @@ -719,11 +791,6 @@ eina_array_push(extra_dirs, argv[++i]); } } - if (exts->count == 0) - { - ERR("Error: Need to pass extensions to icon cache create process"); - return -1; - } if (!eet_init()) return -1; if (!ecore_init()) return -1; @@ -777,6 +844,17 @@ theme_version->major = EFREET_ICON_CACHE_MAJOR; theme_version->minor = EFREET_ICON_CACHE_MINOR; + if (add_data(theme_ef, exts, EFREET_CACHE_ICON_EXTENSIONS)) + flush = EINA_TRUE; + if (add_data(theme_ef, extra_dirs, EFREET_CACHE_ICON_EXTRA_DIRS)) + flush = EINA_TRUE; + + if (exts->count == 0) + { + ERR("Need to pass extensions to icon cache create process"); + goto on_error_efreet; + } + keys = eet_list(theme_ef, "*", &num); if (keys) { @@ -831,9 +909,9 @@ icon_ef = eet_open(efreet_icon_cache_file(theme->theme.name.internal), EET_FILE_MODE_READ_WRITE); if (!icon_ef) goto on_error_efreet; icon_version = eet_data_read(icon_ef, efreet_version_edd(), EFREET_CACHE_VERSION); - if (icon_version && + if (flush || (icon_version && ((icon_version->major != EFREET_ICON_CACHE_MAJOR) || - (icon_version->minor != EFREET_ICON_CACHE_MINOR))) + (icon_version->minor != EFREET_ICON_CACHE_MINOR)))) { // delete old cache eet_close(icon_ef); @@ -868,6 +946,8 @@ theme->changed = check_changed(theme); if (theme->changed) changed = EINA_TRUE; + if (flush) + changed = theme->changed = EINA_TRUE; if (changed && theme->dirs) { efreet_hash_free(theme->dirs, free); @@ -920,9 +1000,9 @@ icon_ef = eet_open(efreet_icon_cache_file(EFREET_CACHE_ICON_FALLBACK), EET_FILE_MODE_READ_WRITE); if (!icon_ef) goto on_error_efreet; icon_version = eet_data_read(icon_ef, efreet_version_edd(), EFREET_CACHE_VERSION); - if (icon_version && + if (flush || (icon_version && ((icon_version->major != EFREET_ICON_CACHE_MAJOR) || - (icon_version->minor != EFREET_ICON_CACHE_MINOR))) + (icon_version->minor != EFREET_ICON_CACHE_MINOR)))) { // delete old cache eet_close(icon_ef); @@ -940,6 +1020,7 @@ icon_version->major = EFREET_ICON_CACHE_MAJOR; icon_version->minor = EFREET_ICON_CACHE_MINOR; + /* load icons */ icons = eina_hash_string_superfast_new(NULL); keys = eet_list(icon_ef, "*", &num); if (keys) @@ -957,6 +1038,8 @@ if (!theme) theme = NEW(Efreet_Cache_Icon_Theme, 1); theme->changed = changed; + if (flush) + changed = theme->changed = EINA_TRUE; if (changed && theme->dirs) { efreet_hash_free(theme->dirs, free); @@ -995,6 +1078,9 @@ /* save data */ eet_data_write(theme_ef, efreet_version_edd(), EFREET_CACHE_VERSION, theme_version, 1); + save_data(theme_ef, exts, EFREET_CACHE_ICON_EXTENSIONS); + save_data(theme_ef, extra_dirs, EFREET_CACHE_ICON_EXTRA_DIRS); + eet_close(theme_ef); efreet_setowner(efreet_icon_theme_cache_file()); free(theme_version); Modified: trunk/efreet/src/lib/efreet_cache_private.h =================================================================== --- trunk/efreet/src/lib/efreet_cache_private.h 2011-03-23 20:02:40 UTC (rev 58042) +++ trunk/efreet/src/lib/efreet_cache_private.h 2011-03-23 20:02:46 UTC (rev 58043) @@ -11,6 +11,8 @@ #define EFREET_CACHE_VERSION "__efreet//version" #define EFREET_CACHE_ICON_FALLBACK "__efreet_fallback" +#define EFREET_CACHE_ICON_EXTENSIONS "__efreet//icon_extensions" +#define EFREET_CACHE_ICON_EXTRA_DIRS "__efreet//icon_extra_dirs" #define EFREET_CACHE_DESKTOP_DIRS "__efreet//desktop_dirs" EAPI const char *efreet_desktop_util_cache_file(void); |
From: Enlightenment S. <no-...@en...> - 2011-08-18 07:35:55
|
Log: efreet: Clean headers Might affect other systems, please just add the needed headers and don't complain. Author: englebass Date: 2011-08-18 00:35:48 -0700 (Thu, 18 Aug 2011) New Revision: 62557 Trac: http://trac.enlightenment.org/e/changeset/62557 Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c trunk/efreet/src/bin/efreet_icon_cache_create.c trunk/efreet/src/lib/efreet.c trunk/efreet/src/lib/efreet_base.c trunk/efreet/src/lib/efreet_cache.c trunk/efreet/src/lib/efreet_desktop.c trunk/efreet/src/lib/efreet_desktop_command.c trunk/efreet/src/lib/efreet_icon.c trunk/efreet/src/lib/efreet_ini.c trunk/efreet/src/lib/efreet_menu.c trunk/efreet/src/lib/efreet_mime.c trunk/efreet/src/lib/efreet_trash.c trunk/efreet/src/lib/efreet_uri.c trunk/efreet/src/lib/efreet_utils.c trunk/efreet/src/lib/efreet_xml.c Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_desktop_cache_create.c 2011-08-18 07:35:34 UTC (rev 62556) +++ trunk/efreet/src/bin/efreet_desktop_cache_create.c 2011-08-18 07:35:48 UTC (rev 62557) @@ -1,15 +1,10 @@ #ifdef HAVE_CONFIG_H # include <config.h> #endif -#include <limits.h> -#include <stdio.h> -#include <dirent.h> #include <sys/types.h> #include <sys/stat.h> -#include <sys/mman.h> #include <fcntl.h> #include <unistd.h> -#include <errno.h> #include <Eina.h> #include <Eet.h> Modified: trunk/efreet/src/bin/efreet_icon_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_icon_cache_create.c 2011-08-18 07:35:34 UTC (rev 62556) +++ trunk/efreet/src/bin/efreet_icon_cache_create.c 2011-08-18 07:35:48 UTC (rev 62557) @@ -1,15 +1,10 @@ #ifdef HAVE_CONFIG_H # include <config.h> #endif -#include <limits.h> -#include <stdio.h> -#include <dirent.h> #include <sys/types.h> #include <sys/stat.h> -#include <sys/mman.h> #include <fcntl.h> #include <unistd.h> -#include <errno.h> #include <Eina.h> #include <Eet.h> Modified: trunk/efreet/src/lib/efreet.c =================================================================== --- trunk/efreet/src/lib/efreet.c 2011-08-18 07:35:34 UTC (rev 62556) +++ trunk/efreet/src/lib/efreet.c 2011-08-18 07:35:48 UTC (rev 62557) @@ -20,13 +20,10 @@ void *alloca (size_t); #endif -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <limits.h> #include <unistd.h> -#include <fcntl.h> +#include <sys/types.h> #include <sys/stat.h> +#include <fcntl.h> #include <Eet.h> #include <Ecore.h> Modified: trunk/efreet/src/lib/efreet_base.c =================================================================== --- trunk/efreet/src/lib/efreet_base.c 2011-08-18 07:35:34 UTC (rev 62556) +++ trunk/efreet/src/lib/efreet_base.c 2011-08-18 07:35:48 UTC (rev 62557) @@ -20,9 +20,6 @@ void *alloca (size_t); #endif -#include <stdio.h> -#include <string.h> -#include <limits.h> #include <unistd.h> /* define macros and variable for using the eina logging system */ Modified: trunk/efreet/src/lib/efreet_cache.c =================================================================== --- trunk/efreet/src/lib/efreet_cache.c 2011-08-18 07:35:34 UTC (rev 62556) +++ trunk/efreet/src/lib/efreet_cache.c 2011-08-18 07:35:48 UTC (rev 62557) @@ -9,8 +9,9 @@ #include <libgen.h> #include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> #include <fcntl.h> -#include <sys/stat.h> #include <Eet.h> #include <Ecore.h> Modified: trunk/efreet/src/lib/efreet_desktop.c =================================================================== --- trunk/efreet/src/lib/efreet_desktop.c 2011-08-18 07:35:34 UTC (rev 62556) +++ trunk/efreet/src/lib/efreet_desktop.c 2011-08-18 07:35:48 UTC (rev 62557) @@ -20,11 +20,6 @@ void *alloca (size_t); #endif -#include <unistd.h> -#include <sys/stat.h> -#include <sys/mman.h> -#include <fcntl.h> - #ifdef HAVE_EVIL # include <Evil.h> #endif Modified: trunk/efreet/src/lib/efreet_desktop_command.c =================================================================== --- trunk/efreet/src/lib/efreet_desktop_command.c 2011-08-18 07:35:34 UTC (rev 62556) +++ trunk/efreet/src/lib/efreet_desktop_command.c 2011-08-18 07:35:48 UTC (rev 62557) @@ -22,7 +22,6 @@ #include <sys/types.h> #include <unistd.h> -#include <limits.h> #include <ctype.h> #ifdef _WIN32 Modified: trunk/efreet/src/lib/efreet_icon.c =================================================================== --- trunk/efreet/src/lib/efreet_icon.c 2011-08-18 07:35:34 UTC (rev 62556) +++ trunk/efreet/src/lib/efreet_icon.c 2011-08-18 07:35:48 UTC (rev 62557) @@ -20,14 +20,6 @@ void *alloca (size_t); #endif -#include <stdio.h> -#include <string.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> -#include <dirent.h> -#include <limits.h> - #include <Ecore.h> #include <Ecore_File.h> Modified: trunk/efreet/src/lib/efreet_ini.c =================================================================== --- trunk/efreet/src/lib/efreet_ini.c 2011-08-18 07:35:34 UTC (rev 62556) +++ trunk/efreet/src/lib/efreet_ini.c 2011-08-18 07:35:48 UTC (rev 62557) @@ -20,8 +20,6 @@ void *alloca (size_t); #endif -#include <stdio.h> -#include <string.h> #include <ctype.h> #include <sys/types.h> #include <sys/stat.h> Modified: trunk/efreet/src/lib/efreet_menu.c =================================================================== --- trunk/efreet/src/lib/efreet_menu.c 2011-08-18 07:35:34 UTC (rev 62556) +++ trunk/efreet/src/lib/efreet_menu.c 2011-08-18 07:35:48 UTC (rev 62557) @@ -20,12 +20,6 @@ void *alloca (size_t); #endif -#include <stdio.h> -#include <string.h> -#include <sys/types.h> -#include <dirent.h> -#include <limits.h> - #include <Ecore_File.h> /* define macros and variable for using the eina logging system */ Modified: trunk/efreet/src/lib/efreet_mime.c =================================================================== --- trunk/efreet/src/lib/efreet_mime.c 2011-08-18 07:35:34 UTC (rev 62556) +++ trunk/efreet/src/lib/efreet_mime.c 2011-08-18 07:35:48 UTC (rev 62557) @@ -19,18 +19,13 @@ void *alloca (size_t); #endif -#include <stdio.h> -#include <string.h> #include <ctype.h> #include <sys/types.h> #include <sys/stat.h> -#include <sys/time.h> -#include <sys/mman.h> -#include <unistd.h> -#include <time.h> #include <fcntl.h> +#include <unistd.h> +#include <sys/mman.h> #include <fnmatch.h> -#include <limits.h> #ifdef _WIN32 # include <winsock2.h> Modified: trunk/efreet/src/lib/efreet_trash.c =================================================================== --- trunk/efreet/src/lib/efreet_trash.c 2011-08-18 07:35:34 UTC (rev 62556) +++ trunk/efreet/src/lib/efreet_trash.c 2011-08-18 07:35:48 UTC (rev 62557) @@ -2,10 +2,6 @@ # include <config.h> #endif -#include <stdio.h> -#include <errno.h> -#include <time.h> -#include <limits.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> Modified: trunk/efreet/src/lib/efreet_uri.c =================================================================== --- trunk/efreet/src/lib/efreet_uri.c 2011-08-18 07:35:34 UTC (rev 62556) +++ trunk/efreet/src/lib/efreet_uri.c 2011-08-18 07:35:48 UTC (rev 62557) @@ -2,10 +2,7 @@ # include <config.h> #endif -#include <stdio.h> -#include <string.h> #include <ctype.h> -#include <limits.h> #ifndef _POSIX_HOST_NAME_MAX #define _POSIX_HOST_NAME_MAX 255 Modified: trunk/efreet/src/lib/efreet_utils.c =================================================================== --- trunk/efreet/src/lib/efreet_utils.c 2011-08-18 07:35:34 UTC (rev 62556) +++ trunk/efreet/src/lib/efreet_utils.c 2011-08-18 07:35:48 UTC (rev 62557) @@ -22,12 +22,7 @@ void *alloca (size_t); #endif -#include <stdio.h> -#include <string.h> -#include <sys/types.h> -#include <dirent.h> #include <fnmatch.h> -#include <limits.h> #include <Ecore_File.h> Modified: trunk/efreet/src/lib/efreet_xml.c =================================================================== --- trunk/efreet/src/lib/efreet_xml.c 2011-08-18 07:35:34 UTC (rev 62556) +++ trunk/efreet/src/lib/efreet_xml.c 2011-08-18 07:35:48 UTC (rev 62557) @@ -2,8 +2,6 @@ # include <config.h> #endif -#include <stdio.h> -#include <string.h> #include <ctype.h> #include <sys/types.h> #include <sys/stat.h> |
From: Enlightenment S. <no-...@en...> - 2011-08-19 06:45:06
|
Log: efreet: Don't check if path is a subdir We don't recurse in extra_dirs, so we must store all paths explicit. Author: englebass Date: 2011-08-18 23:44:59 -0700 (Thu, 18 Aug 2011) New Revision: 62582 Trac: http://trac.enlightenment.org/e/changeset/62582 Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c trunk/efreet/src/lib/efreet_cache.c Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_desktop_cache_create.c 2011-08-19 06:44:49 UTC (rev 62581) +++ trunk/efreet/src/bin/efreet_desktop_cache_create.c 2011-08-19 06:44:59 UTC (rev 62582) @@ -36,12 +36,6 @@ 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) { Efreet_Desktop *desk; @@ -335,7 +329,7 @@ for (j = 0; j < user_dirs->array_count; j++) { - if (eina_list_search_unsorted_list(scanned, strcmplen, user_dirs->array[j])) + if (eina_list_search_unsorted_list(scanned, EINA_COMPARE_CB(strcmp), 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; @@ -352,7 +346,7 @@ EINA_LIST_FOREACH(extra_dirs, l, path) { - if (eina_list_search_unsorted_list(scanned, strcmplen, path)) + if (eina_list_search_unsorted_list(scanned, EINA_COMPARE_CB(strcmp), path)) continue; if (!ecore_file_is_dir(path)) continue; Modified: trunk/efreet/src/lib/efreet_cache.c =================================================================== --- trunk/efreet/src/lib/efreet_cache.c 2011-08-19 06:44:49 UTC (rev 62581) +++ trunk/efreet/src/lib/efreet_cache.c 2011-08-19 06:44:59 UTC (rev 62582) @@ -926,7 +926,7 @@ for (i = 0; i < arr->array_count; i++) { /* Check if we already have this dir in cache */ - if (!strncmp(dir, arr->array[i], strlen(arr->array[i]))) + if (!strcmp(dir, arr->array[i])) return; } } |
From: Enlightenment S. <no-...@en...> - 2011-08-30 12:19:27
|
Log: Efreet: Fix caching of recursive directories Author: englebass Date: 2011-08-30 05:19:19 -0700 (Tue, 30 Aug 2011) New Revision: 62985 Trac: http://trac.enlightenment.org/e/changeset/62985 Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c trunk/efreet/src/lib/efreet_cache.c Modified: trunk/efreet/src/bin/efreet_desktop_cache_create.c =================================================================== --- trunk/efreet/src/bin/efreet_desktop_cache_create.c 2011-08-30 12:19:06 UTC (rev 62984) +++ trunk/efreet/src/bin/efreet_desktop_cache_create.c 2011-08-30 12:19:19 UTC (rev 62985) @@ -36,6 +36,12 @@ 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) { Efreet_Desktop *desk; @@ -200,7 +206,7 @@ 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 @@ 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 @@ 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,8 +351,10 @@ 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; /* If we scan a passed dir, we must have changed */ @@ -479,7 +486,7 @@ 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 @@ 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); Modified: trunk/efreet/src/lib/efreet_cache.c =================================================================== --- trunk/efreet/src/lib/efreet_cache.c 2011-08-30 12:19:06 UTC (rev 62984) +++ trunk/efreet/src/lib/efreet_cache.c 2011-08-30 12:19:19 UTC (rev 62985) @@ -109,8 +109,6 @@ 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_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 @@ eina_hash_add(hash, key, data); return hash; } - -static int -strcmplen(const void *data1, const void *data2) -{ - return strncmp(data1, data2, strlen(data1)); -} - |