Commit Diff


commit - 548a3163f1a077b634340da5d20f1d404196bb91
commit + 845f2b8777a55835d667574cc5396cb440edeb74
blob - 4cf7b7f90451a423393f00599c6f977f0f8f2d79
blob + 07626cbba7640af3212fdd249814487d990a7c6c
--- rover.c
+++ rover.c
@@ -74,6 +74,8 @@ struct rover_t {
 #define FSEL        rover.fsel[rover.tab]
 #define FLAGS       rover.flags[rover.tab]
 #define CWD         rover.cwd[rover.tab]
+
+typedef int (*PROCESS)(const char *path);
 
 void
 init_marks(marks_t *marks)
@@ -416,13 +418,14 @@ cd(int reset)
 }
 
 static void
-delete_dir(const char *path)
+process_dir(PROCESS pre, PROCESS proc, PROCESS pos, const char *path)
 {
     DIR *dp;
     struct dirent *ep;
     struct stat statbuf;
     char subpath[FILENAME_MAX];
 
+    if (pre) pre(path);
     if((dp = opendir(path)) == NULL)
         return;
     while ((ep = readdir(dp))) {
@@ -432,17 +435,17 @@ delete_dir(const char *path)
         stat(subpath, &statbuf);
         if (S_ISDIR(statbuf.st_mode)) {
             strcat(subpath, "/");
-            delete_dir(subpath);
+            process_dir(pre, proc, pos, subpath);
         }
         else
-            unlink(subpath);
+            proc(subpath);
     }
     closedir(dp);
-    rmdir(path);
+    if (pos) pos(path);
 }
 
 static void
-delete_marked()
+process_marked(PROCESS pre, PROCESS proc, PROCESS pos)
 {
     int i;
     char path[FILENAME_MAX];
@@ -451,9 +454,9 @@ delete_marked()
         if (rover.marks.entries[i]) {
             sprintf(path, "%s%s", rover.marks.dirpath, rover.marks.entries[i]);
             if (strchr(rover.marks.entries[i], '/'))
-                delete_dir(path);
+                process_dir(pre, proc, pos, path);
             else
-                unlink(path);
+                proc(path);
         }
 }
 
@@ -754,7 +757,8 @@ main(int argc, char *argv[])
             update();
         }
         else if (!strcmp(key, RVK_DELETE)) {
-            delete_marked();
+            process_marked(NULL, unlink, rmdir);
+            mark_none(&rover.marks);
             cd(1);
         }
     }