commit - 548a3163f1a077b634340da5d20f1d404196bb91
commit + 845f2b8777a55835d667574cc5396cb440edeb74
blob - 4cf7b7f90451a423393f00599c6f977f0f8f2d79
blob + 07626cbba7640af3212fdd249814487d990a7c6c
--- rover.c
+++ rover.c
#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)
}
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))) {
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];
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);
}
}
update();
}
else if (!strcmp(key, RVK_DELETE)) {
- delete_marked();
+ process_marked(NULL, unlink, rmdir);
+ mark_none(&rover.marks);
cd(1);
}
}