kroundup32(b->m_data);
b->data = realloc(b->data, b->m_data);
}
- if (n_cigar != (int)c->n_cigar) // move data
- memmove(b->data + c->l_qname + 4 * n_cigar, bam1_seq(b), b->data_len - c->l_qseq - 4 * c->n_cigar);
+ if (n_cigar != (int)c->n_cigar) { // move data
+ memmove(b->data + c->l_qname + 4 * n_cigar, bam1_seq(b), b->data_len - c->l_qname - 4 * c->n_cigar);
+ b->data_len += 4 * (n_cigar - (int)c->n_cigar);
+ }
memcpy(bam1_cigar(b), cigar, n_cigar * 4);
c->n_cigar = n_cigar;
free(s_ref); free(s_read); free(cigar);
cond = 0;
ret = ma->iter? bam_iter_read(ma->fp, ma->iter, b) : bam_read1(ma->fp, b);
if (ret < 0) break;
- if (b->core.qual < ma->min_mq) cond = 1;
+ if (b->core.flag&BAM_FUNMAP) cond = 1;
+ else if (b->core.qual < ma->min_mq) cond = 1;
else if ((ma->flag&MPLP_NO_ORPHAN) && (b->core.flag&1) && !(b->core.flag&2)) cond = 1;
if (ma->ref && !cond && (ma->flag&MPLP_REALN)) bam_realn(b, ma->ref);
} while (cond);