cp,mv: fix -t DIR option

When the '-t DIR' option is used the loop over the remaining
arguments should terminate when a NULL pointer is reached.

function                                             old     new   delta
mv_main                                              585     590      +5
cp_main                                              492     496      +4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 9/0)                 Total: 9 bytes

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Ron Yorston 2021-06-24 15:08:15 +01:00 committed by Denys Vlasenko
parent 294d0c85ad
commit a84bbc5425
3 changed files with 20 additions and 4 deletions

View File

@ -252,7 +252,7 @@ int cp_main(int argc, char **argv)
} }
} }
} }
/* else: last is DIR from "t -DIR" */ /* else: last is DIR from "-t DIR" */
while (1) { while (1) {
#if ENABLE_FEATURE_CP_LONG_OPTIONS #if ENABLE_FEATURE_CP_LONG_OPTIONS
@ -274,7 +274,7 @@ int cp_main(int argc, char **argv)
if (copy_file(*argv, dest, flags) < 0) { if (copy_file(*argv, dest, flags) < 0) {
status = EXIT_FAILURE; status = EXIT_FAILURE;
} }
if (*++argv == last) { if (!*++argv || *argv == last) {
/* possibly leaking dest... */ /* possibly leaking dest... */
break; break;
} }

View File

@ -108,7 +108,7 @@ int mv_main(int argc, char **argv)
/* else: fall through into "do { move SRC to DIR/SRC } while" loop */ /* else: fall through into "do { move SRC to DIR/SRC } while" loop */
} }
} }
/* else: last is DIR from "t -DIR" */ /* else: last is DIR from "-t DIR" */
do { do {
dest = concat_path_file(last, bb_get_last_path_component_strip(*argv)); dest = concat_path_file(last, bb_get_last_path_component_strip(*argv));
@ -185,7 +185,7 @@ int mv_main(int argc, char **argv)
if (dest != last) { if (dest != last) {
free((void *) dest); free((void *) dest);
} }
} while (*++argv != last); } while (*++argv && *argv != last);
return status; return status;
} }

View File

@ -0,0 +1,16 @@
echo file number one > file1
echo file number two > file2
ln -s file2 link1
mkdir dir1
TZ=UTC0 touch -d '2000-01-30 05:24:08' dir1/file3
mkdir there
busybox mv -t there file1 file2 link1 dir1
test -f there/file1
test -f there/file2
test -f there/dir1/file3
test -L there/link1
test xfile2 = x`readlink there/link1`
test ! -e file1
test ! -e file2
test ! -e link1
test ! -e dir1/file3