]> git.donarmstrong.com Git - samtools.git/blobdiff - bam_stat.c
Allow tabs in the CO header field
[samtools.git] / bam_stat.c
index a4522daa49257b920ab26586a6062d046a26d9e3..ea9deee9d712c71bfd51f7574a5cae055a2c2ace 100644 (file)
@@ -1,3 +1,5 @@
+#include <unistd.h>
+#include <assert.h>
 #include "bam.h"
 
 typedef struct {
@@ -14,7 +16,7 @@ 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) {                                                    \
@@ -33,13 +35,15 @@ bam_flagstat_t *bam_flagstat_core(bamFile fp)
        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[])