Commit 2471f5c4e8ca4f48d632a04713cef4067f245c7e

Stefan Sperling 2022-01-06T19:20:52

sync files from diff.git b72f51ffc39028023059fc994542565691b669fa This fixes a scrolling problem in tog's diff view for diffs which contain lines of the form "Binary files %s and %s differ".

diff --git a/lib/diff_output_unidiff.c b/lib/diff_output_unidiff.c
index 5fc87f7..f3f4ad7 100644
--- a/lib/diff_output_unidiff.c
+++ b/lib/diff_output_unidiff.c
@@ -425,7 +425,8 @@ diff_output_unidiff(struct diff_output_info **output_info,
 	bool show_function_prototypes = (flags & DIFF_FLAG_SHOW_PROTOTYPES);
 	bool force_text = (flags & DIFF_FLAG_FORCE_TEXT_DATA);
 	bool have_binary = (atomizer_flags & DIFF_ATOMIZER_FOUND_BINARY_DATA);
-	int i;
+	off_t outoff = 0, *offp;
+	int rc, i;
 
 	if (!result)
 		return EINVAL;
@@ -447,9 +448,23 @@ diff_output_unidiff(struct diff_output_info **output_info,
 			if (t != CHUNK_MINUS && t != CHUNK_PLUS)
 				continue;
 
-			fprintf(dest, "Binary files %s and %s differ\n",
+			if (outinfo && outinfo->line_offsets.len > 0) {
+				unsigned int idx =
+				    outinfo->line_offsets.len - 1;
+				outoff = outinfo->line_offsets.head[idx];
+			}
+
+			rc = fprintf(dest, "Binary files %s and %s differ\n",
 			    diff_output_get_label_left(info),
 			    diff_output_get_label_right(info));
+			if (outinfo) {
+				ARRAYLIST_ADD(offp, outinfo->line_offsets);
+				if (offp == NULL)
+					return ENOMEM;
+				outoff += rc;
+				*offp = outoff;
+
+			}
 			break;
 		}