void *sam_header_parse2(const char *headerText) { list_t *hlines = NULL; HeaderLine *hline; const char *text; char *buf = NULL; size_t nbuf = 0; int tovalidate = 0; if (!headerText) return 0; text = headerText; while ((text = nextline(&buf, &nbuf, text))) { hline = sam_header_line_parse(buf); if (hline && (!tovalidate || sam_header_line_validate(hline))) // With too many (~250,000) reference sequences the header parsing was too slow with list_append. hlines = list_append_to_end(hlines, hline); else { if (hline) sam_header_line_free(hline); sam_header_free(hlines); if (buf) free(buf); return NULL; } } if (buf) free(buf); return hlines; }
void bam_header_destroy(bam_header_t *header) { int32_t i; extern void bam_destroy_header_hash(bam_header_t *header); if (header == 0) return; if (header->target_name) { for (i = 0; i < header->n_targets; ++i) free(header->target_name[i]); free(header->target_name); free(header->target_len); } free(header->text); if (header->dict) sam_header_free(header->dict); if (header->rg2lib) sam_tbl_destroy(header->rg2lib); bam_destroy_header_hash(header); free(header); }