This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository efm2.

View the commit online.

commit 9413ca2e62c1495e3c95b269fd4520c77eb2617b
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
AuthorDate: Tue Apr 30 09:55:30 2024 +0100

    fix err handling to contain correct operation
---
 src/backends/default/fs.c | 135 ++++++++++++++++++----------------------------
 src/efm/efm_dnd.h         |   1 +
 2 files changed, 54 insertions(+), 82 deletions(-)

diff --git a/src/backends/default/fs.c b/src/backends/default/fs.c
index 53d19d0..d64fccc 100644
--- a/src/backends/default/fs.c
+++ b/src/backends/default/fs.c
@@ -19,80 +19,46 @@
 // pretty insane - so handle non-errors in switches and otherwise pass to
 // this tio handle the reast in a generic way.
 static void
-_error_handle(const char *src, const char *dst, int errno_in)
+_error_handle(const char *src, const char *dst, const char *op, int errno_in)
 {
+  // XXX: Fix str to be Move, Copy or Delete as it can handle any
+  Eina_Strbuf *buf = eina_strbuf_new();
+
+  if (!buf) abort();
+  eina_strbuf_append(buf, op);
+  eina_strbuf_append(buf, ": ");
+#define HNDL(_err, _str)                                 \
+  _err:                                                  \
+    eina_strbuf_append(buf, _str);                       \
+    status_error(src, dst, eina_strbuf_string_get(buf)); \
+    break
   switch (errno_in)
     {
-    case EACCES:
-      status_error(src, dst, "Move - Access denied");
-      return;
-    case EFAULT:
-      status_error(src, dst, "Move - Memory Fault");
-      return;
-    case ELOOP:
-      status_error(src, dst, "Move - Too many symlinks");
-      return;
-    case ENAMETOOLONG:
-      status_error(src, dst, "Move - Name too long");
-      return;
-    case ENOMEM:
-      status_error(src, dst, "Move - Out of memory");
-      return;
-    case ENOTDIR:
-      status_error(src, dst, "Move - Path component is not a directory");
-      return;
-    case EOVERFLOW:
-      status_error(src, dst, "Move - Overflow");
-      return;
-    case EDQUOT:
-      status_error(src, dst, "Move - Over quota");
-      return;
-    case EINVAL:
-      status_error(src, dst, "Move - Inmvalid value");
-      return;
-    case EMLINK:
-      status_error(src, dst, "Move - Too many source links");
-      return;
-    case ENOENT:
-      status_error(src, dst, "Move - File does not exist");
-      return;
-    case ENOSPC:
-      status_error(src, dst, "Move - Disk full");
-      return;
-    case EPERM:
-      status_error(src, dst, "Move - Permission denied");
-      return;
-    case EROFS:
-      status_error(src, dst, "Move - Read only filesystem");
-      return;
-    case EBADF:
-      status_error(src, dst, "Move - Bad file descriptor");
-      return;
-    case EIO:
-      status_error(src, dst, "Move - I/O error");
-      return;
-    case EISDIR:
-      status_error(src, dst, "Move - Destination is dir");
-      return;
-    case EFBIG:
-      status_error(src, dst, "Move - File too big");
-      return;
-    case ETXTBSY:
-      status_error(src, dst, "Move - Text file busy");
-      return;
-    case EBUSY:
-      status_error(src, dst, "Move - File busy");
-      return;
-    case ENOTEMPTY:
-      status_error(src, dst, "Move - Destination not empty");
-      return;
-    case EEXIST:
-      status_error(src, dst, "Move - File exists");
-      return;
-    default: // WAT? we should not get here - we handled everything...
-      status_error(src, dst, "Move - Unknown error");
-      break;
+      HNDL(case EACCES, "Access denied");
+      HNDL(case EFAULT, "Memory Fault");
+      HNDL(case ELOOP, "Too many symlinks");
+      HNDL(case ENAMETOOLONG, "Name too long");
+      HNDL(case ENOMEM, "Out of memory");
+      HNDL(case ENOTDIR, "Path component is not a directory");
+      HNDL(case EOVERFLOW, "Overflow");
+      HNDL(case EDQUOT, "Over quota");
+      HNDL(case EINVAL, "Invalid value");
+      HNDL(case EMLINK, "Too many links");
+      HNDL(case ENOENT, "Does not exist");
+      HNDL(case ENOSPC, "Disk full");
+      HNDL(case EPERM, "Permission denied");
+      HNDL(case EROFS, "Read only filesystem");
+      HNDL(case EBADF, "Bad file descriptor");
+      HNDL(case EIO, "I/O error");
+      HNDL(case EISDIR, "Destination is a directory");
+      HNDL(case EFBIG, "File too big");
+      HNDL(case ETXTBSY, "Text file busy");
+      HNDL(case EBUSY, "File busy");
+      HNDL(case ENOTEMPTY, "Destination is not empty");
+      HNDL(case EEXIST, "File exists");
+      HNDL(default, "Unknown error");
     }
+  eina_strbuf_free(buf);
 }
 
 // this scans a tree to build a potential operation progress count. it may
