aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDag-Erling Smørgrav <des@FreeBSD.org>2026-02-05 14:39:39 +0000
committerDag-Erling Smørgrav <des@FreeBSD.org>2026-02-05 14:39:39 +0000
commit55f160fb07eaee977c89bdee7bdd83f4d21f5adf (patch)
tree097b96215ca38f4bc668a63ad80642eea39bf374
parenta689bfa4e25af8307709dc12f75b0e02a65abf18 (diff)
diff: Print an error message on I/O error
If an error occurs while atomizing either file, immediately print an error message using the error code returned by the atomizer, and set the error bit in the exit status. PR: 292198 MFC after: 1 week Sponsored by: Klara, Inc. Reviewed by: thj, kevans Differential Revision: https://reviews.freebsd.org/D55109
-rw-r--r--usr.bin/diff/diffreg_new.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/usr.bin/diff/diffreg_new.c b/usr.bin/diff/diffreg_new.c
index f29e4ad8b9ed..29882923cd0e 100644
--- a/usr.bin/diff/diffreg_new.c
+++ b/usr.bin/diff/diffreg_new.c
@@ -158,6 +158,7 @@ diffreg_new(char *file1, char *file2, int flags, int capsicum)
const struct diff_config *cfg;
enum diffreg_algo algo;
cap_rights_t rights_ro;
+ int ret;
algo = DIFFREG_ALGO_MYERS_THEN_MYERS_DIVIDE;
@@ -219,12 +220,20 @@ diffreg_new(char *file1, char *file2, int flags, int capsicum)
if (flags & D_PROTOTYPE)
diff_flags |= DIFF_FLAG_SHOW_PROTOTYPES;
- if (diff_atomize_file(&left, cfg, f1, (uint8_t *)str1, st1.st_size, diff_flags)) {
+ ret = diff_atomize_file(&left, cfg, f1, (uint8_t *)str1, st1.st_size,
+ diff_flags);
+ if (ret != DIFF_RC_OK) {
+ warnc(ret, "%s", file1);
rc = D_ERROR;
+ status |= 2;
goto done;
}
- if (diff_atomize_file(&right, cfg, f2, (uint8_t *)str2, st2.st_size, diff_flags)) {
+ ret = diff_atomize_file(&right, cfg, f2, (uint8_t *)str2, st2.st_size,
+ diff_flags);
+ if (ret != DIFF_RC_OK) {
+ warnc(ret, "%s", file2);
rc = D_ERROR;
+ status |= 2;
goto done;
}