From e33c59e5a709776fc9df3aefb0c1359a78c2139c Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Tue, 14 Jan 2025 23:18:42 +0100 Subject: [PATCH] add tests and fix bound condition on copy --- fm.c | 6 ++++-- function.c | 13 +++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/fm.c b/fm.c index 5422172..cd9f7e6 100644 --- a/fm.c +++ b/fm.c @@ -361,7 +361,7 @@ int main (int argc, char *argv[]) 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)) { + 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); getch (); @@ -480,6 +480,8 @@ int main (int argc, char *argv[]) /* test: touch .a0 && mkdir .a1 && touch .a1/a2 && { sleep 1; echo -en 'k\esk\es'; sleep 1; echo -en '\ed'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe */ /* Copy */ -/* test: mkdir .b .b/c .b/c/d && echo "test" > .a && touch .b/a .b/b && dd if=/dev/random bs=1k count=12 of=.b/c/d/e 2>/dev/null && md5=$(md5sum .b/c/d/e); && { sleep 1; echo -en '\t\n\t'; sleep 1; echo -en 'k\esk\es'; sleep 1; echo -en '\ec'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && test "$(cat .a) = test && test "$(md5)" = "$(cd ..; md5sum .b/c/d/e)" && rm .a ../.a .b/a ../.b/a .b/b ../.b/b .b/c/d/e ../.b/c/d/e && rmdir .b ../.b .b/c ../.b/c .b/c/d ../.b/c/d */ +/* test: mkdir .b .b/c .b/c/d && echo "test" > .a && touch .b/a .b/b && dd if=/dev/random bs=1k count=12 of=.b/c/d/e 2>/dev/null && md5=$(md5sum .b/c/d/e) && { sleep 1; echo -en '\t\n\t'; sleep 1; echo -en 'k\esk\es'; sleep 1; echo -en '\ec'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && test "$(cat .a)" = test && test "$md5" = "$(cd ..; md5sum .b/c/d/e)" && rm .a ../.a .b/a ../.b/a .b/b ../.b/b .b/c/d/e ../.b/c/d/e && rmdir .b/c/d .b/c .b ../.b/c/d ../.b/c ../.b */ +/* test: echo "test" > .a && touch ../.a && { sleep 1; echo -en '\t\n\t'; sleep 1; echo -en 'k\es'; sleep 1; echo -en '\ec'; sleep 1; echo -n y; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && test "$(ls -s ../.a)" = "0 ../.a" && rm .a ../.a */ +/* test: mkdir .a ../.a && { sleep 1; echo -en '\t\n\t'; sleep 1; echo -en 'k\es'; sleep 1; echo -en '\ec'; sleep 1; echo -n y; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rmdir .a ../.a */ /* vim: set ts=4 sw=4 et: */ diff --git a/function.c b/function.c index 9282187..8082cb8 100644 --- a/function.c +++ b/function.c @@ -377,13 +377,13 @@ char *_copyfile (char *dest, char *src) do { char buffer[BUFMAX]; size_t nread = fread (buffer, 1, BUFMAX, fdsrc); - VERBOSE (DEBUG, fprintf (stderr, "read %d bytes\n", nread)); + VERBOSE (DEBUG, fprintf (stderr, "read %d bytes\n", (int)nread)); if (nread <= 0) { break; } size_t nwritten = fwrite (buffer, 1, nread, fddest); - VERBOSE (DEBUG, fprintf (stderr, "wrote %d bytes\n", nwritten)); + VERBOSE (DEBUG, fprintf (stderr, "wrote %d bytes\n", (int)nwritten)); if (nwritten != nread) { msg = strdupcat ("Can't write file '", dest, "'", NULL); } @@ -435,8 +435,13 @@ char *processcopy (char *dest, char *src) basename = (basename) ? basename + 1 : src; VERBOSE (DEBUG, fprintf (stderr, "basename '%s'\n", basename)); char *newdest = strdupcat (dest, SEPARATOR, basename, NULL); - VERBOSE (DEBUG, fprintf (stderr, "copy '%s' to '%s'\n", src, newdest)); - msg = _copyfile (newdest, src); + struct stat sb; + if (STAT (newdest, &sb) == 0) { + msg = strdupcat ("File '", newdest, "' already exists", NULL); + } else { + VERBOSE (DEBUG, fprintf (stderr, "copy '%s' to '%s'\n", src, newdest)); + msg = _copyfile (newdest, src); + } free (newdest); } } else { -- 2.30.2