Commit Diff


commit - a551f2158d980464de9ecc41bab55ff7143103d7
commit + 57ee5d5084c5c07c321352b7412a51d2f89ef298
blob - 2d7faf8152fa2b3018861ac5e044c4f355e049ed
blob + 9e996be8927905881cbb34dd4115ed38a682c390
--- lib/diff3.c
+++ lib/diff3.c
@@ -263,8 +263,8 @@ done:
  * For merge(1).
  */
 const struct got_error *
-got_merge_diff3(int outfd, const char *p1, const char *p2, const char *p3,
-    const char *label1, const char *label3)
+got_merge_diff3(int *overlapcnt, int outfd, const char *p1, const char *p2,
+    const char *p3, const char *label1, const char *label3)
 {
 	const struct got_error *err = NULL;
 	char *dp13, *dp23, *path1, *path2, *path3;
@@ -275,6 +275,8 @@ got_merge_diff3(int outfd, const char *p1, const char 
 	struct diff3_state *d3s;
 	int i;
 
+	*overlapcnt = 0;
+
 	SLIST_INIT(&temp_files);
 
 	d3s = calloc(1, sizeof(*d3s));
@@ -399,11 +401,12 @@ out:
 		if (d3s->fp[i])
 			fclose(d3s->fp[i]);
 	}
-	free(d3s);
 	if (err == NULL && diffb) {
 		if (buf_write_fd(diffb, outfd) < 0)
 			err = got_error_from_errno();
+		*overlapcnt = d3s->overlapcnt;
 	}
+	free(d3s);
 	buf_free(diffb);
 	return err;
 }
blob - 0db51712a8cb4d20389103e6179247b5213af4ed
blob + 66906a1b1f3beff3ef0f12437995a1d63c08ed99
--- lib/got_lib_diff.h
+++ lib/got_lib_diff.h
@@ -140,5 +140,5 @@ const struct got_error *got_diff_blob_lines_changed(st
     struct got_blob_object *, struct got_blob_object *);
 void got_diff_free_changes(struct got_diff_changes *);
 
-const struct got_error *got_merge_diff3(int, const char *, const char *,
+const struct got_error *got_merge_diff3(int *, int, const char *, const char *,
     const char *, const char *, const char *);