mercurial/thirdparty/xdiff/xdiffi.c
changeset 36820 f33a87cf60cc
parent 36763 90f8fe72446c
child 36822 882657a9f768
--- a/mercurial/thirdparty/xdiff/xdiffi.c	Fri Mar 09 14:30:15 2018 -0800
+++ b/mercurial/thirdparty/xdiff/xdiffi.c	Wed Mar 07 14:45:31 2018 -0800
@@ -1062,6 +1062,7 @@
 static int xdl_call_hunk_func(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb,
 			      xdemitconf_t const *xecfg)
 {
+	long p = xe->nprefix, s = xe->nsuffix;
 	xdchange_t *xch, *xche;
 
 	if (!xecfg->hunk_func)
@@ -1073,6 +1074,10 @@
 			xche = xdl_get_hunk(&xch, xecfg);
 			if (!xch)
 				break;
+			if (xch != xche)
+				xdl_bug("xch != xche");
+			xch->i1 += p;
+			xch->i2 += p;
 			if (xch->i1 > i1 || xch->i2 > i2) {
 				if (xecfg->hunk_func(i1, xch->i1, i2, xch->i2, ecb->priv) < 0)
 					return -1;
@@ -1080,16 +1085,18 @@
 			i1 = xche->i1 + xche->chg1;
 			i2 = xche->i2 + xche->chg2;
 		}
-		if (xecfg->hunk_func(i1, n1, i2, n2, ecb->priv) < 0)
+		if (xecfg->hunk_func(i1, n1 + p + s, i2, n2 + p + s,
+				     ecb->priv) < 0)
 			return -1;
 	} else {
 		for (xch = xscr; xch; xch = xche->next) {
 			xche = xdl_get_hunk(&xch, xecfg);
 			if (!xch)
 				break;
-			if (xecfg->hunk_func(
-					xch->i1, xche->i1 + xche->chg1 - xch->i1,
-					xch->i2, xche->i2 + xche->chg2 - xch->i2,
+			if (xecfg->hunk_func(xch->i1 + p,
+					xche->i1 + xche->chg1 - xch->i1,
+					xch->i2 + p,
+					xche->i2 + xche->chg2 - xch->i2,
 					ecb->priv) < 0)
 				return -1;
 		}