@@ -106,6 +72,7 @@ fs_scan(const char *src)
   Eina_Iterator *it;
   const char    *s;
   struct stat    st;
+  const char    *op = "Scan";
 
   if (strlen(src) < 1) return EINA_FALSE;
 
@@ -116,7 +83,7 @@ fs_scan(const char *src)
         case ENOENT: // ignore this error - file removed during scan ?
           return EINA_TRUE;
         default:
-          _error_handle(src, NULL, errno);
+          _error_handle(src, NULL, op, errno);
           return EINA_FALSE;
         }
     }
@@ -157,14 +124,17 @@ fs_cp_rm(const char *src, const char *dst, Eina_Bool report_err, Eina_Bool cp,
   struct stat    st;
   mode_t         old_umask;
   struct timeval times[2];
+  const char    *op = "";
 
   if (strlen(src) < 1) return EINA_FALSE;
 
   // first count how much work needs doing
   if (!fs_scan(src)) return EINA_FALSE;
 
-  fprintf(stderr, "cp_rm [%s] -> [%s]\n", src, dst);
-  fflush(stderr);
+  if (rm && cp) op = "Move";
+  else if (!rm && cp) op = "Copy";
+  else if (rm && !cp) op = "Delete";
+
   if (lstat(src, &st) != 0)
     {
       switch (errno)
@@ -173,7 +143,7 @@ fs_cp_rm(const char *src, const char *dst, Eina_Bool report_err, Eina_Bool cp,
           status_pos(1, "Move - File vanished");
           break;
         default:
-          _error_handle(src, dst, errno);
+          _error_handle(src, dst, op, errno);
           return EINA_FALSE;
         }
     }
@@ -189,7 +159,7 @@ fs_cp_rm(const char *src, const char *dst, Eina_Bool report_err, Eina_Bool cp,
                 case EEXIST: // ignore - mv would mv over this anyway
                   break;
                 default: // WAT
-                  _error_handle(NULL, dst, errno);
+                  _error_handle(NULL, dst, op, errno);
                   res = EINA_FALSE;
                   goto err;
                 }
@@ -229,7 +199,7 @@ fs_cp_rm(const char *src, const char *dst, Eina_Bool report_err, Eina_Bool cp,
                 case ENOENT: // ignore missing
                   break;
                 default:
-                  _error_handle(src, NULL, errno);
+                  _error_handle(src, NULL, op, errno);
                   res = EINA_FALSE;
                   goto err;
                 }
@@ -259,7 +229,7 @@ fs_cp_rm(const char *src, const char *dst, Eina_Bool report_err, Eina_Bool cp,
                   status_pos(1, "Move - File vanished");
                   break;
                 default:
-                  _error_handle(src, dst, errno);
+                  _error_handle(src, dst, op, errno);
                   return EINA_FALSE;
                 }
             }
@@ -333,7 +303,7 @@ again_read:
                             case EINTR:
                               goto again_read;
                             default:
-                              _error_handle(src, NULL, errno);
+                              _error_handle(src, NULL, op, errno);
                               res = EINA_FALSE;
                               goto err_copy;
                             }
@@ -351,7 +321,7 @@ again_write:
                                 case EINTR:
                                   goto again_write;
                                 default:
-                                  _error_handle(NULL, dst, errno);
+                                  _error_handle(NULL, dst, op, errno);
                                   res = EINA_FALSE;
                                   goto err_copy;
                                 }
@@ -377,7 +347,7 @@ again_write:
                               break;
                             case EBADF:
                             default: // WAT
-                              _error_handle(src, dst, errno);
+                              _error_handle(src, dst, op, errno);
                               res = EINA_FALSE;
                               goto err_copy;
                             }
@@ -400,7 +370,7 @@ err_copy:
                 case ENOENT: // ignore missing
                   break;
                 default:
-                  _error_handle(src, NULL, errno);
+                  _error_handle(src, NULL, op, errno);
                   res = EINA_FALSE;
                   goto err_unlink;
                 }
@@ -439,6 +409,7 @@ fs_mv(const char *src, const char *dst, Eina_Bool report_err)
 { // mv /path/to/src/filename /path/to/dst/filename
   Eina_Bool res = EINA_TRUE;
   int       ret;
+  const char *op = "Move";
 
   status_op("mv");
   status_count(1, src);
@@ -452,7 +423,7 @@ fs_mv(const char *src, const char *dst, Eina_Bool report_err)
           return fs_cp_rm(src, dst, report_err, EINA_TRUE, EINA_TRUE);
           break;
         default:
-          if (report_err) _error_handle(src, dst, errno);
+          if (report_err) _error_handle(src, dst, op, errno);
           res = EINA_FALSE;
           break;
         }
diff --git a/src/efm/efm_dnd.h b/src/efm/efm_dnd.h
index de787d5..a20c0e4 100644
--- a/src/efm/efm_dnd.h
+++ b/src/efm/efm_dnd.h
@@ -2,6 +2,7 @@
 #define EFM_DND_H 1
 
 #include <Elementary.h>
+#include "efm_structs.h"
 
 void _drop_init(Smart_Data *sd);
 void _drag_start(Icon *icon);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to