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;
}
Example #2
0
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);
}