summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhillip Wood <phillip.wood@dunelm.org.uk>2026-05-04 15:06:21 +0100
committerJunio C Hamano <gitster@pobox.com>2026-05-05 16:20:06 +0900
commitdca97e79bbf75f27602fe277344bfebebed82bb9 (patch)
tree821d53cd3ebd274e61fe63ec25cf01e3a4217129
parentc8eb18f58607057a812654bdfca3e6b47bd0ffe4 (diff)
xdiff: reduce the size of array
When the myers algorithm is selected the input files are pre-processed to remove any common prefix and suffix and any lines that appear in only one file. This requires a map to be created between the lines that are processed by the myers algorithm and the lines in the original file. That map does not include the common lines at the beginning and end of the files but the array is allocated to be the size of the whole file. Move the allocation into xdl_cleanup_records() where the map is populated and we know how big it needs to be. Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--xdiff/xprepare.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/xdiff/xprepare.c b/xdiff/xprepare.c
index 7a29e5fc47..11bada2608 100644
--- a/xdiff/xprepare.c
+++ b/xdiff/xprepare.c
@@ -171,12 +171,6 @@ static int xdl_prepare_ctx(unsigned int pass, mmfile_t *mf, long narec, xpparam_
if (!XDL_CALLOC_ARRAY(xdf->changed, xdf->nrec + 2))
goto abort;
- if ((XDF_DIFF_ALG(xpp->flags) != XDF_PATIENCE_DIFF) &&
- (XDF_DIFF_ALG(xpp->flags) != XDF_HISTOGRAM_DIFF)) {
- if (!XDL_ALLOC_ARRAY(xdf->reference_index, xdf->nrec + 1))
- goto abort;
- }
-
xdf->changed += 1;
xdf->nreff = 0;
xdf->dstart = 0;
@@ -283,7 +277,10 @@ static int xdl_cleanup_records(xdlclassifier_t *cf, xdfile_t *xdf1, xdfile_t *xd
* changed[i] should remain false, or become true.
*/
if (!XDL_CALLOC_ARRAY(action1, len1) ||
- !XDL_CALLOC_ARRAY(action2, len2)) {
+ !XDL_CALLOC_ARRAY(action2, len2) ||
+ !XDL_ALLOC_ARRAY(xdf1->reference_index, len1) ||
+ !XDL_ALLOC_ARRAY(xdf2->reference_index, len2))
+ {
ret = -1;
goto cleanup;
}