cp: Drop test helper

Now that stat(1) can report whether a file is sparse, we no longer need
a helper program for our tests.

Sponsored by:	Klara, Inc.
Reviewed by:	markj
Differential Revision:	https://reviews.freebsd.org/D52482
This commit is contained in:
Dag-Erling Smørgrav
2025-09-16 15:38:03 +02:00
parent 1a7a067da4
commit 9b8224b950
4 changed files with 4 additions and 76 deletions
+3
View File
@@ -51,6 +51,9 @@
# xargs -n1 | sort | uniq -d; # xargs -n1 | sort | uniq -d;
# done # done
# 20250911: This tool is no longer needed
OLD_FILES+=usr/tests/bin/cp/sparse
# 20250826: Remove a misspelled manual # 20250826: Remove a misspelled manual
OLD_FILES+=usr/share/man/man3/sysdecode_syscallnames.3.gz OLD_FILES+=usr/share/man/man3/sysdecode_syscallnames.3.gz
-2
View File
@@ -1,7 +1,5 @@
PACKAGE= tests PACKAGE= tests
ATF_TESTS_SH= cp_test ATF_TESTS_SH= cp_test
PROGS+= sparse
BINDIR= ${TESTSDIR}
.include <bsd.test.mk> .include <bsd.test.mk>
+1 -1
View File
@@ -384,7 +384,7 @@ samefile_body()
file_is_sparse() file_is_sparse()
{ {
atf_check ${0%/*}/sparse "$1" atf_check -o match:"^[0-9]+-[0-9]" stat -h "$1"
} }
files_are_equal() files_are_equal()
-73
View File
@@ -1,73 +0,0 @@
/*-
* Copyright (c) 2023 Klara, Inc.
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <err.h>
#include <fcntl.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <sysexits.h>
#include <unistd.h>
static bool verbose;
/*
* Returns true if the file named by its argument is sparse, i.e. if
* seeking to SEEK_HOLE returns a different value than seeking to
* SEEK_END.
*/
static bool
sparse(const char *filename)
{
off_t hole, end;
int fd;
if ((fd = open(filename, O_RDONLY)) < 0 ||
(hole = lseek(fd, 0, SEEK_HOLE)) < 0 ||
(end = lseek(fd, 0, SEEK_END)) < 0)
err(1, "%s", filename);
close(fd);
if (end > hole) {
if (verbose)
printf("%s: hole at %zu\n", filename, (size_t)hole);
return (true);
}
return (false);
}
static void
usage(void)
{
fprintf(stderr, "usage: sparse [-v] file [...]\n");
exit(EX_USAGE);
}
int
main(int argc, char *argv[])
{
int opt, rv;
while ((opt = getopt(argc, argv, "v")) != -1) {
switch (opt) {
case 'v':
verbose = true;
break;
default:
usage();
break;
}
}
argc -= optind;
argv += optind;
if (argc == 0)
usage();
rv = EXIT_SUCCESS;
while (argc-- > 0)
if (!sparse(*argv++))
rv = EXIT_FAILURE;
exit(rv);
}