mercurial/thirdparty/xdiff/xdiffi.c
changeset 36828 f33a87cf60cc
parent 36771 90f8fe72446c
child 36830 882657a9f768
equal deleted inserted replaced
36827:aff5996f3043 36828:f33a87cf60cc
  1060 
  1060 
  1061 
  1061 
  1062 static int xdl_call_hunk_func(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb,
  1062 static int xdl_call_hunk_func(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb,
  1063 			      xdemitconf_t const *xecfg)
  1063 			      xdemitconf_t const *xecfg)
  1064 {
  1064 {
       
  1065 	long p = xe->nprefix, s = xe->nsuffix;
  1065 	xdchange_t *xch, *xche;
  1066 	xdchange_t *xch, *xche;
  1066 
  1067 
  1067 	if (!xecfg->hunk_func)
  1068 	if (!xecfg->hunk_func)
  1068 		return -1;
  1069 		return -1;
  1069 
  1070 
  1071 		long i1 = 0, i2 = 0, n1 = xe->xdf1.nrec, n2 = xe->xdf2.nrec;
  1072 		long i1 = 0, i2 = 0, n1 = xe->xdf1.nrec, n2 = xe->xdf2.nrec;
  1072 		for (xch = xscr; xch; xch = xche->next) {
  1073 		for (xch = xscr; xch; xch = xche->next) {
  1073 			xche = xdl_get_hunk(&xch, xecfg);
  1074 			xche = xdl_get_hunk(&xch, xecfg);
  1074 			if (!xch)
  1075 			if (!xch)
  1075 				break;
  1076 				break;
       
  1077 			if (xch != xche)
       
  1078 				xdl_bug("xch != xche");
       
  1079 			xch->i1 += p;
       
  1080 			xch->i2 += p;
  1076 			if (xch->i1 > i1 || xch->i2 > i2) {
  1081 			if (xch->i1 > i1 || xch->i2 > i2) {
  1077 				if (xecfg->hunk_func(i1, xch->i1, i2, xch->i2, ecb->priv) < 0)
  1082 				if (xecfg->hunk_func(i1, xch->i1, i2, xch->i2, ecb->priv) < 0)
  1078 					return -1;
  1083 					return -1;
  1079 			}
  1084 			}
  1080 			i1 = xche->i1 + xche->chg1;
  1085 			i1 = xche->i1 + xche->chg1;
  1081 			i2 = xche->i2 + xche->chg2;
  1086 			i2 = xche->i2 + xche->chg2;
  1082 		}
  1087 		}
  1083 		if (xecfg->hunk_func(i1, n1, i2, n2, ecb->priv) < 0)
  1088 		if (xecfg->hunk_func(i1, n1 + p + s, i2, n2 + p + s,
       
  1089 				     ecb->priv) < 0)
  1084 			return -1;
  1090 			return -1;
  1085 	} else {
  1091 	} else {
  1086 		for (xch = xscr; xch; xch = xche->next) {
  1092 		for (xch = xscr; xch; xch = xche->next) {
  1087 			xche = xdl_get_hunk(&xch, xecfg);
  1093 			xche = xdl_get_hunk(&xch, xecfg);
  1088 			if (!xch)
  1094 			if (!xch)
  1089 				break;
  1095 				break;
  1090 			if (xecfg->hunk_func(
  1096 			if (xecfg->hunk_func(xch->i1 + p,
  1091 					xch->i1, xche->i1 + xche->chg1 - xch->i1,
  1097 					xche->i1 + xche->chg1 - xch->i1,
  1092 					xch->i2, xche->i2 + xche->chg2 - xch->i2,
  1098 					xch->i2 + p,
       
  1099 					xche->i2 + xche->chg2 - xch->i2,
  1093 					ecb->priv) < 0)
  1100 					ecb->priv) < 0)
  1094 				return -1;
  1101 				return -1;
  1095 		}
  1102 		}
  1096 	}
  1103 	}
  1097 	return 0;
  1104 	return 0;