Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 02 Mar 2026 08:52:11 +0000
From:      Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav <des@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: fe5341287c6c - main - diff3: Produce correct exit status
Message-ID:  <69a54fbb.21594.1713b21f@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by des:

URL: https://cgit.FreeBSD.org/src/commit/?id=fe5341287c6c9bacc18879b25ed72ceb42e1c811

commit fe5341287c6c9bacc18879b25ed72ceb42e1c811
Author:     Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2026-03-02 08:52:06 +0000
Commit:     Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2026-03-02 08:52:06 +0000

    diff3: Produce correct exit status
    
    Use exit status 2 for errors, 1 only to indicate that differences were
    found between the inputs (in some operating modes).
    
    MFC after:      1 week
    Sponsored by:   Klara, Inc.
    Reviewed by:    ngie, bapt
    Differential Revision:  https://reviews.freebsd.org/D55608
---
 usr.bin/diff3/diff3.1 | 17 ++++++++++++++++-
 usr.bin/diff3/diff3.c | 26 +++++++++++++-------------
 2 files changed, 29 insertions(+), 14 deletions(-)

diff --git a/usr.bin/diff3/diff3.1 b/usr.bin/diff3/diff3.1
index 9286a79e6ec6..8ca2d9f853af 100644
--- a/usr.bin/diff3/diff3.1
+++ b/usr.bin/diff3/diff3.1
@@ -27,7 +27,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd June 23, 2022
+.Dd March 1, 2026
 .Dt DIFF3 1
 .Os
 .Sh NAME
@@ -196,6 +196,21 @@ The lines beneath this notation are ranges of lines which are exclusively
 different in file
 .Va n .
 .El
+.Sh EXIT STATUS
+The
+.Nm
+utility exits with a status of 0 on success
+and >1 if an error occurred.
+Additionally, if the
+.Fl A ,
+.Fl E ,
+.Fl L ,
+.Fl m ,
+or
+.Fl X
+flags were specified,
+it exits with a status of 1 if conflicts were found.
+.El
 .Sh SEE ALSO
 .Xr diff 1 ,
 .Xr ed 1 ,
diff --git a/usr.bin/diff3/diff3.c b/usr.bin/diff3/diff3.c
index fce4d353af69..0f114163321f 100644
--- a/usr.bin/diff3/diff3.c
+++ b/usr.bin/diff3/diff3.c
@@ -202,7 +202,7 @@ strtoi(char *str, char **end)
 	if ((end != NULL && *end == str) ||
 	    num < 0 || num > INT_MAX ||
 	    errno == EINVAL || errno == ERANGE)
-		err(1, "error in diff output");
+		err(2, "error in diff output");
 	return (int)num;
 }
 
@@ -267,7 +267,7 @@ readin(int fd, struct diff **dd)
 		if (*p == ',')
 			d = strtoi(p + 1, &p);
 		if (*p != '\n')
-			errx(1, "error in diff output");
+			errx(2, "error in diff output");
 		if (kind == 'a')
 			a++;
 		else if (kind == 'c')
@@ -275,11 +275,11 @@ readin(int fd, struct diff **dd)
 		else if (kind == 'd')
 			c++;
 		else
-			errx(1, "error in diff output");
+			errx(2, "error in diff output");
 		b++;
 		d++;
 		if (b < a || d < c)
-			errx(1, "error in diff output");
+			errx(2, "error in diff output");
 		(*dd)[i].old.from = a;
 		(*dd)[i].old.to = b;
 		(*dd)[i].new.from = c;
@@ -287,7 +287,7 @@ readin(int fd, struct diff **dd)
 		if (i > 0) {
 			if ((*dd)[i].old.from < (*dd)[i - 1].old.to ||
 			    (*dd)[i].new.from < (*dd)[i - 1].new.to)
-				errx(1, "diff output out of order");
+				errx(2, "diff output out of order");
 		}
 	}
 	if (i > 0) {
@@ -564,7 +564,7 @@ skip(int i, int from, const char *pr)
 
 	for (n = 0; cline[i] < from - 1; n += j) {
 		if ((line = get_line(fp[i], &j)) == NULL)
-			errx(1, "logic error");
+			errx(2, "logic error");
 		if (pr != NULL)
 			printf("%s%s", Tflag == 1 ? "\t" : pr, line);
 		cline[i]++;
@@ -595,7 +595,7 @@ duplicate(struct range *r1, struct range *r2)
 			if (c == -1 && d == -1)
 				break;
 			if (c == -1 || d == -1)
-				errx(1, "logic error");
+				errx(2, "logic error");
 			nchar++;
 			if (c != d) {
 				repos(nchar);
@@ -652,7 +652,7 @@ printrange(FILE *p, struct range *r)
 		return;
 
 	if (r->from > r->to)
-		errx(1, "invalid print range");
+		errx(2, "invalid print range");
 
 	/*
 	 * XXX-THJ: We read through all of the file for each range printed.
@@ -900,27 +900,27 @@ increase(void)
 
 	p = reallocarray(d13, newsz, sizeof(*p));
 	if (p == NULL)
-		err(1, NULL);
+		err(2, NULL);
 	memset(p + szchanges, 0, incr * sizeof(*p));
 	d13 = p;
 	p = reallocarray(d23, newsz, sizeof(*p));
 	if (p == NULL)
-		err(1, NULL);
+		err(2, NULL);
 	memset(p + szchanges, 0, incr * sizeof(*p));
 	d23 = p;
 	p = reallocarray(de, newsz, sizeof(*p));
 	if (p == NULL)
-		err(1, NULL);
+		err(2, NULL);
 	memset(p + szchanges, 0, incr * sizeof(*p));
 	de = p;
 	q = reallocarray(overlap, newsz, 1);
 	if (q == NULL)
-		err(1, NULL);
+		err(2, NULL);
 	memset(q + szchanges, 0, incr * 1);
 	overlap = q;
 	s = reallocarray(de_delta, newsz, sizeof(*s));
 	if (s == NULL)
-		err(1, NULL);
+		err(2, NULL);
 	memset(s + szchanges, 0, incr * sizeof(*s));
 	de_delta = s;
 	szchanges = newsz;


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69a54fbb.21594.1713b21f>