about summary refs log tree commit diff
path: root/pkgs/desktops/enlightenment
diff options
context:
space:
mode:
authorJosé Romildo Malaquias <malaquias@gmail.com>2020-10-04 10:17:47 -0300
committerJosé Romildo Malaquias <malaquias@gmail.com>2020-10-04 10:43:17 -0300
commitec54c0989c52ca415a930297e7abeec97ff6e8b1 (patch)
treee226578e1be1dc6a8e2860546749511386bda3e1 /pkgs/desktops/enlightenment
parent5cf596c9f0a5f2906ecc90468411419e171789b2 (diff)
enlightenment.efl: remove leftover patch file
Diffstat (limited to 'pkgs/desktops/enlightenment')
-rw-r--r--pkgs/desktops/enlightenment/efl/0002-efreet-more-stat-info-changes.patch623
1 files changed, 0 insertions, 623 deletions
diff --git a/pkgs/desktops/enlightenment/efl/0002-efreet-more-stat-info-changes.patch b/pkgs/desktops/enlightenment/efl/0002-efreet-more-stat-info-changes.patch
deleted file mode 100644
index e0005e430b2e3..0000000000000
--- a/pkgs/desktops/enlightenment/efl/0002-efreet-more-stat-info-changes.patch
+++ /dev/null
@@ -1,623 +0,0 @@
-                                                                     
-                                                                     
-                                                                     
-                                             
-diff --git a/src/bin/efreet/efreet_icon_cache_create.c b/src/bin/efreet/efreet_icon_cache_create.c
-index 6810ca684e..6478df4dbd 100644
---- a/src/bin/efreet/efreet_icon_cache_create.c
-+++ b/src/bin/efreet/efreet_icon_cache_create.c
-@@ -38,38 +38,36 @@ static Eina_Hash *icon_themes = NULL;
- static Eina_Bool
- cache_directory_modified(Eina_Hash *dirs, const char *dir)
- {
--    Efreet_Cache_Directory *dcache;
--    long long time;
--
--    if (!dirs) return EINA_TRUE;
--
--    time = ecore_file_mod_time(dir);
--    if (!time)
--      return EINA_FALSE;
--    dcache = eina_hash_find(dirs, dir);
--    if (!dcache)
--    {
-+   Efreet_Cache_Directory *dcache;
-+   Efreet_Cache_Check check;
-+
-+   if (!dirs) return EINA_TRUE;
-+   if (!efreet_file_cache_fill(dir, &check)) return EINA_FALSE;
-+   dcache = eina_hash_find(dirs, dir);
-+   if (!dcache)
-+     {
-         dcache = malloc(sizeof (Efreet_Cache_Directory));
-         if (!dcache) return EINA_TRUE;
--
--        dcache->modified_time = time;
-+        dcache->check = check;
-         eina_hash_add(dirs, dir, dcache);
--    }
--    else if (dcache->modified_time == time) return EINA_FALSE;
--    dcache->modified_time = time;
--
--    return EINA_TRUE;
-+     }
-+   else if (efreet_file_cache_check(&check, &dcache->check))
-+     return EINA_FALSE;
-+   else
-+     dcache->check = check;
-+   return EINA_TRUE;
- }
- 
- static Eina_Bool
- cache_extension_lookup(const char *ext)
- {
--    unsigned int i;
-+   unsigned int i;
- 
--    for (i = 0; i < exts->count; ++i)
--        if (!strcmp(exts->data[i], ext))
--            return EINA_TRUE;
--    return EINA_FALSE;
-+   for (i = 0; i < exts->count; ++i)
-+     {
-+        if (!strcmp(exts->data[i], ext)) return EINA_TRUE;
-+     }
-+   return EINA_FALSE;
- }
- 
- static Eina_Bool
-@@ -223,6 +221,37 @@ check_fallback_changed(Efreet_Cache_Icon_Theme *theme)
-     return EINA_FALSE;
- }
- 
-+typedef struct
-+{
-+  char *path;
-+  int name_start;
-+} Scanned_Entry;
-+
-+static Eina_Hash *already_scanned_path = NULL;
-+
-+static void
-+cache_theme_change_verify(Efreet_Cache_Icon_Theme *theme)
-+{
-+   Eina_Bool changed = EINA_FALSE;
-+   Eina_List *l;
-+   Efreet_Icon_Theme_Directory *d;
-+   char buf[PATH_MAX], *tdir, *sep;
-+
-+   tdir = strdup(theme->path);
-+   sep = strrchr(tdir, '/');
-+   if (sep) *sep = 0;
-+   EINA_LIST_FOREACH(theme->theme.directories, l, d)
-+     {
-+        snprintf(buf, sizeof(buf), "%s/%s", tdir, d->name);
-+        if (cache_directory_modified(theme->dirs, buf))
-+          {
-+             changed = EINA_TRUE;
-+          }
-+     }
-+   free(tdir);
-+   if (changed) theme->changed = changed;
-+}
-+
- static Eina_Bool
- cache_scan_path_dir(Efreet_Icon_Theme *theme,
-                     const char *path,
-@@ -232,29 +261,63 @@ cache_scan_path_dir(Efreet_Icon_Theme *theme,
-     Eina_Iterator *it;
-     char buf[PATH_MAX];
-     Eina_File_Direct_Info *entry;
-+    Eina_List *dirs = NULL;
-+    Eina_List *l;
-+    char *ext;
-+    Scanned_Entry *scentry;
- 
-     snprintf(buf, sizeof(buf), "%s/%s", path, dir->name);
-+    // we wont ever free this - no point
-+    if (!already_scanned_path)
-+      already_scanned_path = eina_hash_string_superfast_new(NULL);
-+    dirs = eina_hash_find(already_scanned_path, buf);
-+    if ((intptr_t)dirs == (intptr_t)(-1L)) return EINA_TRUE;
-+    else if (!dirs)
-+    {
-+       it = eina_file_stat_ls(buf);
-+       if (!it)
-+         {
-+            eina_hash_add(already_scanned_path, buf, (void *)(intptr_t)(-1L));
-+            return EINA_TRUE;
-+         }
-+
-+       EINA_ITERATOR_FOREACH(it, entry)
-+         {
-+            if (entry->type == EINA_FILE_DIR) continue;
-+            ext = strrchr(entry->path + entry->name_start, '.');
-+            if (!ext || !cache_extension_lookup(ext)) continue;
-+            scentry = malloc(sizeof(Scanned_Entry));
-+            if (!scentry)
-+              {
-+                 ERR("Out of memory");
-+                 exit(1);
-+              }
-+            scentry->name_start = entry->name_start;
-+            scentry->path = strdup(entry->path);
-+            if (!scentry->path)
-+              {
-+                 ERR("Out of memory");
-+                 exit(1);
-+              }
-+            dirs = eina_list_append(dirs, scentry);
-+         }
-+       eina_iterator_free(it);
-+       if (dirs)
-+         eina_hash_add(already_scanned_path, buf, dirs);
-+       else
-+         eina_hash_add(already_scanned_path, buf, (void *)(intptr_t)(-1L));
-+    }
- 
--    it = eina_file_stat_ls(buf);
--    if (!it) return EINA_TRUE;
--
--    EINA_ITERATOR_FOREACH(it, entry)
-+   EINA_LIST_FOREACH(dirs, l, scentry)
-     {
-         Efreet_Cache_Icon *icon;
-         char *name;
--        char *ext;
-         const char **tmp;
-         unsigned int i;
- 
--        if (entry->type == EINA_FILE_DIR)
--            continue;
--
--        ext = strrchr(entry->path + entry->name_start, '.');
--        if (!ext || !cache_extension_lookup(ext))
--            continue;
--
-+        ext = strrchr(scentry->path + scentry->name_start, '.');
-         /* icon with known extension */
--        name = entry->path + entry->name_start;
-+        name = scentry->path + scentry->name_start;
-         *ext = '\0';
- 
-         icon = eina_hash_find(icons, name);
-@@ -284,7 +347,7 @@ cache_scan_path_dir(Efreet_Icon_Theme *theme,
- 
-             /* check if the path already exist */
-             for (j = 0; j < icon->icons[i]->paths_count; ++j)
--                if (!strcmp(icon->icons[i]->paths[j], entry->path))
-+                if (!strcmp(icon->icons[i]->paths[j], scentry->path))
-                     break;
- 
-             if (j != icon->icons[i]->paths_count)
-@@ -348,12 +411,9 @@ cache_scan_path_dir(Efreet_Icon_Theme *theme,
-            exit(1);
-         }
-         icon->icons[i]->paths = tmp;
--        icon->icons[i]->paths[icon->icons[i]->paths_count] = eina_stringshare_add(entry->path);
-+        icon->icons[i]->paths[icon->icons[i]->paths_count] = eina_stringshare_add(scentry->path);
-         eina_array_push(strs, icon->icons[i]->paths[icon->icons[i]->paths_count++]);
-     }
--
--    eina_iterator_free(it);
--
-     return EINA_TRUE;
- }
- 
-@@ -364,7 +424,9 @@ cache_scan_path(Efreet_Icon_Theme *theme, Eina_Hash *icons, const char *path)
-     Efreet_Icon_Theme_Directory *dir;
- 
-     EINA_LIST_FOREACH(theme->directories, l, dir)
-+     {
-         if (!cache_scan_path_dir(theme, path, dir, icons)) return EINA_FALSE;
-+     }
- 
-     return EINA_TRUE;
- }
-@@ -511,13 +573,13 @@ icon_theme_index_read(Efreet_Cache_Icon_Theme *theme, const char *path)
-     Efreet_Ini *ini;
-     Efreet_Icon_Theme_Directory *dir;
-     const char *tmp;
--    long long time;
-+    Efreet_Cache_Check check;
- 
-     if (!theme || !path) return EINA_FALSE;
- 
--    time = ecore_file_mod_time(path);
--    if (!time) return EINA_FALSE;
--    if (theme->path && !strcmp(theme->path, path) && theme->last_cache_check >= time)
-+    if (!efreet_file_cache_fill(path, &check)) return EINA_FALSE;
-+    if (theme->path && !strcmp(theme->path, path) &&
-+        efreet_file_cache_check(&check, &(theme->check)))
-     {
-         /* no change */
-         theme->valid = 1;
-@@ -528,8 +590,7 @@ icon_theme_index_read(Efreet_Cache_Icon_Theme *theme, const char *path)
-         theme->path = eina_stringshare_add(path);
-         eina_array_push(strs, theme->path);
-     }
--    if (time > theme->last_cache_check)
--        theme->last_cache_check = time;
-+    theme->check = check;
-     theme->changed = 1;
- 
-     ini = efreet_ini_new(path);
-@@ -644,10 +705,10 @@ cache_theme_scan(const char *dir)
-         Efreet_Cache_Icon_Theme *theme;
-         const char *name;
-         const char *path;
--        long long time;
-+        Efreet_Cache_Check check;
-+        Efreet_Cache_Directory *d;
- 
--        time = ecore_file_mod_time(entry->path);
--        if (!time) continue;
-+        if (!efreet_file_cache_fill(entry->path, &check)) continue;
- 
-         if ((entry->type != EINA_FILE_DIR) &&
-             (entry->type != EINA_FILE_LNK))
-@@ -669,10 +730,26 @@ cache_theme_scan(const char *dir)
-                           (void *)theme->theme.name.internal, theme);
-             theme->changed = 1;
-         }
--        if (time > theme->last_cache_check)
--        {
--            theme->last_cache_check = time;
-+
-+       d = NULL;
-+       if (theme->dirs)
-+         d = eina_hash_find(theme->dirs, entry->path);
-+       if (!d)
-+         {
-+            if (!theme->dirs)
-+              theme->dirs = eina_hash_string_superfast_new(NULL);
-             theme->changed = 1;
-+            d = NEW(Efreet_Cache_Directory, 1);
-+            d->check = check;
-+            eina_hash_add(theme->dirs, entry->path, d);
-+         }
-+       else
-+         {
-+            if (!efreet_file_cache_check(&check, &(d->check)))
-+              {
-+                 d->check = check;
-+                 theme->changed = 1;
-+              }
-         }
- 
-         /* TODO: We need to handle change in order of included paths */
-@@ -732,8 +809,7 @@ icon_theme_free(Efreet_Cache_Icon_Theme *theme)
- 
-     eina_list_free(theme->theme.paths);
-     eina_list_free(theme->theme.inherits);
--    EINA_LIST_FREE(theme->theme.directories, data)
--        free(data);
-+    EINA_LIST_FREE(theme->theme.directories, data) free(data);
-     if (theme->dirs) efreet_hash_free(theme->dirs, free);
-     free(theme);
- }
-@@ -926,7 +1002,7 @@ main(int argc, char **argv)
-         if (!theme->theme.name.name) continue;
- #endif
-         INF("scan theme %s", theme->theme.name.name);
--
-+        cache_theme_change_verify(theme);
-         theme->changed = check_changed(theme);
-         if (flush)
-             theme->changed = EINA_TRUE;
-@@ -981,18 +1057,18 @@ main(int argc, char **argv)
- 
-                 icons_it = eina_hash_iterator_tuple_new(icons);
-                 EINA_ITERATOR_FOREACH(icons_it, tuple)
--                    eet_data_write(icon_ef, icon_edd, tuple->key, tuple->data, 1);
-+                    eet_data_write(icon_ef, icon_edd, tuple->key, tuple->data, EET_COMPRESSION_SUPERFAST);
-                 eina_iterator_free(icons_it);
- 
--                INF("theme change: %s %lld", theme->theme.name.internal, theme->last_cache_check);
--                eet_data_write(theme_ef, theme_edd, theme->theme.name.internal, theme, 1);
-+                INF("theme change: %s %lld", theme->theme.name.internal, theme->check.mtime);
-+                eet_data_write(theme_ef, theme_edd, theme->theme.name.internal, theme, EET_COMPRESSION_SUPERFAST);
-             }
-             eina_hash_free(themes);
-             eina_hash_free(icons);
-             changed = EINA_TRUE;
-         }
- 
--        eet_data_write(icon_ef, efreet_version_edd(), EFREET_CACHE_VERSION, icon_version, 1);
-+        eet_data_write(icon_ef, efreet_version_edd(), EFREET_CACHE_VERSION, icon_version, EET_COMPRESSION_SUPERFAST);
-         eet_close(icon_ef);
-         efreet_setowner(efreet_icon_cache_file(theme->theme.name.internal));
-         free(icon_version);
-@@ -1064,17 +1140,17 @@ main(int argc, char **argv)
- 
-             icons_it = eina_hash_iterator_tuple_new(icons);
-             EINA_ITERATOR_FOREACH(icons_it, tuple)
--                eet_data_write(icon_ef, fallback_edd, tuple->key, tuple->data, 1);
-+                eet_data_write(icon_ef, fallback_edd, tuple->key, tuple->data, EET_COMPRESSION_SUPERFAST);
-             eina_iterator_free(icons_it);
-         }
-         eina_hash_free(icons);
- 
--        eet_data_write(theme_ef, theme_edd, EFREET_CACHE_ICON_FALLBACK, theme, 1);
-+        eet_data_write(theme_ef, theme_edd, EFREET_CACHE_ICON_FALLBACK, theme, EET_COMPRESSION_SUPERFAST);
-     }
- 
-     icon_theme_free(theme);
- 
--    eet_data_write(icon_ef, efreet_version_edd(), EFREET_CACHE_VERSION, icon_version, 1);
-+    eet_data_write(icon_ef, efreet_version_edd(), EFREET_CACHE_VERSION, icon_version, EET_COMPRESSION_SUPERFAST);
-     eet_close(icon_ef);
-     efreet_setowner(efreet_icon_cache_file(EFREET_CACHE_ICON_FALLBACK));
-     free(icon_version);
-@@ -1082,7 +1158,7 @@ main(int argc, char **argv)
-     eina_hash_free(icon_themes);
- 
-     /* save data */
--    eet_data_write(theme_ef, efreet_version_edd(), EFREET_CACHE_VERSION, theme_version, 1);
-+    eet_data_write(theme_ef, efreet_version_edd(), EFREET_CACHE_VERSION, theme_version, EET_COMPRESSION_SUPERFAST);
- 
-     eet_close(theme_ef);
-     theme_ef = NULL;
-diff --git a/src/lib/efreet/efreet_cache.c b/src/lib/efreet/efreet_cache.c
-index f859c630f0..2b5d0c9f5f 100644
---- a/src/lib/efreet/efreet_cache.c
-+++ b/src/lib/efreet/efreet_cache.c
-@@ -1,3 +1,4 @@
-+
- #ifdef HAVE_CONFIG_H
- # include <config.h>
- #endif
-@@ -536,6 +537,137 @@ efreet_desktop_util_cache_file(void)
- /*
-  * Needs EAPI because of helper binaries
-  */
-+#define SHSH(n, v) ((((v) << (n)) & 0xffffffff) | ((v) >> (32 - (n))))
-+
-+static inline int
-+int_to_bigendian(int in)
-+{
-+   static const unsigned char test[4] = { 0x11, 0x22, 0x33, 0x44 };
-+   static const unsigned int *test_i = (const unsigned int *)test;
-+   if (test_i[0] == 0x44332211) return eina_swap32(in);
-+   return in;
-+}
-+
-+static void
-+sha1(unsigned char *data, int size, unsigned char *dst)
-+{
-+   unsigned int digest[5], word[80], wa, wb, wc, wd, we, t;
-+   unsigned char buf[64], *d;
-+   int idx, left, i;
-+   const unsigned int magic[4] =
-+     { 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6 };
-+
-+   idx = 0;
-+   digest[0] = 0x67452301; digest[1] = 0xefcdab89; digest[2] = 0x98badcfe;
-+   digest[3] = 0x10325476; digest[4] = 0xc3d2e1f0;
-+
-+   memset(buf, 0, sizeof(buf));
-+   for (left = size, d = data; left > 0; left--, d++)
-+     {
-+        if ((idx == 0) && (left < 64))
-+          {
-+             memset(buf, 0, 60);
-+             buf[60] = (size >> 24) & 0xff;
-+             buf[61] = (size >> 16) & 0xff;
-+             buf[62] = (size >> 8) & 0xff;
-+             buf[63] = (size) & 0xff;
-+          }
-+        buf[idx] = *d;
-+        idx++;
-+        if ((idx == 64) || (left == 1))
-+          {
-+             if ((left == 1) && (idx < 64)) buf[idx] = 0x80;
-+             for (i = 0; i < 16; i++)
-+               {
-+                  word[i]  = (unsigned int)buf[(i * 4)    ] << 24;
-+                  word[i] |= (unsigned int)buf[(i * 4) + 1] << 16;
-+                  word[i] |= (unsigned int)buf[(i * 4) + 2] << 8;
-+                  word[i] |= (unsigned int)buf[(i * 4) + 3];
-+               }
-+             for (i = 16; i < 80; i++)
-+               word[i] = SHSH(1,
-+                              word[i - 3 ] ^ word[i - 8 ] ^
-+                              word[i - 14] ^ word[i - 16]);
-+             wa = digest[0]; wb = digest[1]; wc = digest[2];
-+             wd = digest[3]; we = digest[4];
-+             for (i = 0; i < 80; i++)
-+               {
-+                  if (i < 20)
-+                    t = SHSH(5, wa) + ((wb & wc) | ((~wb) & wd)) +
-+                        we + word[i] + magic[0];
-+                  else if (i < 40)
-+                    t = SHSH(5, wa) + (wb ^ wc ^ wd) +
-+                        we + word[i] + magic[1];
-+                  else if (i < 60)
-+                    t = SHSH(5, wa) + ((wb & wc) | (wb & wd) | (wc & wd)) +
-+                        we + word[i] + magic[2];
-+                  else if (i < 80)
-+                    t = SHSH(5, wa) + (wb ^ wc ^ wd) +
-+                        we + word[i] + magic[3];
-+                  we = wd;
-+                  wd = wc;
-+                  wc = SHSH(30, wb);
-+                  wb = wa;
-+                  wa = t;
-+               }
-+             digest[0] += wa; digest[1] += wb; digest[2] += wc;
-+             digest[3] += wd; digest[4] += we;
-+             idx = 0;
-+          }
-+     }
-+   t = int_to_bigendian(digest[0]); digest[0] = t;
-+   t = int_to_bigendian(digest[1]); digest[1] = t;
-+   t = int_to_bigendian(digest[2]); digest[2] = t;
-+   t = int_to_bigendian(digest[3]); digest[3] = t;
-+   t = int_to_bigendian(digest[4]); digest[4] = t;
-+   memcpy(dst, digest, 5 * 4);
-+}
-+
-+EAPI Eina_Bool
-+efreet_file_cache_fill(const char *file, Efreet_Cache_Check *check)
-+{
-+   struct stat st;
-+   ssize_t size = 0;
-+   char link[PATH_MAX];
-+
-+   if (lstat(file, &st) != 0) return EINA_FALSE;
-+   if (S_ISLNK(st.st_mode))
-+     {
-+        size = readlink(file, link, sizeof(link));
-+        if ((size > 0) && ((size_t)size >= sizeof(link))) return EINA_FALSE;
-+        if (stat(file, &st) != 0) return EINA_FALSE;
-+     }
-+
-+   memset(check, 0, sizeof(Efreet_Cache_Check));
-+   if (size > 0) sha1((unsigned char *)link, size, check->link_sha1);
-+   else memset(check->link_sha1, 0, sizeof(check->link_sha1));
-+   check->uid    = st.st_uid;
-+   check->gid    = st.st_gid;
-+   check->size   = st.st_size;
-+   check->blocks = st.st_blocks;
-+   check->mtime  = st.st_mtime;
-+   check->chtime = st.st_ctime;
-+   check->mode   = st.st_mode;
-+   return EINA_TRUE;
-+}
-+
-+EAPI Eina_Bool // true if matches
-+efreet_file_cache_check(const Efreet_Cache_Check *check1, const Efreet_Cache_Check *check2)
-+{
-+   if ((check1->mtime  != check2->mtime ) ||
-+       (check1->size   != check2->size  ) ||
-+       (check1->chtime != check2->chtime ) ||
-+       (check1->blocks != check2->blocks) ||
-+       (check1->mode   != check2->mode  ) ||
-+       (check1->uid    != check2->uid   ) ||
-+       (check1->gid    != check2->gid   ) ||
-+       (memcmp(check1->link_sha1, check2->link_sha1, 20) != 0))
-+     {
-+        return EINA_FALSE;
-+     }
-+   return EINA_TRUE; // matches
-+}
-+
- EAPI Eet_Data_Descriptor *
- efreet_version_edd(void)
- {
-@@ -691,8 +823,22 @@ efreet_icon_directory_edd(void)
-     directory_edd = eet_data_descriptor_file_new(&eddc);
-     if (!directory_edd) return NULL;
- 
--    EET_DATA_DESCRIPTOR_ADD_BASIC(directory_edd, Efreet_Cache_Directory,
--                                  "modified_time", modified_time, EET_T_LONG_LONG);
-+   EET_DATA_DESCRIPTOR_ADD_BASIC(directory_edd, Efreet_Cache_Directory,
-+                                 "check.uid", check.uid, EET_T_LONG_LONG);
-+   EET_DATA_DESCRIPTOR_ADD_BASIC(directory_edd, Efreet_Cache_Directory,
-+                                 "check.gid", check.gid, EET_T_LONG_LONG);
-+   EET_DATA_DESCRIPTOR_ADD_BASIC(directory_edd, Efreet_Cache_Directory,
-+                                 "check.size", check.size, EET_T_LONG_LONG);
-+   EET_DATA_DESCRIPTOR_ADD_BASIC(directory_edd, Efreet_Cache_Directory,
-+                                 "check.blocks", check.blocks, EET_T_LONG_LONG);
-+   EET_DATA_DESCRIPTOR_ADD_BASIC(directory_edd, Efreet_Cache_Directory,
-+                                 "check.mtime", check.mtime, EET_T_LONG_LONG);
-+   EET_DATA_DESCRIPTOR_ADD_BASIC(directory_edd, Efreet_Cache_Directory,
-+                                 "check.chtime", check.chtime, EET_T_LONG_LONG);
-+   EET_DATA_DESCRIPTOR_ADD_BASIC(directory_edd, Efreet_Cache_Directory,
-+                                 "check.mode", check.mode, EET_T_INT);
-+   EET_DATA_DESCRIPTOR_ADD_BASIC_ARRAY(directory_edd, Efreet_Cache_Directory,
-+                                       "check.link_sha1", check.link_sha1, EET_T_CHAR);
- 
-     return directory_edd;
- }
-@@ -790,7 +936,21 @@ efreet_icon_theme_edd(Eina_Bool cache)
-     if (cache)
-     {
-         EET_DATA_DESCRIPTOR_ADD_BASIC(icon_theme_edd, Efreet_Cache_Icon_Theme,
--                                      "last_cache_check", last_cache_check, EET_T_LONG_LONG);
-+                                      "check.uid", check.uid, EET_T_LONG_LONG);
-+        EET_DATA_DESCRIPTOR_ADD_BASIC(icon_theme_edd, Efreet_Cache_Icon_Theme,
-+                                      "check.gid", check.gid, EET_T_LONG_LONG);
-+        EET_DATA_DESCRIPTOR_ADD_BASIC(icon_theme_edd, Efreet_Cache_Icon_Theme,
-+                                      "check.size", check.size, EET_T_LONG_LONG);
-+        EET_DATA_DESCRIPTOR_ADD_BASIC(icon_theme_edd, Efreet_Cache_Icon_Theme,
-+                                      "check.blocks", check.blocks, EET_T_LONG_LONG);
-+        EET_DATA_DESCRIPTOR_ADD_BASIC(icon_theme_edd, Efreet_Cache_Icon_Theme,
-+                                      "check.mtime", check.mtime, EET_T_LONG_LONG);
-+        EET_DATA_DESCRIPTOR_ADD_BASIC(icon_theme_edd, Efreet_Cache_Icon_Theme,
-+                                      "check.chtime", check.chtime, EET_T_LONG_LONG);
-+        EET_DATA_DESCRIPTOR_ADD_BASIC(icon_theme_edd, Efreet_Cache_Icon_Theme,
-+                                      "check.mode", check.mode, EET_T_INT);
-+        EET_DATA_DESCRIPTOR_ADD_BASIC_ARRAY(icon_theme_edd, Efreet_Cache_Icon_Theme,
-+                                            "check.link_sha1", check.link_sha1, EET_T_CHAR);
- 
-         EET_DATA_DESCRIPTOR_ADD_BASIC(icon_theme_edd, Efreet_Cache_Icon_Theme,
-                                       "path", path, EET_T_STRING);
-diff --git a/src/lib/efreet/efreet_cache_private.h b/src/lib/efreet/efreet_cache_private.h
-index 97dbd45a1e..1edbb3b5ff 100644
---- a/src/lib/efreet/efreet_cache_private.h
-+++ b/src/lib/efreet/efreet_cache_private.h
-@@ -38,11 +38,20 @@
- # endif
- #endif
- 
-+typedef struct _Efreet_Cache_Check Efreet_Cache_Check;
-+
-+typedef struct _Efreet_Cache_Icon_Theme Efreet_Cache_Icon_Theme;
-+typedef struct _Efreet_Cache_Directory Efreet_Cache_Directory;
-+typedef struct _Efreet_Cache_Desktop Efreet_Cache_Desktop;
-+
- EAPI const char *efreet_desktop_util_cache_file(void);
- EAPI const char *efreet_desktop_cache_file(void);
- EAPI const char *efreet_icon_cache_file(const char *theme);
- EAPI const char *efreet_icon_theme_cache_file(void);
- 
-+EAPI Eina_Bool efreet_file_cache_fill(const char *file, Efreet_Cache_Check *check);
-+EAPI Eina_Bool efreet_file_cache_check(const Efreet_Cache_Check *check1, const Efreet_Cache_Check *check2);
-+
- EAPI Eet_Data_Descriptor *efreet_version_edd(void);
- EAPI Eet_Data_Descriptor *efreet_desktop_edd(void);
- EAPI Eet_Data_Descriptor *efreet_hash_array_string_edd(void);
-@@ -52,15 +61,23 @@ EAPI Eet_Data_Descriptor *efreet_icon_theme_edd(Eina_Bool cache);
- EAPI Eet_Data_Descriptor *efreet_icon_edd(void);
- EAPI Eet_Data_Descriptor *efreet_icon_fallback_edd(void);
- 
--typedef struct _Efreet_Cache_Icon_Theme Efreet_Cache_Icon_Theme;
--typedef struct _Efreet_Cache_Directory Efreet_Cache_Directory;
--typedef struct _Efreet_Cache_Desktop Efreet_Cache_Desktop;
-+struct _Efreet_Cache_Check
-+{
-+   unsigned long long uid;
-+   unsigned long long gid;
-+   unsigned long long size;
-+   unsigned long long blocks;
-+   unsigned long long mtime;
-+   unsigned long long chtime;
-+   unsigned int       mode;
-+   unsigned char      link_sha1[20];
-+};
- 
- struct _Efreet_Cache_Icon_Theme
- {
-     Efreet_Icon_Theme theme;
- 
--    long long last_cache_check; /**< Last time the cache was checked */
-+    Efreet_Cache_Check check; /**< relevant stat info from last check */
- 
-     Eina_Hash *dirs;            /**< All possible icon paths for this theme */
- 
-@@ -73,13 +90,14 @@ struct _Efreet_Cache_Icon_Theme
- 
- struct _Efreet_Cache_Directory
- {
--    long long modified_time;
-+    Efreet_Cache_Check check; /**< relevant stat info from last check */
- };
- 
- struct _Efreet_Cache_Desktop
- {
-     Efreet_Desktop desktop;
- 
-+    Efreet_Cache_Check check; /**< relevant stat info from last check */
-     double check_time; /**< Last time we check for disk modification */
- };