]> git.ipfire.org Git - thirdparty/git.git/commitdiff
xdiff: delete local variables and initialize/free xdfile_t directly
authorEzekiel Newren <ezekielnewren@gmail.com>
Fri, 26 Sep 2025 22:41:49 +0000 (22:41 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 26 Sep 2025 23:08:54 +0000 (16:08 -0700)
These local variables are essentially a hand-rolled additional
implementation of xdl_free_ctx() inlined into xdl_prepare_ctx(). Modify
the code to use the existing xdl_free_ctx() function so there aren't
two ways to free such variables.

Signed-off-by: Ezekiel Newren <ezekielnewren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
xdiff/xprepare.c

index 249bfa678f4268facbb6917faf8b8f7a7be0ba4a..96134c9fbfe2437b4d2f9163c9a920892f2b6288 100644 (file)
@@ -134,99 +134,81 @@ static int xdl_classify_record(unsigned int pass, xdlclassifier_t *cf, xrecord_t
 }
 
 
+static void xdl_free_ctx(xdfile_t *xdf)
+{
+       xdl_free(xdf->rhash);
+       xdl_free(xdf->rindex);
+       xdl_free(xdf->rchg - 1);
+       xdl_free(xdf->ha);
+       xdl_free(xdf->recs);
+       xdl_cha_free(&xdf->rcha);
+}
+
+
 static int xdl_prepare_ctx(unsigned int pass, mmfile_t *mf, long narec, xpparam_t const *xpp,
                           xdlclassifier_t *cf, xdfile_t *xdf) {
-       unsigned int hbits;
-       long nrec, hsize, bsize;
+       long bsize;
        unsigned long hav;
        char const *blk, *cur, *top, *prev;
        xrecord_t *crec;
-       xrecord_t **recs;
-       xrecord_t **rhash;
-       unsigned long *ha;
-       char *rchg;
-       long *rindex;
 
-       ha = NULL;
-       rindex = NULL;
-       rchg = NULL;
-       rhash = NULL;
-       recs = NULL;
+       xdf->ha = NULL;
+       xdf->rindex = NULL;
+       xdf->rchg = NULL;
+       xdf->rhash = NULL;
+       xdf->recs = NULL;
 
        if (xdl_cha_init(&xdf->rcha, sizeof(xrecord_t), narec / 4 + 1) < 0)
                goto abort;
-       if (!XDL_ALLOC_ARRAY(recs, narec))
+       if (!XDL_ALLOC_ARRAY(xdf->recs, narec))
                goto abort;
 
-       hbits = xdl_hashbits((unsigned int) narec);
-       hsize = 1 << hbits;
-       if (!XDL_CALLOC_ARRAY(rhash, hsize))
+       xdf->hbits = xdl_hashbits((unsigned int) narec);
+       if (!XDL_CALLOC_ARRAY(xdf->rhash, 1 << xdf->hbits))
                goto abort;
 
-       nrec = 0;
+       xdf->nrec = 0;
        if ((cur = blk = xdl_mmfile_first(mf, &bsize))) {
                for (top = blk + bsize; cur < top; ) {
                        prev = cur;
                        hav = xdl_hash_record(&cur, top, xpp->flags);
-                       if (XDL_ALLOC_GROW(recs, nrec + 1, narec))
+                       if (XDL_ALLOC_GROW(xdf->recs, xdf->nrec + 1, narec))
                                goto abort;
                        if (!(crec = xdl_cha_alloc(&xdf->rcha)))
                                goto abort;
                        crec->ptr = prev;
                        crec->size = (long) (cur - prev);
                        crec->ha = hav;
-                       recs[nrec++] = crec;
-                       if (xdl_classify_record(pass, cf, rhash, hbits, crec) < 0)
+                       xdf->recs[xdf->nrec++] = crec;
+                       if (xdl_classify_record(pass, cf, xdf->rhash, xdf->hbits, crec) < 0)
                                goto abort;
                }
        }
 
-       if (!XDL_CALLOC_ARRAY(rchg, nrec + 2))
+       if (!XDL_CALLOC_ARRAY(xdf->rchg, 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(rindex, nrec + 1))
+               if (!XDL_ALLOC_ARRAY(xdf->rindex, xdf->nrec + 1))
                        goto abort;
-               if (!XDL_ALLOC_ARRAY(ha, nrec + 1))
+               if (!XDL_ALLOC_ARRAY(xdf->ha, xdf->nrec + 1))
                        goto abort;
        }
 
-       xdf->nrec = nrec;
-       xdf->recs = recs;
-       xdf->hbits = hbits;
-       xdf->rhash = rhash;
-       xdf->rchg = rchg + 1;
-       xdf->rindex = rindex;
+       xdf->rchg += 1;
        xdf->nreff = 0;
-       xdf->ha = ha;
        xdf->dstart = 0;
-       xdf->dend = nrec - 1;
+       xdf->dend = xdf->nrec - 1;
 
        return 0;
 
 abort:
-       xdl_free(ha);
-       xdl_free(rindex);
-       xdl_free(rchg);
-       xdl_free(rhash);
-       xdl_free(recs);
-       xdl_cha_free(&xdf->rcha);
+       xdl_free_ctx(xdf);
        return -1;
 }
 
 
-static void xdl_free_ctx(xdfile_t *xdf) {
-
-       xdl_free(xdf->rhash);
-       xdl_free(xdf->rindex);
-       xdl_free(xdf->rchg - 1);
-       xdl_free(xdf->ha);
-       xdl_free(xdf->recs);
-       xdl_cha_free(&xdf->rcha);
-}
-
-
 void xdl_free_env(xdfenv_t *xe) {
 
        xdl_free_ctx(&xe->xdf2);