From 6d10aea822f85b47d2b15d7a5036e6b9ff2f2da0 Mon Sep 17 00:00:00 2001 From: Sebastian Dransfeld Date: Tue, 2 Mar 2010 20:07:41 +0000 Subject: [PATCH] Use realpath to clean path SVN revision: 46801 --- legacy/efreet/src/lib/efreet_base.c | 34 ++++---------------------- legacy/efreet/src/lib/efreet_desktop.c | 21 +++++++++------- 2 files changed, 17 insertions(+), 38 deletions(-) diff --git a/legacy/efreet/src/lib/efreet_base.c b/legacy/efreet/src/lib/efreet_base.c index edb9f7659c..6fc7f04805 100644 --- a/legacy/efreet/src/lib/efreet_base.c +++ b/legacy/efreet/src/lib/efreet_base.c @@ -35,7 +35,6 @@ static int _efreet_base_log_dom = -1; static const char *efreet_dir_get(const char *key, const char *fallback); static Eina_List *efreet_dirs_get(const char *key, const char *fallback); -static const char *efreet_path_clean(const char *path); /** * @internal @@ -93,7 +92,7 @@ efreet_home_dir_get(void) if (!efreet_home_dir || efreet_home_dir[0] == '\0') efreet_home_dir = "/tmp"; - efreet_home_dir = efreet_path_clean(efreet_home_dir); + efreet_home_dir = eina_stringshare_add(efreet_home_dir); return efreet_home_dir; } @@ -204,10 +203,10 @@ efreet_dir_get(const char *key, const char *fallback) dir = malloc(sizeof(char) * len); snprintf(dir, len, "%s%s", user, fallback); - t = efreet_path_clean(dir); + t = eina_stringshare_add(dir); FREE(dir); } - else t = efreet_path_clean(dir); + else t = eina_stringshare_add(dir); return t; } @@ -240,37 +239,14 @@ efreet_dirs_get(const char *key, const char *fallback) { *p = '\0'; if (!eina_list_search_unsorted(dirs, EINA_COMPARE_CB(strcmp), s)) - dirs = eina_list_append(dirs, (void *)efreet_path_clean(s)); + dirs = eina_list_append(dirs, (void *)eina_stringshare_add(s)); s = ++p; p = strchr(s, EFREET_PATH_SEP); } if (!eina_list_search_unsorted(dirs, EINA_COMPARE_CB(strcmp), s)) - dirs = eina_list_append(dirs, (void *)efreet_path_clean(s)); + dirs = eina_list_append(dirs, (void *)eina_stringshare_add(s)); FREE(tmp); return dirs; } - -static const char * -efreet_path_clean(const char *path) -{ - char *p, *pp; - const char *ret; - - if (!path) return eina_stringshare_add(""); - if (!*path) return eina_stringshare_add(""); - - p = strdup(path); - if (!p) return eina_stringshare_add(""); - for (pp = p; *pp; pp++) - { - if (*pp == '/' && *(pp + 1) == '/') - memmove(pp, pp + 1, strlen(pp + 1) + 1); - if (*pp == '/' && *(pp + 1) == '\0') - *pp = '\0'; - } - ret = eina_stringshare_add(p); - free(p); - return ret; -} diff --git a/legacy/efreet/src/lib/efreet_desktop.c b/legacy/efreet/src/lib/efreet_desktop.c index abf8ed9bce..5b4a0aa7e9 100644 --- a/legacy/efreet/src/lib/efreet_desktop.c +++ b/legacy/efreet/src/lib/efreet_desktop.c @@ -358,15 +358,18 @@ efreet_desktop_new(const char *file) { /* TODO: Need file monitor on file and events to notify change */ Efreet_Desktop *desktop = NULL; + char *rp = NULL; + rp = ecore_file_realpath(file); if (cache) { /* TODO: Check if the cached version is out of date */ - desktop = eet_data_read(cache, desktop_edd, file); + desktop = eet_data_read(cache, desktop_edd, rp); if (desktop) { desktop->ref = 1; desktop->eet = 1; + free(rp); return desktop; } } @@ -375,22 +378,22 @@ efreet_desktop_new(const char *file) * efreet_desktop_cache_create can add it to the cache */ - if (!ecore_file_exists(file)) return NULL; + if (!ecore_file_exists(rp)) goto error; desktop = NEW(Efreet_Desktop, 1); - if (!desktop) return NULL; + if (!desktop) goto error; - desktop->orig_path = strdup(file); + desktop->orig_path = rp; - if (!efreet_desktop_read(desktop)) - { - efreet_desktop_free(desktop); - return NULL; - } + if (!efreet_desktop_read(desktop)) goto error; desktop->ref = 1; return desktop; +error: + if (desktop) efreet_desktop_free(desktop); + if (rp) free(rp); + return NULL; } /**