Skip to content

Commit 159607a

Browse files
rctaygitster
authored andcommitted
xdiff/xprepare: refactor abort cleanups
Group free()'s that are called when a malloc() fails in xdl_prepare_ctx(), making for more readable code. Also add a free() on ha, in case future git hackers add allocs after the ha malloc. Signed-off-by: Tay Ray Chuan <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 452f4fa commit 159607a

File tree

1 file changed

+32
-59
lines changed

1 file changed

+32
-59
lines changed

xdiff/xprepare.c

Lines changed: 32 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -143,24 +143,21 @@ static int xdl_prepare_ctx(mmfile_t *mf, long narec, xpparam_t const *xpp,
143143
char *rchg;
144144
long *rindex;
145145

146-
if (xdl_cha_init(&xdf->rcha, sizeof(xrecord_t), narec / 4 + 1) < 0) {
146+
ha = NULL;
147+
rindex = NULL;
148+
rchg = NULL;
149+
rhash = NULL;
150+
recs = NULL;
147151

148-
return -1;
149-
}
150-
if (!(recs = (xrecord_t **) xdl_malloc(narec * sizeof(xrecord_t *)))) {
151-
152-
xdl_cha_free(&xdf->rcha);
153-
return -1;
154-
}
152+
if (xdl_cha_init(&xdf->rcha, sizeof(xrecord_t), narec / 4 + 1) < 0)
153+
goto abort;
154+
if (!(recs = (xrecord_t **) xdl_malloc(narec * sizeof(xrecord_t *))))
155+
goto abort;
155156

156157
hbits = xdl_hashbits((unsigned int) narec);
157158
hsize = 1 << hbits;
158-
if (!(rhash = (xrecord_t **) xdl_malloc(hsize * sizeof(xrecord_t *)))) {
159-
160-
xdl_free(recs);
161-
xdl_cha_free(&xdf->rcha);
162-
return -1;
163-
}
159+
if (!(rhash = (xrecord_t **) xdl_malloc(hsize * sizeof(xrecord_t *))))
160+
goto abort;
164161
memset(rhash, 0, hsize * sizeof(xrecord_t *));
165162

166163
nrec = 0;
@@ -175,63 +172,30 @@ static int xdl_prepare_ctx(mmfile_t *mf, long narec, xpparam_t const *xpp,
175172
hav = xdl_hash_record(&cur, top, xpp->flags);
176173
if (nrec >= narec) {
177174
narec *= 2;
178-
if (!(rrecs = (xrecord_t **) xdl_realloc(recs, narec * sizeof(xrecord_t *)))) {
179-
180-
xdl_free(rhash);
181-
xdl_free(recs);
182-
xdl_cha_free(&xdf->rcha);
183-
return -1;
184-
}
175+
if (!(rrecs = (xrecord_t **) xdl_realloc(recs, narec * sizeof(xrecord_t *))))
176+
goto abort;
185177
recs = rrecs;
186178
}
187-
if (!(crec = xdl_cha_alloc(&xdf->rcha))) {
188-
189-
xdl_free(rhash);
190-
xdl_free(recs);
191-
xdl_cha_free(&xdf->rcha);
192-
return -1;
193-
}
179+
if (!(crec = xdl_cha_alloc(&xdf->rcha)))
180+
goto abort;
194181
crec->ptr = prev;
195182
crec->size = (long) (cur - prev);
196183
crec->ha = hav;
197184
recs[nrec++] = crec;
198185

199-
if (xdl_classify_record(cf, rhash, hbits, crec) < 0) {
200-
201-
xdl_free(rhash);
202-
xdl_free(recs);
203-
xdl_cha_free(&xdf->rcha);
204-
return -1;
205-
}
186+
if (xdl_classify_record(cf, rhash, hbits, crec) < 0)
187+
goto abort;
206188
}
207189
}
208190

209-
if (!(rchg = (char *) xdl_malloc((nrec + 2) * sizeof(char)))) {
210-
211-
xdl_free(rhash);
212-
xdl_free(recs);
213-
xdl_cha_free(&xdf->rcha);
214-
return -1;
215-
}
191+
if (!(rchg = (char *) xdl_malloc((nrec + 2) * sizeof(char))))
192+
goto abort;
216193
memset(rchg, 0, (nrec + 2) * sizeof(char));
217194

218-
if (!(rindex = (long *) xdl_malloc((nrec + 1) * sizeof(long)))) {
219-
220-
xdl_free(rchg);
221-
xdl_free(rhash);
222-
xdl_free(recs);
223-
xdl_cha_free(&xdf->rcha);
224-
return -1;
225-
}
226-
if (!(ha = (unsigned long *) xdl_malloc((nrec + 1) * sizeof(unsigned long)))) {
227-
228-
xdl_free(rindex);
229-
xdl_free(rchg);
230-
xdl_free(rhash);
231-
xdl_free(recs);
232-
xdl_cha_free(&xdf->rcha);
233-
return -1;
234-
}
195+
if (!(rindex = (long *) xdl_malloc((nrec + 1) * sizeof(long))))
196+
goto abort;
197+
if (!(ha = (unsigned long *) xdl_malloc((nrec + 1) * sizeof(unsigned long))))
198+
goto abort;
235199

236200
xdf->nrec = nrec;
237201
xdf->recs = recs;
@@ -245,6 +209,15 @@ static int xdl_prepare_ctx(mmfile_t *mf, long narec, xpparam_t const *xpp,
245209
xdf->dend = nrec - 1;
246210

247211
return 0;
212+
213+
abort:
214+
xdl_free(ha);
215+
xdl_free(rindex);
216+
xdl_free(rchg);
217+
xdl_free(rhash);
218+
xdl_free(recs);
219+
xdl_cha_free(&xdf->rcha);
220+
return -1;
248221
}
249222

250223

0 commit comments

Comments
 (0)