Skip to content

Commit fd031d8

Browse files
committed
src/cachunk: use _cleanup_ for compressor_finish()
1 parent 31ce03b commit fd031d8

File tree

1 file changed

+69
-142
lines changed

1 file changed

+69
-142
lines changed

src/cachunk.c

Lines changed: 69 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ int ca_load_fd(int fd, ReallocBuffer *buffer) {
5151
}
5252

5353
int ca_load_and_decompress_fd(int fd, ReallocBuffer *buffer) {
54-
CompressorContext context = COMPRESSOR_CONTEXT_INIT;
54+
_cleanup_(compressor_finish) CompressorContext context = COMPRESSOR_CONTEXT_INIT;
5555
int compression_type = _CA_COMPRESSION_TYPE_INVALID;
5656
uint8_t fd_buffer[BUFFER_SIZE];
5757
bool got_decoder_eof = false;
@@ -91,29 +91,25 @@ int ca_load_and_decompress_fd(int fd, ReallocBuffer *buffer) {
9191
for (;;) {
9292
r = compressor_input(&context, fd_buffer, l);
9393
if (r < 0)
94-
goto finish;
94+
return 0;
9595

9696
for (;;) {
9797
size_t done;
9898
void *p;
9999

100100
p = realloc_buffer_extend(buffer, BUFFER_SIZE);
101-
if (!p) {
102-
r = -ENOMEM;
103-
goto finish;
104-
}
101+
if (!p)
102+
return -ENOMEM;
105103

106104
r = compressor_decode(&context, p, BUFFER_SIZE, &done);
107105
if (r < 0)
108-
goto finish;
106+
return r;
109107

110108
realloc_buffer_shorten(buffer, BUFFER_SIZE - done);
111109
dcount += done;
112110

113-
if (dcount >= CA_CHUNK_SIZE_LIMIT_MAX) {
114-
r = -EBADMSG;
115-
goto finish;
116-
}
111+
if (dcount >= CA_CHUNK_SIZE_LIMIT_MAX)
112+
return -EBADMSG;
117113

118114
got_decoder_eof = r == COMPRESSOR_EOF;
119115

@@ -122,46 +118,31 @@ int ca_load_and_decompress_fd(int fd, ReallocBuffer *buffer) {
122118
};
123119

124120
l = read(fd, fd_buffer, sizeof(fd_buffer));
125-
if (l < 0) {
126-
r = -errno;
127-
goto finish;
128-
}
121+
if (l < 0)
122+
return -errno;
129123
if (l == 0) {
130-
if (!got_decoder_eof) { /* Premature end of file */
131-
r = -EPIPE;
132-
goto finish;
133-
}
134-
124+
if (!got_decoder_eof) /* Premature end of file */
125+
return -EPIPE;
135126
break;
136127
}
137128

138-
if (got_decoder_eof) { /* Trailing noise */
139-
r = -EBADMSG;
140-
goto finish;
141-
}
129+
if (got_decoder_eof) /* Trailing noise */
130+
return -EBADMSG;
142131

143132
ccount += l;
144133

145-
if (ccount >= CA_CHUNK_SIZE_LIMIT_MAX) {
146-
r = -EBADMSG;
147-
goto finish;
148-
}
149-
}
150-
151-
if (ccount < CA_CHUNK_SIZE_LIMIT_MIN || dcount < CA_CHUNK_SIZE_LIMIT_MIN) {
152-
r = -EBADMSG;
153-
goto finish;
134+
if (ccount >= CA_CHUNK_SIZE_LIMIT_MAX)
135+
return -EBADMSG;
154136
}
155137

156-
r = 0;
138+
if (ccount < CA_CHUNK_SIZE_LIMIT_MIN || dcount < CA_CHUNK_SIZE_LIMIT_MIN)
139+
return -EBADMSG;
157140

158-
finish:
159-
compressor_finish(&context);
160-
return r;
141+
return 0;
161142
}
162143

163144
int ca_load_and_compress_fd(int fd, CaCompressionType compression_type, ReallocBuffer *buffer) {
164-
CompressorContext context = COMPRESSOR_CONTEXT_INIT;
145+
_cleanup_(compressor_finish) CompressorContext context = COMPRESSOR_CONTEXT_INIT;
165146
uint64_t ccount = 0, dcount = 0;
166147
int r;
167148

@@ -184,44 +165,36 @@ int ca_load_and_compress_fd(int fd, CaCompressionType compression_type, ReallocB
184165
bool eof, got_encoder_eof = false;
185166

186167
l = read(fd, fd_buffer, sizeof(fd_buffer));
187-
if (l < 0) {
188-
r = -errno;
189-
goto finish;
190-
}
168+
if (l < 0)
169+
return -errno;
191170

192171
eof = (size_t) l < sizeof(fd_buffer);
193172
dcount += l;
194173

195-
if (dcount >= CA_CHUNK_SIZE_LIMIT_MAX) {
196-
r = -EBADMSG;
197-
goto finish;
198-
}
174+
if (dcount >= CA_CHUNK_SIZE_LIMIT_MAX)
175+
return -EBADMSG;
199176

200177
r = compressor_input(&context, fd_buffer, l);
201178
if (r < 0)
202-
goto finish;
179+
return r;
203180

204181
for (;;) {
205182
uint8_t *p;
206183
size_t done;
207184

208185
p = realloc_buffer_extend(buffer, BUFFER_SIZE);
209-
if (!p) {
210-
r = -ENOMEM;
211-
goto finish;
212-
}
186+
if (!p)
187+
return -ENOMEM;
213188

214189
r = compressor_encode(&context, eof, p, BUFFER_SIZE, &done);
215190
if (r < 0)
216-
goto finish;
191+
return r;
217192

218193
realloc_buffer_shorten(buffer, BUFFER_SIZE - done);
219194
ccount += done;
220195

221-
if (ccount >= CA_CHUNK_SIZE_LIMIT_MAX) {
222-
r = -EBADMSG;
223-
goto finish;
224-
}
196+
if (ccount >= CA_CHUNK_SIZE_LIMIT_MAX)
197+
return -EBADMSG;
225198

226199
got_encoder_eof = r == COMPRESSOR_EOF;
227200

@@ -233,16 +206,10 @@ int ca_load_and_compress_fd(int fd, CaCompressionType compression_type, ReallocB
233206
break;
234207
}
235208

236-
if (ccount < CA_CHUNK_SIZE_LIMIT_MIN || dcount < CA_CHUNK_SIZE_LIMIT_MIN) {
237-
r = -EBADMSG;
238-
goto finish;
239-
}
240-
241-
r = 0;
209+
if (ccount < CA_CHUNK_SIZE_LIMIT_MIN || dcount < CA_CHUNK_SIZE_LIMIT_MIN)
210+
return -EBADMSG;
242211

243-
finish:
244-
compressor_finish(&context);
245-
return r;
212+
return 0;
246213
}
247214

248215
int ca_save_fd(int fd, const void *data, size_t size) {
@@ -259,7 +226,7 @@ int ca_save_fd(int fd, const void *data, size_t size) {
259226
}
260227

261228
int ca_save_and_compress_fd(int fd, CaCompressionType compression_type, const void *data, size_t size) {
262-
CompressorContext context = COMPRESSOR_CONTEXT_INIT;
229+
_cleanup_(compressor_finish) CompressorContext context = COMPRESSOR_CONTEXT_INIT;
263230
uint64_t ccount = 0;
264231
int r;
265232

@@ -291,39 +258,29 @@ int ca_save_and_compress_fd(int fd, CaCompressionType compression_type, const vo
291258

292259
r = compressor_encode(&context, true, buffer, sizeof(buffer), &done);
293260
if (r < 0)
294-
goto finish;
261+
return r;
295262

296263
k = loop_write(fd, buffer, done);
297-
if (k < 0) {
298-
r = k;
299-
goto finish;
300-
}
264+
if (k < 0)
265+
return k;
301266

302267
ccount += done;
303268

304-
if (ccount >= CA_CHUNK_SIZE_LIMIT_MAX) {
305-
r = -EINVAL;
306-
goto finish;
307-
}
269+
if (ccount >= CA_CHUNK_SIZE_LIMIT_MAX)
270+
return -EINVAL;
308271

309272
if (r == COMPRESSOR_EOF)
310273
break;
311274
}
312275

313-
if (ccount < CA_CHUNK_SIZE_LIMIT_MIN) {
314-
r = -EINVAL;
315-
goto finish;
316-
}
317-
318-
r = 0;
276+
if (ccount < CA_CHUNK_SIZE_LIMIT_MIN)
277+
return -EINVAL;
319278

320-
finish:
321-
compressor_finish(&context);
322-
return r;
279+
return 0;
323280
}
324281

325282
int ca_save_and_decompress_fd(int fd, const void *data, size_t size) {
326-
CompressorContext context = COMPRESSOR_CONTEXT_INIT;
283+
_cleanup_(compressor_finish) CompressorContext context = COMPRESSOR_CONTEXT_INIT;
327284
int compression_type;
328285
uint64_t dcount = 0;
329286
int r;
@@ -349,7 +306,7 @@ int ca_save_and_decompress_fd(int fd, const void *data, size_t size) {
349306

350307
r = compressor_input(&context, data, size);
351308
if (r < 0)
352-
goto finish;
309+
return r;
353310

354311
for (;;) {
355312
uint8_t buffer[BUFFER_SIZE];
@@ -358,39 +315,29 @@ int ca_save_and_decompress_fd(int fd, const void *data, size_t size) {
358315

359316
r = compressor_decode(&context, buffer, sizeof(buffer), &done);
360317
if (r < 0)
361-
goto finish;
318+
return r;
362319

363320
k = loop_write(fd, buffer, done);
364-
if (k < 0) {
365-
r = k;
366-
goto finish;
367-
}
321+
if (k < 0)
322+
return k;
368323

369324
dcount += done;
370325

371-
if (dcount >= CA_CHUNK_SIZE_LIMIT_MAX) {
372-
r = -EINVAL;
373-
goto finish;
374-
}
326+
if (dcount >= CA_CHUNK_SIZE_LIMIT_MAX)
327+
return -EINVAL;
375328

376329
if (r == COMPRESSOR_EOF)
377330
break;
378331
}
379332

380-
if (dcount < CA_CHUNK_SIZE_LIMIT_MIN) {
381-
r = -EINVAL;
382-
goto finish;
383-
}
384-
385-
r = 0;
333+
if (dcount < CA_CHUNK_SIZE_LIMIT_MIN)
334+
return -EINVAL;
386335

387-
finish:
388-
compressor_finish(&context);
389-
return r;
336+
return 0;
390337
}
391338

392339
int ca_compress(CaCompressionType compression_type, const void *data, size_t size, ReallocBuffer *buffer) {
393-
CompressorContext context = COMPRESSOR_CONTEXT_INIT;
340+
_cleanup_(compressor_finish) CompressorContext context = COMPRESSOR_CONTEXT_INIT;
394341
uint64_t ccount = 0;
395342
int r;
396343

@@ -416,41 +363,31 @@ int ca_compress(CaCompressionType compression_type, const void *data, size_t siz
416363
uint8_t *p;
417364

418365
p = realloc_buffer_extend(buffer, BUFFER_SIZE);
419-
if (!p) {
420-
r = -ENOMEM;
421-
goto finish;
422-
}
366+
if (!p)
367+
return -ENOMEM;
423368

424369
r = compressor_encode(&context, true, p, BUFFER_SIZE, &done);
425370
if (r < 0)
426-
goto finish;
371+
return r;
427372

428373
realloc_buffer_shorten(buffer, BUFFER_SIZE - done);
429374
ccount += done;
430375

431-
if (ccount >= CA_CHUNK_SIZE_LIMIT_MAX) {
432-
r = -EINVAL;
433-
goto finish;
434-
}
376+
if (ccount >= CA_CHUNK_SIZE_LIMIT_MAX)
377+
return -EINVAL;
435378

436379
if (r == COMPRESSOR_EOF)
437380
break;
438381
}
439382

440-
if (ccount < CA_CHUNK_SIZE_LIMIT_MIN) {
441-
r = -EINVAL;
442-
goto finish;
443-
}
444-
445-
r = 0;
383+
if (ccount < CA_CHUNK_SIZE_LIMIT_MIN)
384+
return -EINVAL;
446385

447-
finish:
448-
compressor_finish(&context);
449-
return r;
386+
return 0;
450387
}
451388

452389
int ca_decompress(const void *data, size_t size, ReallocBuffer *buffer) {
453-
CompressorContext context = COMPRESSOR_CONTEXT_INIT;
390+
_cleanup_(compressor_finish) CompressorContext context = COMPRESSOR_CONTEXT_INIT;
454391
uint64_t dcount = 0;
455392
int compression_type;
456393
int r;
@@ -483,37 +420,27 @@ int ca_decompress(const void *data, size_t size, ReallocBuffer *buffer) {
483420
size_t done;
484421

485422
p = realloc_buffer_extend(buffer, BUFFER_SIZE);
486-
if (!p) {
487-
r = -ENOMEM;
488-
goto finish;
489-
}
423+
if (!p)
424+
return -ENOMEM;
490425

491426
r = compressor_decode(&context, p, BUFFER_SIZE, &done);
492427
if (r < 0)
493-
goto finish;
428+
return r;
494429

495430
realloc_buffer_shorten(buffer, BUFFER_SIZE - done);
496431
dcount += done;
497432

498-
if (dcount >= CA_CHUNK_SIZE_LIMIT_MAX) {
499-
r = -EINVAL;
500-
goto finish;
501-
}
433+
if (dcount >= CA_CHUNK_SIZE_LIMIT_MAX)
434+
return -EINVAL;
502435

503436
if (r == COMPRESSOR_EOF)
504437
break;
505438
}
506439

507-
if (dcount < CA_CHUNK_SIZE_LIMIT_MIN) {
508-
r = -EINVAL;
509-
goto finish;
510-
}
511-
512-
r = 0;
440+
if (dcount < CA_CHUNK_SIZE_LIMIT_MIN)
441+
return -EINVAL;
513442

514-
finish:
515-
compressor_finish(&context);
516-
return r;
443+
return 0;
517444
}
518445

519446
int ca_chunk_file_open(int chunk_fd, const char *prefix, const CaChunkID *chunkid, const char *suffix, int flags) {

0 commit comments

Comments
 (0)