git: 9d10b4d2c9e8 - main - install: drop obsolete file size limit for -C
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 11 Jun 2026 01:53:01 UTC
The branch main has been updated by ray:
URL: https://cgit.FreeBSD.org/src/commit/?id=9d10b4d2c9e86d8f6ff1b654f468381a4a4cad6d
commit 9d10b4d2c9e86d8f6ff1b654f468381a4a4cad6d
Author: Aleksandr Rybalko <ray@FreeBSD.org>
AuthorDate: 2026-06-08 14:32:05 +0000
Commit: Aleksandr Rybalko <ray@FreeBSD.org>
CommitDate: 2026-06-11 01:52:12 +0000
install: drop obsolete file size limit for -C
Removes the file size limit for -C comparisons. The limit was
meant to prevent oversized mmap allocations, which is no longer
relevant as mmap is no longer used here (removed by
a0439a1b820fa0e742c00d095f5f5c06f5f19432, review D44809).
Credit to bdrewery.
See: https://reviews.freebsd.org/D57230
Reviewed by: bdrewery, glebius, ziaee
Approved by: glebius (mentor)
Obtained from: Fudo Security
MFC after: 2 weeks
Sponsored by: Fudo Security
Differential Revision: https://reviews.freebsd.org/D57503
---
usr.bin/xinstall/Makefile | 2 +-
usr.bin/xinstall/install.1 | 13 +-----
usr.bin/xinstall/xinstall.c | 103 +++++++++++++++++++-------------------------
3 files changed, 47 insertions(+), 71 deletions(-)
diff --git a/usr.bin/xinstall/Makefile b/usr.bin/xinstall/Makefile
index c05a50420c82..fd95b97160fe 100644
--- a/usr.bin/xinstall/Makefile
+++ b/usr.bin/xinstall/Makefile
@@ -11,7 +11,7 @@ MAN= install.1
CFLAGS+= -I${SRCTOP}/contrib/mtree
CFLAGS+= -I${SRCTOP}/lib/libnetbsd
-LIBADD= md util
+LIBADD= md
CFLAGS+= -DWITH_MD5 -DWITH_RIPEMD160
.ifdef BOOTSTRAPPING
diff --git a/usr.bin/xinstall/install.1 b/usr.bin/xinstall/install.1
index 77b928d022db..c6a55632891c 100644
--- a/usr.bin/xinstall/install.1
+++ b/usr.bin/xinstall/install.1
@@ -33,7 +33,7 @@
.Nd install binaries
.Sh SYNOPSIS
.Nm
-.Op Fl bCcpSsUvz
+.Op Fl bCcpSsUv
.Op Fl B Ar suffix
.Op Fl D Ar destdir
.Op Fl f Ar flags
@@ -45,10 +45,9 @@
.Op Fl N Ar dbdir
.Op Fl o Ar owner
.Op Fl T Ar tags
-.Op Fl z Ar size
.Ar file1 file2
.Nm
-.Op Fl bCcpSsUvz
+.Op Fl bCcpSsUv
.Op Fl B Ar suffix
.Op Fl D Ar destdir
.Op Fl f Ar flags
@@ -60,7 +59,6 @@
.Op Fl N Ar dbdir
.Op Fl o Ar owner
.Op Fl T Ar tags
-.Op Fl z Ar size
.Ar file1 ... fileN directory
.Nm
.Fl d
@@ -273,13 +271,6 @@ Cause
.Nm
to be verbose,
showing files as they are installed or backed up.
-.It Fl z Ar maxsize
-Limit the comparison feature of
-.Fl C
-to files no larger than
-.Ar maxsize .
-Files exceeding this limit bypass the comparison step and are directly overwritten.
-The default maximum size is 128MiB.
.El
.Pp
By default,
diff --git a/usr.bin/xinstall/xinstall.c b/usr.bin/xinstall/xinstall.c
index facdcb737c41..74ad614027f4 100644
--- a/usr.bin/xinstall/xinstall.c
+++ b/usr.bin/xinstall/xinstall.c
@@ -57,7 +57,6 @@
#include <string.h>
#include <sysexits.h>
#include <unistd.h>
-#include <util.h>
#include <vis.h>
#include "mtree.h"
@@ -88,8 +87,6 @@
#define HAVE_STRUCT_STAT_ST_FLAGS 0
#endif
-#define MAX_CMP_SIZE (128 * 1024 * 1024)
-
#define LN_ABSOLUTE 0x01
#define LN_RELATIVE 0x02
#define LN_HARD 0x04
@@ -138,7 +135,6 @@ static FILE *metafp;
static const char *group, *owner;
static const char *suffix = BACKUP_SUFFIX;
static char *destdir, *digest, *fflags, *metafile, *tags;
-static size_t max_compare_size = MAX_CMP_SIZE;
static int compare(int, const char *, size_t, int, const char *, size_t,
char **);
@@ -170,13 +166,12 @@ main(int argc, char *argv[])
u_int iflags;
char *p;
const char *to_name;
- uint64_t num;
fset = 0;
iflags = 0;
set = NULL;
group = owner = NULL;
- while ((ch = getopt(argc, argv, "B:bCcD:df:g:h:l:M:m:N:o:pSsT:Uvz:")) !=
+ while ((ch = getopt(argc, argv, "B:bCcD:df:g:h:l:M:m:N:o:pSsT:Uv")) !=
-1)
switch((char)ch) {
case 'B':
@@ -273,13 +268,6 @@ main(int argc, char *argv[])
case 'v':
verbose = 1;
break;
- case 'z':
- if (expand_number(optarg, &num) != 0 || num == 0) {
- errx(EX_USAGE, "invalid max compare filesize:"
- " %s", optarg);
- }
- max_compare_size = num;
- break;
case '?':
default:
usage();
@@ -1099,8 +1087,11 @@ compare(int from_fd, const char *from_name __unused, size_t from_len,
int to_fd, const char *to_name __unused, size_t to_len,
char **dresp)
{
- int rv;
+ static char *buf, *buf1, *buf2;
+ static size_t bufsize;
int do_digest;
+ int n1, n2;
+ int rv;
DIGEST_CTX ctx;
if (from_len != to_len)
@@ -1108,53 +1099,47 @@ compare(int from_fd, const char *from_name __unused, size_t from_len,
do_digest = (digesttype != DIGEST_NONE && dresp != NULL &&
*dresp == NULL);
- if (from_len <= max_compare_size) {
- static char *buf, *buf1, *buf2;
- static size_t bufsize;
- int n1, n2;
- if (do_digest)
- digest_init(&ctx);
+ if (do_digest)
+ digest_init(&ctx);
- if (buf == NULL) {
- /*
- * Note that buf and bufsize are static. If
- * malloc() fails, it will fail at the start
- * and not copy only some files.
- */
- if (sysconf(_SC_PHYS_PAGES) > PHYSPAGES_THRESHOLD)
- bufsize = MIN(BUFSIZE_MAX, MAXPHYS * 8);
+ if (buf == NULL) {
+ /*
+ * Note that buf and bufsize are static. If
+ * malloc() fails, it will fail at the start
+ * and not copy only some files.
+ */
+ if (sysconf(_SC_PHYS_PAGES) > PHYSPAGES_THRESHOLD)
+ bufsize = MIN(BUFSIZE_MAX, MAXPHYS * 8);
+ else
+ bufsize = BUFSIZE_SMALL;
+ buf = malloc(bufsize * 2);
+ if (buf == NULL)
+ err(1, "Not enough memory");
+ buf1 = buf;
+ buf2 = buf + bufsize;
+ }
+
+ rv = 0;
+ lseek(from_fd, 0, SEEK_SET);
+ lseek(to_fd, 0, SEEK_SET);
+ while (rv == 0) {
+ n1 = read(from_fd, buf1, bufsize);
+ if (n1 == 0)
+ break; /* EOF */
+ else if (n1 > 0) {
+ n2 = read(to_fd, buf2, n1);
+ if (n2 == n1)
+ rv = memcmp(buf1, buf2, n1);
else
- bufsize = BUFSIZE_SMALL;
- buf = malloc(bufsize * 2);
- if (buf == NULL)
- err(1, "Not enough memory");
- buf1 = buf;
- buf2 = buf + bufsize;
- }
- rv = 0;
- lseek(from_fd, 0, SEEK_SET);
- lseek(to_fd, 0, SEEK_SET);
- while (rv == 0) {
- n1 = read(from_fd, buf1, bufsize);
- if (n1 == 0)
- break; /* EOF */
- else if (n1 > 0) {
- n2 = read(to_fd, buf2, n1);
- if (n2 == n1)
- rv = memcmp(buf1, buf2, n1);
- else
- rv = 1; /* out of sync */
- } else
- rv = 1; /* read failure */
- if (do_digest)
- digest_update(&ctx, buf1, n1);
- }
- lseek(from_fd, 0, SEEK_SET);
- lseek(to_fd, 0, SEEK_SET);
- } else {
- rv = 1; /* don't bother in this case */
+ rv = 1; /* out of sync */
+ } else
+ rv = 1; /* read failure */
+ if (do_digest)
+ digest_update(&ctx, buf1, n1);
}
+ lseek(from_fd, 0, SEEK_SET);
+ lseek(to_fd, 0, SEEK_SET);
if (do_digest) {
if (rv == 0)
@@ -1500,11 +1485,11 @@ usage(void)
{
(void)fprintf(stderr,
"usage: install [-bCcpSsUv] [-f flags] [-g group] [-m mode] [-o owner]\n"
-" [-M log] [-D dest] [-h hash] [-T tags] [-z maxcmpsize]\n"
+" [-M log] [-D dest] [-h hash] [-T tags]\n"
" [-B suffix] [-l linkflags] [-N dbdir]\n"
" file1 file2\n"
" install [-bCcpSsUv] [-f flags] [-g group] [-m mode] [-o owner]\n"
-" [-M log] [-D dest] [-h hash] [-T tags] [-z maxcmpsize]\n"
+" [-M log] [-D dest] [-h hash] [-T tags]\n"
" [-B suffix] [-l linkflags] [-N dbdir]\n"
" file1 ... fileN directory\n"
" install -dU [-vU] [-g group] [-m mode] [-N dbdir] [-o owner]\n"