raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=7096634a3969fdef8e8b3d13a70d034cc0ea41e8

commit 7096634a3969fdef8e8b3d13a70d034cc0ea41e8
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Sat Nov 16 12:58:34 2019 +0000

    efreet - consider ctime changes as changes too
    
    some distros do odd things with source desktop files and set their
    mtime timestamps to 0... thus we can't tell that there is a change.
    thier ctimes do change, so consider the newer of either of these as
    the modification time to not miss updates
    
    @fix
---
 src/bin/efreet/efreet_desktop_cache_create.c | 21 +++++++++++++++------
 src/lib/efreet/efreet_desktop.c              | 12 +++++++++++-
 2 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/src/bin/efreet/efreet_desktop_cache_create.c 
b/src/bin/efreet/efreet_desktop_cache_create.c
index ec7553dcc8..8988168e94 100644
--- a/src/bin/efreet/efreet_desktop_cache_create.c
+++ b/src/bin/efreet/efreet_desktop_cache_create.c
@@ -70,13 +70,22 @@ cache_add(Eet_File *ef, const char *path, const char 
*file_id, int priority EINA
         *changed = 1;
         INF("  NEW");
     }
-    else if (ecore_file_mod_time(desk->orig_path) != desk->load_time)
+    else
     {
-        efreet_desktop_free(desk);
-        *changed = 1;
-        desk = efreet_desktop_uncached_new(path);
-        if (desk) INF("  CHANGED");
-        else      INF("  NO UNCACHED");
+        struct stat st;
+        if (!stat(desk->orig_path, &st))
+        {
+           time_t modtime = st.st_mtime;
+           if (modtime < st.st_ctime) modtime = st.st_ctime;
+           if (modtime != desk->load_time)
+           {
+              efreet_desktop_free(desk);
+              *changed = 1;
+              desk = efreet_desktop_uncached_new(path);
+              if (desk) INF("  CHANGED");
+              else      INF("  NO UNCACHED");
+           }
+        }
     }
     if (!desk) return 1;
     if (file_id && old_file_ids && !eina_hash_find(old_file_ids->hash, 
file_id))
diff --git a/src/lib/efreet/efreet_desktop.c b/src/lib/efreet/efreet_desktop.c
index e56d06c908..f0c46d4c33 100644
--- a/src/lib/efreet/efreet_desktop.c
+++ b/src/lib/efreet/efreet_desktop.c
@@ -218,7 +218,17 @@ efreet_desktop_empty_new(const char *file)
     if (!desktop) return NULL;
 
     desktop->orig_path = strdup(file);
-    desktop->load_time = ecore_file_mod_time(file);
+    do
+    {
+       struct stat st;
+
+       if (!stat(desktop->orig_path, &st))
+       {
+          time_t modtime = st.st_mtime;
+          if (modtime < st.st_ctime) modtime = st.st_ctime;
+          desktop->load_time = modtime;
+       }
+    } while (0);
 
     desktop->ref = 1;
 

-- 


Reply via email to