[PATCH 1/2 V2] copyfilerange: (usage) correct the markup and improve the wording

Benno Schulenberg <[email protected]> Thu, 12 Mar 2026 16:55:31 +0100
Newsgroups org.kernel.vger.util-linux
Message-ID <[email protected]>
The <source>, <destination>, and <range> arguments are required,
so do not mark them as optional (with the square brackets).
Also, trim the redundant lines about the source and destination
files, improve the explanation for the <range> argument and put
it after the options, and keep the text within 80 columns.

Furthermore, list the short options first (as is custom), and
match the indentaion of the -h and -V options to the others.

CC: Dick Marinus <[email protected]>
Signed-off-by: Benno Schulenberg <[email protected]>
---
V2: Use the standard USAGE_ARGUMENTS header instead of an
    unusually placed lone paragraph.
---
 misc-utils/copyfilerange.c | 22 ++++++++++------------
 1 file changed, 10 insertions(+), 12 deletions(-)

diff --git a/misc-utils/copyfilerange.c b/misc-utils/copyfilerange.c
index 20f0373bd..5ee562d22 100644
--- a/misc-utils/copyfilerange.c
+++ b/misc-utils/copyfilerange.c
@@ -55,25 +55,23 @@ static void __attribute__((__noreturn__)) usage(void)
 	FILE *out = stdout;
 	fputs(USAGE_HEADER, out);
 	fprintf(out,
-		_(" %1$s [options] [<source>] [<destination>] [<range>...]\n"),
+		_(" %1$s [options] <source> <destination> <range>...\n"),
 		program_invocation_short_name);
 
 	fputs(USAGE_SEPARATOR, out);
-	fputsln(_("Copy file ranges from source to destination file."), out);
-
-	fputs(USAGE_SEPARATOR, out);
-	fputsln(_(" source                      source filename"), out);
-	fputsln(_(" destination                 destination filename"), out);
-	fputsln(_(" range                       source_offset:dest_offset:length, all values are in bytes"), out);
-	fputsln(_("                             if length is set to 0 as much as available will be copied"), out);
-	fputsln(_("                             when the offset is omitted the last file position is used"), out);
+	fputsln(_("Copy the specified range(s) from source to destination file."), out);
 
 	fputs(USAGE_OPTIONS, out);
-	fputsln(_(" --ranges, -r filename       read range(s) separated by newlines from filename"), out);
-	fputsln(_(" --verbose, -v               verbose mode"), out);
+	fputsln(_(" -r, --ranges <file>     read ranges separated by newlines from this file"), out);
+	fputsln(_(" -v, --verbose           verbose mode"), out);
 
 	fputs(USAGE_SEPARATOR, out);
-	fprintf(out, USAGE_HELP_OPTIONS(16));
+	fprintf(out, USAGE_HELP_OPTIONS(25));
+
+	fputs(USAGE_ARGUMENTS, out);
+	fputsln(_(" <range> is of the form <source_offset>:<destination_offset>:<length>,\n"
+	          " with all values in bytes. If <length> is 0, as much data as available\n"
+	          " is copied. When an offset is omitted, the last file position is used."), out);
 
 	fprintf(out, USAGE_MAN_TAIL("copyfilerange(1)"));
 	exit(EXIT_SUCCESS);
-- 
2.53.0