@@ -143,24 +143,21 @@ static int xdl_prepare_ctx(mmfile_t *mf, long narec, xpparam_t const *xpp,
143
143
char * rchg ;
144
144
long * rindex ;
145
145
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 ;
147
151
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 ;
155
156
156
157
hbits = xdl_hashbits ((unsigned int ) narec );
157
158
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 ;
164
161
memset (rhash , 0 , hsize * sizeof (xrecord_t * ));
165
162
166
163
nrec = 0 ;
@@ -175,63 +172,30 @@ static int xdl_prepare_ctx(mmfile_t *mf, long narec, xpparam_t const *xpp,
175
172
hav = xdl_hash_record (& cur , top , xpp -> flags );
176
173
if (nrec >= narec ) {
177
174
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 ;
185
177
recs = rrecs ;
186
178
}
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 ;
194
181
crec -> ptr = prev ;
195
182
crec -> size = (long ) (cur - prev );
196
183
crec -> ha = hav ;
197
184
recs [nrec ++ ] = crec ;
198
185
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 ;
206
188
}
207
189
}
208
190
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 ;
216
193
memset (rchg , 0 , (nrec + 2 ) * sizeof (char ));
217
194
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 ;
235
199
236
200
xdf -> nrec = nrec ;
237
201
xdf -> recs = recs ;
@@ -245,6 +209,15 @@ static int xdl_prepare_ctx(mmfile_t *mf, long narec, xpparam_t const *xpp,
245
209
xdf -> dend = nrec - 1 ;
246
210
247
211
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 ;
248
221
}
249
222
250
223
0 commit comments