xdiff: delete local variables and initialize/free xdfile_t directly
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>
Ezekiel Newren committed
Sep 26, 2025 at 22:41 UTC
d1c028bdf75b9bcd380f85f74a34edcbaa060fee
1 file changed
+30
-48
xdiff/xprepare.c
+30
-48
@@ -134,99 +134,81 @@ static int xdl_classify_record(unsigned int pass, xdlclassifier_t *cf, xrecord_t
134
}
135
136
137
+static void xdl_free_ctx(xdfile_t *xdf)
138
+{
139
+ xdl_free(xdf->rhash);
140
+ xdl_free(xdf->rindex);
141
+ xdl_free(xdf->rchg - 1);
142
+ xdl_free(xdf->ha);
143
+ xdl_free(xdf->recs);
144
+ xdl_cha_free(&xdf->rcha);
145
+}
146
+
147
+
148
static int xdl_prepare_ctx(unsigned int pass, mmfile_t *mf, long narec, xpparam_t const *xpp,
149
xdlclassifier_t *cf, xdfile_t *xdf) {
139
- unsigned int hbits;
140
- long nrec, hsize, bsize;
150
+ long bsize;
151
unsigned long hav;
152
char const *blk, *cur, *top, *prev;
153
xrecord_t *crec;
144
- xrecord_t **recs;
145
- xrecord_t **rhash;
146
- unsigned long *ha;
147
- char *rchg;
148
- long *rindex;
154
150
- ha = NULL;
151
- rindex = NULL;
152
- rchg = NULL;
153
- rhash = NULL;
154
- recs = NULL;
155
+ xdf->ha = NULL;
156
+ xdf->rindex = NULL;
157
+ xdf->rchg = NULL;
158
+ xdf->rhash = NULL;
159
+ xdf->recs = NULL;
160
161
if (xdl_cha_init(&xdf->rcha, sizeof(xrecord_t), narec / 4 + 1) < 0)
162
goto abort;
158
- if (!XDL_ALLOC_ARRAY(recs, narec))
163
+ if (!XDL_ALLOC_ARRAY(xdf->recs, narec))
164
goto abort;
165
161
- hbits = xdl_hashbits((unsigned int) narec);
162
- hsize = 1 << hbits;
163
- if (!XDL_CALLOC_ARRAY(rhash, hsize))
166
+ xdf->hbits = xdl_hashbits((unsigned int) narec);
167
+ if (!XDL_CALLOC_ARRAY(xdf->rhash, 1 << xdf->hbits))
168
goto abort;
169
166
- nrec = 0;
170
+ xdf->nrec = 0;
171
if ((cur = blk = xdl_mmfile_first(mf, &bsize))) {
172
for (top = blk + bsize; cur < top; ) {
173
prev = cur;
174
hav = xdl_hash_record(&cur, top, xpp->flags);
171
- if (XDL_ALLOC_GROW(recs, nrec + 1, narec))
175
+ if (XDL_ALLOC_GROW(xdf->recs, xdf->nrec + 1, narec))
176
goto abort;
177
if (!(crec = xdl_cha_alloc(&xdf->rcha)))
178
goto abort;
179
crec->ptr = prev;
180
crec->size = (long) (cur - prev);
181
crec->ha = hav;
178
- recs[nrec++] = crec;
179
- if (xdl_classify_record(pass, cf, rhash, hbits, crec) < 0)
182
+ xdf->recs[xdf->nrec++] = crec;
183
+ if (xdl_classify_record(pass, cf, xdf->rhash, xdf->hbits, crec) < 0)
184
goto abort;
185
}
186
}
187
184
- if (!XDL_CALLOC_ARRAY(rchg, nrec + 2))
188
+ if (!XDL_CALLOC_ARRAY(xdf->rchg, xdf->nrec + 2))
189
goto abort;
190
191
if ((XDF_DIFF_ALG(xpp->flags) != XDF_PATIENCE_DIFF) &&
192
(XDF_DIFF_ALG(xpp->flags) != XDF_HISTOGRAM_DIFF)) {
189
- if (!XDL_ALLOC_ARRAY(rindex, nrec + 1))
193
+ if (!XDL_ALLOC_ARRAY(xdf->rindex, xdf->nrec + 1))
194
goto abort;
191
- if (!XDL_ALLOC_ARRAY(ha, nrec + 1))
195
+ if (!XDL_ALLOC_ARRAY(xdf->ha, xdf->nrec + 1))
196
goto abort;
197
}
198
195
- xdf->nrec = nrec;
196
- xdf->recs = recs;
197
- xdf->hbits = hbits;
198
- xdf->rhash = rhash;
199
- xdf->rchg = rchg + 1;
200
- xdf->rindex = rindex;
199
+ xdf->rchg += 1;
200
xdf->nreff = 0;
202
- xdf->ha = ha;
201
xdf->dstart = 0;
204
- xdf->dend = nrec - 1;
202
+ xdf->dend = xdf->nrec - 1;
203
204
return 0;
205
206
abort:
209
- xdl_free(ha);
210
- xdl_free(rindex);
211
- xdl_free(rchg);
212
- xdl_free(rhash);
213
- xdl_free(recs);
214
- xdl_cha_free(&xdf->rcha);
207
+ xdl_free_ctx(xdf);
208
return -1;
209
}
210
211
219
-static void xdl_free_ctx(xdfile_t *xdf) {
220
-
221
- xdl_free(xdf->rhash);
222
- xdl_free(xdf->rindex);
223
- xdl_free(xdf->rchg - 1);
224
- xdl_free(xdf->ha);
225
- xdl_free(xdf->recs);
226
- xdl_cha_free(&xdf->rcha);
227
-}
228
-
229
-
212
void xdl_free_env(xdfenv_t *xe) {
213
214
xdl_free_ctx(&xe->xdf2);