Commit Diff


commit - d3f36e7e5a4e3424545f38223409b5a246de171a
commit + 7673568311fd48da1f7f7c2b331a72a4c8744f83
blob - cb18b5a459b25b1db5f77fedf61b9ef8d48ac748
blob + 54204de96faa60b41cbc55abd7282fb2bd20eef5
--- lib/diffreg.c
+++ lib/diffreg.c
@@ -291,6 +291,7 @@ got_diffreg(int *rval, FILE *f1, FILE *f2, int flags,
 	ds->lastline = 0;
 	ds->lastmatchline = 0;
 	ds->context_vec_ptr = ds->context_vec_start - 1;
+	ds->max_context = 64;
 	if (flags & D_IGNORECASE)
 		ds->chrtran = cup2low;
 	else
@@ -966,7 +967,6 @@ change(FILE *outfile, struct got_diff_state *ds, struc
     const char *file1, FILE *f1, const char *file2, FILE *f2,
     int a, int b, int c, int d, int *pflags)
 {
-	static size_t max_context = 64;
 	int i;
 
 restart:
@@ -1013,14 +1013,16 @@ proceed:
 		 * Allocate change records as needed.
 		 */
 		if (ds->context_vec_ptr == ds->context_vec_end - 1) {
-			ptrdiff_t offset = ds->context_vec_ptr - ds->context_vec_start;
-			max_context <<= 1;
+			ptrdiff_t offset;
+			offset = ds->context_vec_ptr - ds->context_vec_start;
+			ds->max_context <<= 1;
 			ds->context_vec_start =
-			    reallocarray(ds->context_vec_start, max_context,
+			    reallocarray(ds->context_vec_start, ds->max_context,
 				sizeof(*ds->context_vec_start));
 			if (ds->context_vec_start == NULL)
 				return (-1);
-			ds->context_vec_end = ds->context_vec_start + max_context;
+			ds->context_vec_end = ds->context_vec_start +
+			    ds->max_context;
 			ds->context_vec_ptr = ds->context_vec_start + offset;
 		}
 		if (ds->anychange == 0) {
blob - d0351038fd1aa497adf26fcd0cc40fab666f7061
blob + ffaacf32c07bdd3d1ead6b93b60f8cddeb3a24a1
--- lib/got_lib_diff.h
+++ lib/got_lib_diff.h
@@ -107,6 +107,7 @@ struct got_diff_state {
 	int lastline;
 	int lastmatchline;
 	struct stat stb1, stb2;
+	size_t max_context;
 };
 
 struct got_diff_args {