kwo pushed a commit to branch master.

http://git.enlightenment.org/legacy/imlib2.git/commit/?id=fa670dcbd7580ff60ba6f63df1214c97b0a4c34f

commit fa670dcbd7580ff60ba6f63df1214c97b0a4c34f
Author: Kim Woelders <[email protected]>
Date:   Mon Nov 11 19:30:00 2019 +0100

    Refactor many __imlib_File...() functions to use common __imlib_FileStat()
    
    And drop unused __imlib_FilePermissions()
---
 src/lib/file.c | 171 ++++++++++++++++-----------------------------------------
 src/lib/file.h |  12 ++--
 2 files changed, 55 insertions(+), 128 deletions(-)

diff --git a/src/lib/file.c b/src/lib/file.c
index aa9fb05..9192598 100644
--- a/src/lib/file.c
+++ b/src/lib/file.c
@@ -12,6 +12,14 @@
 
 #include "file.h"
 
+int
+__imlib_IsRealFile(const char *s)
+{
+   struct stat         st;
+
+   return (stat(s, &st) != -1) && (S_ISREG(st.st_mode));
+}
+
 char               *
 __imlib_FileKey(const char *file)
 {
@@ -104,129 +112,82 @@ __imlib_FileExtension(const char *file)
    return *p != '\0' ? p : NULL;
 }
 
-int
-__imlib_FileExists(const char *s)
+static int
+__imlib_FileStat(const char *file, struct stat *st)
 {
-   struct stat         st;
+   int                 err = 0;
    char               *fl;
 
-   if ((!s) || (!*s))
-      return 0;
-   if (__imlib_IsRealFile(s))
-      fl = strdup(s);
+   if ((!file) || (!*file))
+      return -1;
+
+   if (__imlib_IsRealFile(file))
+      fl = strdup(file);
    else
-      fl = __imlib_FileRealFile(s);
+      fl = __imlib_FileRealFile(file);
    if (!fl)
-      return 0;
-   if (stat(fl, &st) < 0)
-     {
-        free(fl);
-        return 0;
-     }
+      return -1;
+
+   if (stat(fl, st) < 0)
+      err = -1;
+
    free(fl);
-   return 1;
+   return err;
+}
+
+int
+__imlib_FileExists(const char *s)
+{
+   struct stat         st;
+
+   return __imlib_FileStat(s, &st) == 0;
 }
 
 int
 __imlib_FileIsFile(const char *s)
 {
    struct stat         st;
-   char               *fl;
 
-   if ((!s) || (!*s))
-      return 0;
-   if (__imlib_IsRealFile(s))
-      fl = strdup(s);
-   else
-      fl = __imlib_FileRealFile(s);
-   if (!fl)
+   if (__imlib_FileStat(s, &st))
       return 0;
-   if (stat(fl, &st) < 0)
-     {
-        free(fl);
-        return 0;
-     }
-   if (S_ISREG(st.st_mode))
-     {
-        free(fl);
-        return 1;
-     }
-   free(fl);
-   return 0;
+
+   return (S_ISREG(st.st_mode)) ? 1 : 0;
 }
 
 int
 __imlib_FileIsDir(const char *s)
 {
    struct stat         st;
-   char               *fl;
 
-   if ((!s) || (!*s))
-      return 0;
-   if (__imlib_IsRealFile(s))
-      fl = strdup(s);
-   else
-      fl = __imlib_FileRealFile(s);
-   if (!fl)
+   if (__imlib_FileStat(s, &st))
       return 0;
-   if (stat(fl, &st) < 0)
-     {
-        free(fl);
-        return 0;
-     }
-   if (S_ISDIR(st.st_mode))
-     {
-        free(fl);
-        return 1;
-     }
-   free(fl);
-   return 0;
+
+   return (S_ISDIR(st.st_mode)) ? 1 : 0;
 }
 
