From ef2cb7ab024c02dc6f3eb838b9087b21685c6082 Mon Sep 17 00:00:00 2001 From: Sebastian Dransfeld Date: Mon, 15 Mar 2010 19:57:57 +0000 Subject: [PATCH] Add func to read a .desktop file from disk SVN revision: 47250 --- legacy/efreet/src/lib/efreet_desktop.c | 41 ++++++++++++++++++-------- legacy/efreet/src/lib/efreet_desktop.h | 1 + 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/legacy/efreet/src/lib/efreet_desktop.c b/legacy/efreet/src/lib/efreet_desktop.c index 3e2c05717c..98a6958735 100644 --- a/legacy/efreet/src/lib/efreet_desktop.c +++ b/legacy/efreet/src/lib/efreet_desktop.c @@ -428,12 +428,13 @@ EAPI Efreet_Desktop * efreet_desktop_new(const char *file) { Efreet_Desktop *desktop = NULL; - char rp[PATH_MAX]; if (!file) return NULL; - if (!realpath(file, rp)) return NULL; if (cache) { + char rp[PATH_MAX]; + if (!realpath(file, rp)) return NULL; + /* TODO: Check if the cached version is out of date */ desktop = eet_data_read(cache, desktop_edd, rp); if (desktop) @@ -443,24 +444,40 @@ efreet_desktop_new(const char *file) return desktop; } } - /* TODO: - * Add .desktop file path to a cache file, so that - * efreet_desktop_cache_create can add it to the cache - */ + return efreet_desktop_uncached_new(file); +} - if (!ecore_file_exists(rp)) goto error; +/** + * @param file: The file to create the Efreet_Desktop from + * @return Returns a new Efreet_Desktop on success, NULL on failure + * @brief Creates a new Efreet_Desktop structure initialized from the + * contents of @a file or NULL on failure + * + * By using efreet_desktop_uncached_new the Efreet_Desktop structure will be + * read from disk, and not from any cache. + */ +EAPI Efreet_Desktop * +efreet_desktop_uncached_new(const char *file) +{ + Efreet_Desktop *desktop = NULL; + char rp[PATH_MAX]; + + if (!file) return NULL; + if (!realpath(file, rp)) return NULL; + if (!ecore_file_exists(rp)) return NULL; desktop = NEW(Efreet_Desktop, 1); - if (!desktop) goto error; + if (!desktop) return NULL; desktop->orig_path = strdup(rp); - if (!efreet_desktop_read(desktop)) goto error; + if (!efreet_desktop_read(desktop)) + { + efreet_desktop_free(desktop); + return NULL; + } desktop->ref = 1; return desktop; -error: - if (desktop) efreet_desktop_free(desktop); - return NULL; } /** diff --git a/legacy/efreet/src/lib/efreet_desktop.h b/legacy/efreet/src/lib/efreet_desktop.h index 44d907eea8..194edba151 100644 --- a/legacy/efreet/src/lib/efreet_desktop.h +++ b/legacy/efreet/src/lib/efreet_desktop.h @@ -96,6 +96,7 @@ EAPI Efreet_Desktop *efreet_desktop_get(const char *file); EAPI int efreet_desktop_ref(Efreet_Desktop *desktop); EAPI Efreet_Desktop *efreet_desktop_empty_new(const char *file); EAPI Efreet_Desktop *efreet_desktop_new(const char *file); +EAPI Efreet_Desktop *efreet_desktop_uncached_new(const char *file); EAPI void efreet_desktop_free(Efreet_Desktop *desktop); #define efreet_desktop_unref(desktop) efreet_desktop_free((desktop))