2015-03-07 12:28:59 (UTC-03:00)
Marcel Rodrigues <marcelgmr@gmail.com>
Add support for moving files across different file systems.
diff --git a/rover.c b/rover.c index b337b89..2c91a67 100644 --- a/rover.c +++ b/rover.c @@ -11,6 +11,7 @@ #include <fcntl.h> /* open() */ #include <sys/wait.h> /* waitpid() */ #include <signal.h> /* struct sigaction, sigaction() */ +#include <errno.h> #include <curses.h> #include "config.h" @@ -568,11 +569,18 @@ static int adddir(const char *path) { return mkdir(path, st.st_mode); } static int movfile(const char *srcpath) { + int ret; char dstpath[FILENAME_MAX]; strcpy(dstpath, CWD); strcat(dstpath, srcpath + strlen(rover.marks.dirpath)); - return rename(srcpath, dstpath); + ret = rename(srcpath, dstpath); + if (ret < 0 && errno == EXDEV) { + ret = cpyfile(srcpath); + if (ret < 0) return ret; + ret = delfile(srcpath); + } + return ret; } /* Do a fork-exec to external program (e.g. $EDITOR). */