2014-11-14 13:37:40 (UTC-02:00)
Marcel Rodrigues <marcelgmr@gmail.com>
Avoid circular copy/move.
diff --git a/rover.c b/rover.c index 3fbd42d..516b436 100644 --- a/rover.c +++ b/rover.c @@ -174,6 +174,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 clean_term() @@ -448,8 +450,7 @@ process_dir(PROCESS pre, PROCESS proc, PROCESS pos, const char *path) 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); } }