Commit Diff


commit - 50c63039ab458da77c04eca7fff565f780e6086a
commit + b25c983405c21750cf731190add53f19c1583109
blob - 3fbd42de54fd47f7f2f1ff8992151dd199cecdbd
blob + 516b436536204bd3220957d034540d1ae7ebf5e4
--- rover.c
+++ rover.c
@@ -173,6 +173,8 @@ finish_marks(marks_t *marks)
         }
     free(marks->entries);
 }
+
+static void message(const char *msg, color_t color);
 
 /* Curses clean up. Must be called before exiting browser. */
 static void
@@ -448,8 +450,7 @@ process_dir(PROCESS pre, PROCESS proc, PROCESS pos, co
             strcat(subpath, "/");
             process_dir(pre, proc, pos, subpath);
         }
-        else
-            proc(subpath);
+        else proc(subpath);
     }
     closedir(dp);
     if (pos) pos(path);
@@ -464,10 +465,13 @@ process_marked(PROCESS pre, PROCESS proc, PROCESS pos)
     for (i = 0; i < rover.marks.bulk; i++)
         if (rover.marks.entries[i]) {
             sprintf(path, "%s%s", rover.marks.dirpath, rover.marks.entries[i]);
-            if (strchr(rover.marks.entries[i], '/'))
-                process_dir(pre, proc, pos, path);
-            else
-                proc(path);
+            if (strchr(rover.marks.entries[i], '/')) {
+                if (!strncmp(path, CWD, strlen(path)))
+                    message("Cannot copy/move directory inside itself.", RED);
+                else
+                    process_dir(pre, proc, pos, path);
+            }
+            else proc(path);
         }
 }