@@ -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