Use realpath to clean path

SVN revision: 46801
This commit is contained in:
Sebastian Dransfeld 2010-03-02 20:07:41 +00:00
parent f880806ff2
commit 6d10aea822
2 changed files with 17 additions and 38 deletions

View File

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

View File

@ -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;
}
/**