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