cmp(1): Provide some long options

These match GNU cmp(1) for compatibility where applicable.

Future work might implement the -i option from GNU cmp(1) to express skip
either in terms of both files or of the form "SKIP1:SKIP2" rather than
specifying them as additional arguments to cmp(1).

MFC after:	1 month
This commit is contained in:
kevans 2018-05-02 01:32:34 +00:00
parent 01c874c7a2
commit 574503cb15
2 changed files with 13 additions and 4 deletions

View File

@ -31,7 +31,7 @@
.\" @(#)cmp.1 8.1 (Berkeley) 6/6/93
.\" $FreeBSD$
.\"
.Dd November 18, 2013
.Dd May 1, 2018
.Dt CMP 1
.Os
.Sh NAME
@ -59,10 +59,10 @@ The following options are available:
.Bl -tag -width indent
.It Fl h
Do not follow symbolic links.
.It Fl l
.It Fl l , Fl -verbose
Print the byte number (decimal) and the differing
byte values (octal) for each difference.
.It Fl s
.It Fl s , Fl -silent , Fl -quiet
Print nothing for differing files; return exit
status only.
.It Fl x

View File

@ -52,6 +52,7 @@ __FBSDID("$FreeBSD$");
#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <getopt.h>
#include <nl_types.h>
#include <stdio.h>
#include <stdlib.h>
@ -62,6 +63,14 @@ __FBSDID("$FreeBSD$");
int lflag, sflag, xflag, zflag;
static const struct option long_opts[] =
{
{"verbose", no_argument, NULL, 'l'},
{"silent", no_argument, NULL, 's'},
{"quiet", no_argument, NULL, 's'},
{NULL, no_argument, NULL, 0}
};
static void usage(void);
int
@ -75,7 +84,7 @@ main(int argc, char *argv[])
uint32_t fcntls;
oflag = O_RDONLY;
while ((ch = getopt(argc, argv, "hlsxz")) != -1)
while ((ch = getopt_long(argc, argv, "+hlsxz", long_opts, NULL)) != -1)
switch (ch) {
case 'h': /* Don't follow symlinks */
oflag |= O_NOFOLLOW;