/* free record */ void lnf_rec_free(lnf_rec_t *rec) { int i; if (rec == NULL) { return; } if (rec->extensions_arr != NULL) { bit_array_release(rec->extensions_arr); free(rec->extensions_arr); } if (rec->master_record != NULL) { free(rec->master_record); } if (rec->field_data != NULL) { for (i = LNF_FLD_ZERO_; i < LNF_FLD_TERM_; i++) { if (rec->field_data[i] != NULL) { free(rec->field_data[i]); } } free(rec->field_data); } free(rec); }
/* close file handler and release related structures */ void lnf_close(lnf_file_t *lnf_file) { lnf_map_list_t *map_list, *tmp_map_list; if (lnf_file == NULL || lnf_file->nffile == NULL) { return ; } if (lnf_file->flags & LNF_WRITE) { // write the last records in buffer if (lnf_file->nffile->block_header->NumRecords ) { if ( WriteBlock(lnf_file->nffile) <= 0 ) { fprintf(stderr, "Failed to write output buffer: '%s'" , strerror(errno)); } } CloseUpdateFile(lnf_file->nffile, NULL ); } else { CloseFile(lnf_file->nffile); } DisposeFile(lnf_file->nffile); PackExtensionMapList(lnf_file->extension_map_list); FreeExtensionMaps(lnf_file->extension_map_list); map_list = lnf_file->lnf_map_list; while (map_list != NULL) { tmp_map_list = map_list; map_list = map_list->next; bit_array_release(&tmp_map_list->bit_array); if (tmp_map_list->map != NULL) { free(tmp_map_list->map); } free(tmp_map_list); } if (lnf_file->v1convert_buffer != NULL) { free(lnf_file->v1convert_buffer); } free(lnf_file); }