wip copy (2)
authorLaurent Mazet <mazet@softndesign.org>
Mon, 13 Jan 2025 22:36:32 +0000 (23:36 +0100)
committerLaurent Mazet <mazet@softndesign.org>
Mon, 13 Jan 2025 22:36:32 +0000 (23:36 +0100)
fm.c
function.c
function.h

diff --git a/fm.c b/fm.c
index 8bd44364f9eb547d1a14b42d5d8722439abc561b..f4d10fe540631081f8659598bc6cbb09307cade2 100644 (file)
--- a/fm.c
+++ b/fm.c
@@ -308,13 +308,13 @@ int main (int argc, char *argv[])
                 for (i = 0; i < list[panel]->nb; i++) {
                     current = list[panel]->tab + i;
                     if (current->selected) {
-                        char *src = strdupcat (dirname[panel], SEPARATOR, current->name);
+                        char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
                         char *dest = dirname[(panel + 1 ) % MAXPANELS];
-                        if (processcopy (dest, src) != 0) {
-                            char *buf = strdupcat ("Can't copy '", src, "' to '", dest, "'", NULL);
-                            msgwindow (buf, winscreen, 0);
+                        char *msg = processcopy (dest, src);
+                        if (msg) {
+                            msgwindow (msg, winscreen, 0);
                             getch ();
-                            free (buf);
+                            free (msg);
                         }
                         free (src);
                     }
index 67ecd184605457c83e1ec16d5dd59b5f1c47d2c7..63333ed01ce1595de34b7a57b2cacdb5de1797bc 100644 (file)
@@ -1,4 +1,6 @@
 #include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
 #include <regex.h>
 #include <stdarg.h>
 #include <stdio.h>
@@ -364,9 +366,9 @@ int filterlist (list_t *list, char *regex)
     return rc;
 }
 
-int _copyfile (char *dest, char *src, size_t size)
+char *_copyfile (char *dest, char *src)
 {
-    int rc = 0;
+    char *msg = NULL;
 
     int fdsrc = open (src, O_RDONLY);
     int fddest = open (dest, O_WRONLY | O_CREAT | O_EXCL, 0622);
@@ -377,39 +379,38 @@ int _copyfile (char *dest, char *src, size_t size)
         if (fddest > 0) {
             close (fddest);
         }
-        return 1;
+        return strdupcat ("Can't open file '", (fdsrc < 0) ? src : dest, "'", NULL);
     }
 
     char bufin[BUFMAX];
-    size_t nread = 0;
-    int saved_errno;
+    ssize_t nread = 0;
     while (nread = read(fdsrc, bufin, sizeof (bufin)), nread > 0) {
         char *bufout = bufin;
-        size_t nwritten;
+        ssize_t nwritten;
 
-        while ((nread > 0) && (rc == 0)) {
+        while ((nread > 0) && (msg == NULL)) {
             nwritten = write(fddest, bufout, nread);
 
             if (nwritten >= 0) {
                 nread -= nwritten;
                 bufout += nwritten;
             } else if (errno != EINTR) {
-                rc = 1;
+                msg = strdupcat ("Can't write file '", dest, "'", NULL);
             }
         }
     }
 
     if ((close (fddest) < 0) && (nread == 0)) {
-        rc = 1;
+        strdupcat ("Can't close file '", dest, "'", NULL);
     }
     close (fdsrc);
 
-    return rc;
+    return msg;
 }
 
-int processcopy (char *dest, char *src)
+char *processcopy (char *dest, char *src)
 {
-    int rc = 0;
+    char *msg = NULL;
 
     struct stat sb;
 #ifdef WIN32
@@ -418,50 +419,46 @@ int processcopy (char *dest, char *src)
     if (lstat (src, &sb) == 0) {
 #endif
         if ((sb.st_mode & S_IFMT) == S_IFDIR) {
-            char nextdest = strdupcat (dest, SEPARATOR, src, NULL);
+            char *nextdest = strdupcat (dest, SEPARATOR, src, NULL);
 #ifdef WIN32
             if (mkdir (nextdest) != 0) {
 #else
-            if (mkdir (nextdest, 0750) != 0) {
+            //if (mkdir (nextdest, 0750) != 0) {
+            VERBOSE (ERROR, fprintf (stderr, "mkdir '%s'\n", nextdest)); if (0) {
 #endif
-                char *msg = strdupcat (("Can't create directory '", nextdest, "'", NULL);
-                msgwindow (msg, winscreen, 0);
-                getch ();
-                free (msg);
-                rc = 1;
+                msg = strdupcat ("Can't create directory '", nextdest, "'", NULL);
             } else {
                 DIR *dir = opendir (src);
 
                 if (dir != NULL) {
                     struct dirent *dp = NULL;
-                    while (((dp = readdir (dir)) != NULL) && (rc == 0)) {
+                    while (((dp = readdir (dir)) != NULL) && (msg == NULL)) {
                         if ((strcmp (dp->d_name, ".") == 0) || (strcmp (dp->d_name, "..") == 0)) {
                             continue;
                         }
                         char *nextsrc = strdupcat (src, SEPARATOR, dp->d_name, NULL);
-                        rc = processdelete (nextdest, nextsrc);
+                        msg = processcopy (dest, nextsrc);
                         free (nextsrc);
                     }
                     closedir (dir);
                 } else {
-                    rc = 1;
+                    msg = strdupcat ("Can't open directory '", src, "'", NULL);
                 }
             }
             free (nextdest);
         } else {
-            char *basename = strrstr (srcn SEPARATOR);
+            char *basename = strrchr (src, *SEPARATOR);
+            basename = (basename) ? basename + 1 : src;
             char *newdest = strdupcat (dest, SEPARATOR, basename, NULL);
-            rc = _copyfile (dest, src, sb.st_size);
+            //msg = _copyfile (newdest, src);
+            VERBOSE (ERROR, fprintf (stderr, "copy '%s' to '%s'\n", src, newdest));
             free (newdest);
         }
     } else {
-        rc = 1;
+        msg = strdupcat ("Can't stat file '", src, "'", NULL);
     }
 
-    return rc;
-}
-
-    return 0;
+    return msg;
 }
 
 int processdelete (char *name)
index 8de42add302b53074bec6ebf69680c0dccd0c236..976ad628096e26c6db586acb4001e7e5f692bcf7 100644 (file)
@@ -39,7 +39,7 @@ void freewindow (window_t *win);
 
 int filterlist (list_t *list, char *regex);
 
-int processcopy (char *dest, char *src);
+char *processcopy (char *dest, char *src);
 
 int processdelete (char *src);