clean processmove
authorLaurent MAZET <laurent.mazet@thalesgroup.com>
Wed, 15 Jan 2025 10:40:27 +0000 (11:40 +0100)
committerLaurent MAZET <laurent.mazet@thalesgroup.com>
Wed, 15 Jan 2025 10:40:27 +0000 (11:40 +0100)
fm.c
function.c
function.h

diff --git a/fm.c b/fm.c
index 9afb23558994ff2a3d6d469e9360f49a16e946b1..bb945822388aa53fc169cde7ea0b8027a3f290f5 100644 (file)
--- a/fm.c
+++ b/fm.c
@@ -309,7 +309,7 @@ int main (int argc, char *argv[])
                     current = list[panel]->tab + i;
                     if (current->selected) {
                         char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
-                        char *dest = dirname[(panel + 1 ) % MAXPANELS];
+                        char *dest = strdupcat (dirname[(panel + 1 ) % MAXPANELS], NULL);
                         char *msg = processcopy (dest, src);
                         if (msg) {
                             msgwindow (msg, winscreen, 0);
@@ -317,6 +317,7 @@ int main (int argc, char *argv[])
                             free (msg);
                         }
                         free (src);
+                        free (dest);
                     }
                 }
                 freelist (list[panel]);
@@ -360,12 +361,11 @@ int main (int argc, char *argv[])
                     if (current->selected) {
                         char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
                         char *dest = strdupcat (dirname[(panel + 1 ) % MAXPANELS], SEPARATOR, current->name, NULL);
-                        struct stat sb;
-                        if ((STAT (dest, &sb) == 0) || (rename (src, dest) != 0)) {
-                            char *buf = strdupcat ("Can't move '", current->name, "' to '", dirname[(panel + 1 ) % MAXPANELS], "'", NULL);
-                            msgwindow (buf, winscreen, 0);
+                        char *msg = processmove (dest, src);
+                        if (msg) {
+                            msgwindow (msg, winscreen, 0);
                             getch ();
-                            free (buf);
+                            free (msg);
                         }
                         free (src);
                         free (dest);
@@ -379,10 +379,12 @@ int main (int argc, char *argv[])
             case ALT_N: /* new dir */
                 string = getwindow ("New directory", winscreen, MAXFNAME / 2, MAXFNAME, NULL);
                 if (string) {
-                    if (MKDIR (string) != 0) {
+                    char *dest = strdupcat (dirname[panel], SEPARATOR, string, NULL);
+                    if (MKDIR (dest) != 0) {
                         msgwindow ("Can't create directory", winscreen, 0);
                         getch ();
                     }
+                    free (dest);
                     freelist (list[panel]);
                     list[panel] = NULL;
                     free (string);
index 44d2acc50c96532e4ec31346e857acd82d339140..dbbcc4c57eb942ba58b387b157c8e3905275006d 100644 (file)
@@ -495,4 +495,25 @@ char *processdelete (char *name)
     return msg;
 }
 
+char *processmove (char *dest, char *src)
+{
+    char *msg = NULL;
+
+    struct stat sb;
+    if (STAT (dest, &sb) == 0) {
+        if (rename (src, dest) != 0) {
+            char *sep = strrchr (dest, *SEPARATOR);
+            if (sep != NULL) {
+                *sep = '\0';
+            }
+            msg = strdupcat ("Can't move '", src, "' to '", dest, "'", NULL);
+        }
+    } else {
+        VERBOSE (ERROR, fprintf (stderr, "can't stat on file '%s'\n", src));
+        exit (1);
+    }
+
+    return msg;
+}
+
 /* vim: set ts=4 sw=4 et: */
index 7f1dd05596fa60a1e7fff3c9b85b312db6a8a24e..70e4eba136cfa1899d4682f938211c0f209ed44e 100644 (file)
@@ -51,6 +51,8 @@ char *processcopy (char *dest, char *src);
 
 char *processdelete (char *src);
 
+char *processmove (char *dest, char *src);
+
 #endif /* __FUNCTION_H__ */
 
 /* vim: set ts=4 sw=4 et: */