@@ -315,16 +315,19 @@ int xdl_do_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
315315 long * kvd , * kvdf , * kvdb ;
316316 xdalgoenv_t xenv ;
317317 diffdata_t dd1 , dd2 ;
318+ int res ;
318319
319- if (XDF_DIFF_ALG (xpp -> flags ) == XDF_PATIENCE_DIFF )
320- return xdl_do_patience_diff (mf1 , mf2 , xpp , xe );
321-
322- if (XDF_DIFF_ALG (xpp -> flags ) == XDF_HISTOGRAM_DIFF )
323- return xdl_do_histogram_diff (mf1 , mf2 , xpp , xe );
320+ if (xdl_prepare_env (mf1 , mf2 , xpp , xe ) < 0 )
321+ return -1 ;
324322
325- if (xdl_prepare_env (mf1 , mf2 , xpp , xe ) < 0 ) {
323+ if (XDF_DIFF_ALG (xpp -> flags ) == XDF_PATIENCE_DIFF ) {
324+ res = xdl_do_patience_diff (xpp , xe );
325+ goto out ;
326+ }
326327
327- return -1 ;
328+ if (XDF_DIFF_ALG (xpp -> flags ) == XDF_HISTOGRAM_DIFF ) {
329+ res = xdl_do_histogram_diff (xpp , xe );
330+ goto out ;
328331 }
329332
330333 /*
@@ -334,7 +337,7 @@ int xdl_do_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
334337 * One is to store the forward path and one to store the backward path.
335338 */
336339 ndiags = xe -> xdf1 .nreff + xe -> xdf2 .nreff + 3 ;
337- if (!(kvd = ( long * ) xdl_malloc (( 2 * ndiags + 2 ) * sizeof ( long )) )) {
340+ if (!XDL_ALLOC_ARRAY (kvd , 2 * ndiags + 2 )) {
338341
339342 xdl_free_env (xe );
340343 return -1 ;
@@ -359,17 +362,15 @@ int xdl_do_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
359362 dd2 .rchg = xe -> xdf2 .rchg ;
360363 dd2 .rindex = xe -> xdf2 .rindex ;
361364
362- if (xdl_recs_cmp (& dd1 , 0 , dd1 .nrec , & dd2 , 0 , dd2 .nrec ,
363- kvdf , kvdb , (xpp -> flags & XDF_NEED_MINIMAL ) != 0 , & xenv ) < 0 ) {
364-
365- xdl_free (kvd );
366- xdl_free_env (xe );
367- return -1 ;
368- }
369-
365+ res = xdl_recs_cmp (& dd1 , 0 , dd1 .nrec , & dd2 , 0 , dd2 .nrec ,
366+ kvdf , kvdb , (xpp -> flags & XDF_NEED_MINIMAL ) != 0 ,
367+ & xenv );
370368 xdl_free (kvd );
369+ out :
370+ if (res < 0 )
371+ xdl_free_env (xe );
371372
372- return 0 ;
373+ return res ;
373374}
374375
375376
@@ -390,12 +391,9 @@ static xdchange_t *xdl_add_change(xdchange_t *xscr, long i1, long i2, long chg1,
390391}
391392
392393
393- static int recs_match (xrecord_t * rec1 , xrecord_t * rec2 , long flags )
394+ static int recs_match (xrecord_t * rec1 , xrecord_t * rec2 )
394395{
395- return (rec1 -> ha == rec2 -> ha &&
396- xdl_recmatch (rec1 -> ptr , rec1 -> size ,
397- rec2 -> ptr , rec2 -> size ,
398- flags ));
396+ return (rec1 -> ha == rec2 -> ha );
399397}
400398
401399/*
@@ -759,10 +757,10 @@ static inline int group_previous(xdfile_t *xdf, struct xdlgroup *g)
759757 * following group, expand this group to include it. Return 0 on success or -1
760758 * if g cannot be slid down.
761759 */
762- static int group_slide_down (xdfile_t * xdf , struct xdlgroup * g , long flags )
760+ static int group_slide_down (xdfile_t * xdf , struct xdlgroup * g )
763761{
764762 if (g -> end < xdf -> nrec &&
765- recs_match (xdf -> recs [g -> start ], xdf -> recs [g -> end ], flags )) {
763+ recs_match (xdf -> recs [g -> start ], xdf -> recs [g -> end ])) {
766764 xdf -> rchg [g -> start ++ ] = 0 ;
767765 xdf -> rchg [g -> end ++ ] = 1 ;
768766
@@ -780,10 +778,10 @@ static int group_slide_down(xdfile_t *xdf, struct xdlgroup *g, long flags)
780778 * into a previous group, expand this group to include it. Return 0 on success
781779 * or -1 if g cannot be slid up.
782780 */
783- static int group_slide_up (xdfile_t * xdf , struct xdlgroup * g , long flags )
781+ static int group_slide_up (xdfile_t * xdf , struct xdlgroup * g )
784782{
785783 if (g -> start > 0 &&
786- recs_match (xdf -> recs [g -> start - 1 ], xdf -> recs [g -> end - 1 ], flags )) {
784+ recs_match (xdf -> recs [g -> start - 1 ], xdf -> recs [g -> end - 1 ])) {
787785 xdf -> rchg [-- g -> start ] = 1 ;
788786 xdf -> rchg [-- g -> end ] = 0 ;
789787
@@ -839,7 +837,7 @@ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
839837 end_matching_other = -1 ;
840838
841839 /* Shift the group backward as much as possible: */
842- while (!group_slide_up (xdf , & g , flags ))
840+ while (!group_slide_up (xdf , & g ))
843841 if (group_previous (xdfo , & go ))
844842 xdl_bug ("group sync broken sliding up" );
845843
@@ -854,7 +852,7 @@ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
854852
855853 /* Now shift the group forward as far as possible: */
856854 while (1 ) {
857- if (group_slide_down (xdf , & g , flags ))
855+ if (group_slide_down (xdf , & g ))
858856 break ;
859857 if (group_next (xdfo , & go ))
860858 xdl_bug ("group sync broken sliding down" );
@@ -881,7 +879,7 @@ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
881879 * other file that it can align with.
882880 */
883881 while (go .end == go .start ) {
884- if (group_slide_up (xdf , & g , flags ))
882+ if (group_slide_up (xdf , & g ))
885883 xdl_bug ("match disappeared" );
886884 if (group_previous (xdfo , & go ))
887885 xdl_bug ("group sync broken sliding to match" );
@@ -924,7 +922,7 @@ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
924922 }
925923
926924 while (g .end > best_shift ) {
927- if (group_slide_up (xdf , & g , flags ))
925+ if (group_slide_up (xdf , & g ))
928926 xdl_bug ("best shift unreached" );
929927 if (group_previous (xdfo , & go ))
930928 xdl_bug ("group sync broken sliding to blank line" );
0 commit comments