From: Laurent MAZET Date: Wed, 15 Jan 2025 10:40:27 +0000 (+0100) Subject: clean processmove X-Git-Tag: v1.0~41 X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=6bd5b32cb82aa069112eb6b31979e7ab3287bcdb;p=fm.git clean processmove --- diff --git a/fm.c b/fm.c index 9afb235..bb94582 100644 --- a/fm.c +++ b/fm.c @@ -309,7 +309,7 @@ int main (int argc, char *argv[]) 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); @@ -317,6 +317,7 @@ int main (int argc, char *argv[]) free (msg); } free (src); + free (dest); } } freelist (list[panel]); @@ -360,12 +361,11 @@ int main (int argc, char *argv[]) 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); @@ -379,10 +379,12 @@ int main (int argc, char *argv[]) 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); diff --git a/function.c b/function.c index 44d2acc..dbbcc4c 100644 --- a/function.c +++ b/function.c @@ -495,4 +495,25 @@ char *processdelete (char *name) 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: */ diff --git a/function.h b/function.h index 7f1dd05..70e4eba 100644 --- a/function.h +++ b/function.h @@ -51,6 +51,8 @@ char *processcopy (char *dest, char *src); char *processdelete (char *src); +char *processmove (char *dest, char *src); + #endif /* __FUNCTION_H__ */ /* vim: set ts=4 sw=4 et: */