-int
-__imlib_FilePermissions(const char *s)
+time_t
+__imlib_FileModDate(const char *s)
 {
    struct stat         st;
-   char               *fl;
 
-   if ((!s) || (!*s))
+   if (__imlib_FileStat(s, &st))
       return 0;
-   if (__imlib_IsRealFile(s))
-      fl = strdup(s);
-   else
-      fl = __imlib_FileRealFile(s);
-   if (!fl)
-      return 0;
-   if (stat(fl, &st) < 0)
-     {
-        free(fl);
-        return 0;
-     }
-   free(fl);
-   return st.st_mode;
+
+   return (st.st_mtime > st.st_ctime) ? st.st_mtime : st.st_ctime;
 }
 
 int
 __imlib_FileCanRead(const char *s)
 {
-   char               *fl;
-   int                 val;
+   struct stat         st;
 
-   if (__imlib_IsRealFile(s))
-      fl = strdup(s);
-   else
-      fl = __imlib_FileRealFile(s);
-   if (!fl)
+   if (__imlib_FileStat(s, &st))
       return 0;
-   if (!(__imlib_FilePermissions(fl) & (S_IRUSR | S_IRGRP | S_IROTH)))
-     {
-        free(fl);
-        return 0;
-     }
 
-   val = (1 + access(fl, R_OK));
-   free(fl);
-   return val;
+   if (!(st.st_mode & (S_IRUSR | S_IRGRP | S_IROTH)))
+      return 0;
+
+   return access(s, R_OK) == 0 ? 1 : 0; // ??? TBD
 }
 
 char              **
@@ -315,42 +276,6 @@ __imlib_FileDel(const char *s)
    unlink(s);
 }
 
-int
-__imlib_IsRealFile(const char *s)
-{
-   struct stat         st;
-
-   return (stat(s, &st) != -1) && (S_ISREG(st.st_mode));
-}
-
-time_t
-__imlib_FileModDate(const char *s)
-{
-   struct stat         st;
-   char               *fl;
-
-   if ((!s) || (!*s))
-      return 0;
-   if (__imlib_IsRealFile(s))
-      fl = strdup(s);
-   else
-      fl = __imlib_FileRealFile(s);
-   if (!fl)
-      return 0;
-   if (stat(fl, &st) < 0)
-     {
-        free(fl);
-        return 0;
-     }
-   if (st.st_mtime > st.st_ctime)
-     {
-        free(fl);
-        return st.st_mtime;
-     }
-   free(fl);
-   return st.st_ctime;
-}
-
 char               *
 __imlib_FileHomeDir(int uid)
 {
diff --git a/src/lib/file.h b/src/lib/file.h
index ba34b51..b5e1fc6 100644
--- a/src/lib/file.h
+++ b/src/lib/file.h
@@ -3,21 +3,23 @@
 
 #include "common.h"
 
+int                 __imlib_IsRealFile(const char *s);
 char               *__imlib_FileKey(const char *file);
 char               *__imlib_FileRealFile(const char *file);
+
 const char         *__imlib_FileExtension(const char *file);
+
 int                 __imlib_FileExists(const char *s);
 int                 __imlib_FileIsFile(const char *s);
 int                 __imlib_FileIsDir(const char *s);
+time_t              __imlib_FileModDate(const char *s);
+int                 __imlib_FileCanRead(const char *s);
+
 char              **__imlib_FileDir(const char *dir, int *num);
 void                __imlib_FileFreeDirList(char **l, int num);
+
 void                __imlib_FileDel(const char *s);
-time_t              __imlib_FileModDate(const char *s);
 char               *__imlib_FileHomeDir(int uid);
-int                 __imlib_FilePermissions(const char *s);
-int                 __imlib_FileCanRead(const char *s);
-int                 __imlib_IsRealFile(const char *s);
-
 int                 __imlib_ItemInList(char **list, int size, char *item);
 
 const char         *__imlib_PathToFilters(void);

-- 


Reply via email to