current = list[panel]->tab + i;
if (current->selected) {
char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
- char *dest = dirname[(panel + 1 ) % MAXPANELS];
+ char *dest = strdupcat (dirname[(panel + 1 ) % MAXPANELS], NULL);
char *msg = processcopy (dest, src);
if (msg) {
msgwindow (msg, winscreen, 0);
free (msg);
}
free (src);
+ free (dest);
}
}
freelist (list[panel]);
if (current->selected) {
char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
char *dest = strdupcat (dirname[(panel + 1 ) % MAXPANELS], SEPARATOR, current->name, NULL);
- struct stat sb;
- if ((STAT (dest, &sb) == 0) || (rename (src, dest) != 0)) {
- char *buf = strdupcat ("Can't move '", current->name, "' to '", dirname[(panel + 1 ) % MAXPANELS], "'", NULL);
- msgwindow (buf, winscreen, 0);
+ char *msg = processmove (dest, src);
+ if (msg) {
+ msgwindow (msg, winscreen, 0);
getch ();
- free (buf);
+ free (msg);
}
free (src);
free (dest);
case ALT_N: /* new dir */
string = getwindow ("New directory", winscreen, MAXFNAME / 2, MAXFNAME, NULL);
if (string) {
- if (MKDIR (string) != 0) {
+ char *dest = strdupcat (dirname[panel], SEPARATOR, string, NULL);
+ if (MKDIR (dest) != 0) {
msgwindow ("Can't create directory", winscreen, 0);
getch ();
}
+ free (dest);
freelist (list[panel]);
list[panel] = NULL;
free (string);
return msg;
}
+char *processmove (char *dest, char *src)
+{
+ char *msg = NULL;
+
+ struct stat sb;
+ if (STAT (dest, &sb) == 0) {
+ 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 {
+ VERBOSE (ERROR, fprintf (stderr, "can't stat on file '%s'\n", src));
+ exit (1);
+ }
+
+ return msg;
+}
+
/* vim: set ts=4 sw=4 et: */