Use realpath to clean path
authorenglebass <englebass@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 2 Mar 2010 20:07:41 +0000 (20:07 +0000)
committerenglebass <englebass@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 2 Mar 2010 20:07:41 +0000 (20:07 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/efreet@46801 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/efreet_base.c
src/lib/efreet_desktop.c

index edb9f76..6fc7f04 100644 (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;
-}
index abf8ed9..5b4a0aa 100644 (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;
 }
 
 /**