xinstall: Fix broken memmove with -t
memmove moves a number of bytes, not pointers, so if you passed a number
of arguments that is larger than the pointer byte size, you could
end up crashing or skipping the install of a file and installing another
twice.
Also, argv was never decreased to match the moved arguments, so the -t
parameter was added in the NULL argv slot.
diff --git a/xinstall.c b/xinstall.c
index 70d7097..38636f1 100644
--- a/xinstall.c
+++ b/xinstall.c
@@ -219,7 +219,7 @@
mode = parsemode(mflag, mode, 0);
if (tflag) {
- memmove(argv - 1, argv, argc);
+ argv = memmove(argv - 1, argv, argc * sizeof(*argv));
argv[argc++] = tflag;
}
if (tflag || argc > 2) {