len = (strlen (current->name) > MAXFNAME * 80 / 100) ? 2 * MAXFNAME + 1: MAXFNAME + 1;
string = getwindow ("Rename", winscreen, MAXFNAME / 2, len, current->name);
if (string) {
- struct stat sb;
- if ((stat (string, &sb) == 0) || (rename (current->name, string) != 0)) {
+ if (strchr (string, *SEPARATOR) != NULL) {
char *buf = strdupcat ("Can't rename file to '", string, "'", NULL);
msgwindow (buf, winscreen, 0);
getch ();
free (buf);
+ } else {
+ char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
+ char *dest = strdupcat (dirname[panel], SEPARATOR, string, NULL);
+ char *msg = processmove (dest, src);
+ if (msg) {
+ msgwindow (msg, winscreen, 0);
+ getch ();
+ free (msg);
+ }
+ free (src);
+ free (dest);
}
freelist (list[panel]);
list[panel] = NULL;
/* test: { sleep 1; echo -en '\en'; sleep 1; echo -n foo/bar; sleep 1; echo; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */
/* Rename */
-/* test: touch .a && { sleep 1; echo -en 'k\er'; sleep 1; echo .aa; sleep 1; echo -en '\er'; sleep 1; echo .aa/1; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm .aa */
+/* test: touch .a && { sleep 1; echo -en 'k\er'; sleep 1; echo .aa; sleep 1; echo -en '\er'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm .aa */
+/* test: touch .a && { sleep 1; echo -en 'k\er'; sleep 1; echo .c/1; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm .a */
+/* test: touch .a && mkdir .b && { sleep 1; echo -en 'k\er'; sleep 1; echo .b/.a; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm .a && mkdir .b */
+/* test: touch .a .b && { sleep 1; echo -en 'k\er'; sleep 1; echo .b; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm .a .b */
/* Move */
/* test: touch .a0 && mkdir .a1 && { sleep 1; echo -en 'k\esk\es'; sleep 1; echo -en '\t\n\t'; sleep 1; echo -en '\em'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm ../.a0 && rmdir ../.a1 */
char *msg = NULL;
struct stat sb;
- if (STAT (dest, &sb) == 0) {
+ int rc = STAT (dest, &sb);
+ errno = 0;
+ if ((rc == -1) && (errno == ENOENT)) {
if (rename (src, dest) != 0) {
- char *sep = strrchr (dest, *SEPARATOR);
- if (sep != NULL) {
- *sep = '\0';
- }
msg = strdupcat ("Can't move '", src, "' to '", dest, "'", NULL);
}
+ } else if (rc == 0) {
+ msg = strdupcat ("File '", dest, "' exists", NULL);
} else {
VERBOSE (ERROR, fprintf (stderr, "can't stat on file '%s'\n", src));
exit (1);
}
+ errno = 0;
return msg;
}