[PATCH 02/10] xdiff: make classic diff explicit by creating xdl_do_classic_diff()
- From
Ezekiel Newren via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Jan 2, 2026, 18:52 UTC
- Message-ID
- <9bd01bce9f0763d9dcc962ff94fcda36346bafc4.1767379944.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.2156.git.git.1767379944.gitgitgadget@gmail.com>
From: Ezekiel Newren <ezekielnewren@gmail.com>
Later patches will prepare xdl_cleanup_records() to be moved into xdiffi.c since only the classic diff uses that function.
Signed-off-by: Ezekiel Newren <ezekielnewren@gmail.com> --- xdiff/xdiffi.c | 43 +++++++++++++++++++++++++++---------------- xdiff/xdiffi.h | 1 + 2 files changed, 28 insertions(+), 16 deletions(-)
diff --git a/xdiff/xdiffi.c b/xdiff/xdiffi.c index 4376f943db..e3196c7245 100644 --- a/xdiff/xdiffi.c +++ b/xdiff/xdiffi.c @@ -311,26 +311,13 @@ int xdl_recs_cmp(xdfile_t *xdf1, long off1, long lim1, } -int xdl_do_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp, - xdfenv_t *xe) { +int xdl_do_classic_diff(xdfenv_t *xe, uint64_t flags) +{ long ndiags; long *kvd, *kvdf, *kvdb; xdalgoenv_t xenv; int res; - if (xdl_prepare_env(mf1, mf2, xpp, xe) < 0) - return -1; - - if (XDF_DIFF_ALG(xpp->flags) == XDF_PATIENCE_DIFF) { - res = xdl_do_patience_diff(xpp, xe); - goto out; - } - - if (XDF_DIFF_ALG(xpp->flags) == XDF_HISTOGRAM_DIFF) { - res = xdl_do_histogram_diff(xpp, xe); - goto out; - } - /* * Allocate and setup K vectors to be used by the differential * algorithm. @@ -355,9 +342,33 @@ int xdl_do_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp, xenv.heur_min = XDL_HEUR_MIN_COST; res = xdl_recs_cmp(&xe->xdf1, 0, xe->xdf1.nreff, &xe->xdf2, 0, xe->xdf2.nreff, - kvdf, kvdb, (xpp->flags & XDF_NEED_MINIMAL) != 0, + kvdf, kvdb, (flags & XDF_NEED_MINIMAL) != 0, &xenv); + xdl_free(kvd); + + return res; +} + + +int xdl_do_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp, + xdfenv_t *xe) { + int res; + + if (xdl_prepare_env(mf1, mf2, xpp, xe) < 0) + return -1; + + if (XDF_DIFF_ALG(xpp->flags) == XDF_PATIENCE_DIFF) { + res = xdl_do_patience_diff(xpp, xe); + goto out; + } + + if (XDF_DIFF_ALG(xpp->flags) == XDF_HISTOGRAM_DIFF) { + res = xdl_do_histogram_diff(xpp, xe); + goto out; + } + + res = xdl_do_classic_diff(xe, xpp->flags); out: if (res < 0) xdl_free_env(xe); diff --git a/xdiff/xdiffi.h b/xdiff/xdiffi.h index 49e52c67f9..8bf4c20373 100644 --- a/xdiff/xdiffi.h +++ b/xdiff/xdiffi.h @@ -42,6 +42,7 @@ typedef struct s_xdchange { int xdl_recs_cmp(xdfile_t *xdf1, long off1, long lim1, xdfile_t *xdf2, long off2, long lim2, long *kvdf, long *kvdb, int need_min, xdalgoenv_t *xenv); +int xdl_do_classic_diff(xdfenv_t *xe, uint64_t flags); int xdl_do_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp, xdfenv_t *xe); int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags);
-- gitgitgadget