From 91352f3511e963b4d46e3168654f0027c6fee291 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Tue, 23 Aug 2011 19:41:27 +0200 Subject: [PATCH] Introduce clear_afhi(). aft.c and afh.c contain identical code to free all members of an instance of struct afh_info. This commit introduces the public function clear_afhi(), and patches both aft.c and afh.c to call the new function. --- afh.c | 8 +------- afh.h | 1 + afh_common.c | 20 ++++++++++++++++++++ aft.c | 10 +--------- 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/afh.c b/afh.c index bc868106..5b1cfe9b 100644 --- a/afh.c +++ b/afh.c @@ -204,13 +204,7 @@ int main(int argc, char **argv) print_chunk_table(&afhi); printf("\n"); } - free(afhi.techinfo); - free(afhi.tags.artist); - free(afhi.tags.title); - free(afhi.tags.year); - free(afhi.tags.album); - free(afhi.tags.comment); - free(afhi.chunk_table); + clear_afhi(&afhi); ret2 = para_munmap(audio_file_data, audio_file_size); if (ret2 < 0 && ret >= 0) ret = ret2; diff --git a/afh.h b/afh.h index a574edf5..79528094 100644 --- a/afh.h +++ b/afh.h @@ -104,3 +104,4 @@ void afh_get_chunk(long unsigned chunk_num, struct afh_info *afhi, void afh_get_header(struct afh_info *afhi, uint8_t audio_format_id, void *map, size_t mapsize, char **buf, size_t *len); void afh_free_header(char *header_buf, uint8_t audio_format_id); +void clear_afhi(struct afh_info *afhi); diff --git a/afh_common.c b/afh_common.c index 9f1d1881..5b6301b5 100644 --- a/afh_common.c +++ b/afh_common.c @@ -221,6 +221,26 @@ success: return ret; } +/** + * Deallocate contents of a filled-in ahi structure + * + * \param afhi The structure to clear. + * + * The given pointer is kept, everything else is freed. + */ +void clear_afhi(struct afh_info *afhi) +{ + if (!afhi) + return; + free(afhi->chunk_table); + free(afhi->techinfo); + free(afhi->tags.artist); + free(afhi->tags.title); + free(afhi->tags.year); + free(afhi->tags.album); + free(afhi->tags.comment); +} + /** * Get the name of the given audio format. * diff --git a/aft.c b/aft.c index f89235a4..7516e328 100644 --- a/aft.c +++ b/aft.c @@ -1914,15 +1914,7 @@ out_free: send_ret = sc_send_va_buffer(&pad->cc->scc, "failed to add %s (%s)\n", path, para_strerror(-ret)); free(obj.data); - if (afhi_ptr) { - free(afhi_ptr->chunk_table); - free(afhi_ptr->techinfo); - free(afhi_ptr->tags.artist); - free(afhi_ptr->tags.title); - free(afhi_ptr->tags.year); - free(afhi_ptr->tags.album); - free(afhi_ptr->tags.comment); - } + clear_afhi(afhi_ptr); /* Stop adding files only on send errors. */ return send_ret; } -- 2.30.2