X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=bam_aux.c;h=4bbf975dbb88559ae4e86f54db9d7af8c320b3b0;hb=3a1bd4d97b4d58148b5a7fd845a3b6a023eecbed;hp=2247bdfe9ba15d39d5a1dcf193da9d68cdfab8bf;hpb=80658e4d152b53bd55927c432ceece7702ab49d7;p=samtools.git diff --git a/bam_aux.c b/bam_aux.c index 2247bdf..4bbf975 100644 --- a/bam_aux.c +++ b/bam_aux.c @@ -59,6 +59,23 @@ int bam_aux_del(bam1_t *b, uint8_t *s) return 0; } +int bam_aux_drop_other(bam1_t *b, uint8_t *s) +{ + if (s) { + uint8_t *p, *aux; + aux = bam1_aux(b); + p = s - 2; + __skip_tag(s); + memmove(aux, p, s - p); + b->data_len -= b->l_aux - (s - p); + b->l_aux = s - p; + } else { + b->data_len -= b->l_aux; + b->l_aux = 0; + } + return 0; +} + void bam_init_header_hash(bam_header_t *header) { if (header->hash == 0) { @@ -124,6 +141,10 @@ int bam_parse_region(bam_header_t *header, const char *str, int *ref_id, int *be } else s[name_end] = ':', name_end = l; } } else iter = kh_get(s, h, str); + if (iter == kh_end(h)) { + free(s); + return -1; + } *ref_id = kh_val(h, iter); // parse the interval if (name_end < l) {