+#include <unistd.h>
+#include <assert.h>
#include "bam.h"
typedef struct {
if ((c)->flag & BAM_FPROPER_PAIR) ++(s)->n_pair_good; \
if ((c)->flag & BAM_FREAD1) ++(s)->n_read1; \
if ((c)->flag & BAM_FREAD2) ++(s)->n_read2; \
- if ((c)->flag & BAM_FMUNMAP) ++(s)->n_sgltn; \
+ if (((c)->flag & BAM_FMUNMAP) && !((c)->flag & BAM_FUNMAP)) ++(s)->n_sgltn; \
if (!((c)->flag & BAM_FUNMAP) && !((c)->flag & BAM_FMUNMAP)) { \
++(s)->n_pair_map; \
if ((c)->mtid != (c)->tid) { \
bam_flagstat_t *s;
bam1_t *b;
bam1_core_t *c;
+ int ret;
s = (bam_flagstat_t*)calloc(1, sizeof(bam_flagstat_t));
b = bam_init1();
c = &b->core;
- while (bam_read1(fp, b) >= 0) {
+ while ((ret = bam_read1(fp, b)) >= 0)
flagstat_loop(s, c);
- }
bam_destroy1(b);
+ if (ret != -1)
+ fprintf(stderr, "[bam_flagstat_core] Truncated file? Continue anyway.\n");
return s;
}
int bam_flagstat(int argc, char *argv[])