From eff86cd48a9f01ace61aadcfcb8241ec426d6262 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Mon, 11 Apr 2016 11:45:46 +0900 Subject: [PATCH] vpath - use double-happy format as poposed by onefang vpath now uses a simley at the start and end of a special meta location. i.e.: (:home:)/blah.png (:app.data:)/blah.jpg --- src/lib/efl/interfaces/efl_vpath.eo | 4 +-- src/lib/efl/interfaces/efl_vpath_core.c | 34 +++++++++++++++---------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/lib/efl/interfaces/efl_vpath.eo b/src/lib/efl/interfaces/efl_vpath.eo index 021b31790e..a622db6862 100644 --- a/src/lib/efl/interfaces/efl_vpath.eo +++ b/src/lib/efl/interfaces/efl_vpath.eo @@ -5,8 +5,8 @@ interface Efl.Vpath "~/file.jpg" "~username/file.png" And also other extended paths like: - "(:cache/file.png" - "(:videos/file.mp4" + "(:cache:)/file.png" + "(:videos:)/file.mp4" ... And in future: "file:///blah.jpg" diff --git a/src/lib/efl/interfaces/efl_vpath_core.c b/src/lib/efl/interfaces/efl_vpath_core.c index d9aec6992f..6d7d422d36 100644 --- a/src/lib/efl/interfaces/efl_vpath_core.c +++ b/src/lib/efl/interfaces/efl_vpath_core.c @@ -122,8 +122,8 @@ _efl_vpath_core_eo_base_constructor(Eo *obj, Efl_Vpath_Core_Data *pd) // ^^^^ we don't handle: // /etc/xdg/user-dirs.conf // /etc/xdg/user-dirs.defaults - // (:config/user-dirs.conf - // (:config/user-dirs.defaults + // (:config:)/user-dirs.conf + // (:config:)/user-dirs.defaults // $XDG_DESKTOP_DIR="$HOME/Desktop" ENV_HOME_SET("XDG_DESKTOP_DIR", "Desktop", "desktop"); @@ -324,22 +324,30 @@ _efl_vpath_core_efl_vpath_fetch(Eo *obj, Efl_Vpath_Core_Data *pd EINA_UNUSED, co { const char *p, *meta; char *name, buf[PATH_MAX]; + Eina_Bool found = EINA_FALSE; for (p = path + 2; *p; p++) { - if (*p =='/') break; + if ((p[0] ==':') && (p[1] == ')') && (p[2] == '/')) + { + found = EINA_TRUE; + break; + } } - name = alloca(p - path); - strncpy(name, path + 2, p - path - 2); - name[p - path - 2] = 0; - eina_spinlock_take(&(pd->lock)); - meta = eina_hash_find(pd->meta, name); - eina_spinlock_release(&(pd->lock)); - if (meta) + if (found) { - snprintf(buf, sizeof(buf), "%s%s", meta, p); - efl_vpath_file_result_set(file, buf); - return file; + name = alloca(p - path); + strncpy(name, path + 2, p - path - 2); + name[p - path - 2] = 0; + eina_spinlock_take(&(pd->lock)); + meta = eina_hash_find(pd->meta, name); + eina_spinlock_release(&(pd->lock)); + if (meta) + { + snprintf(buf, sizeof(buf), "%s%s", meta, p + 2); + efl_vpath_file_result_set(file, buf); + return file; + } } } // file:/// <- local file path uri