From 54f5a850f38a820669d614029b151080172eb953 Mon Sep 17 00:00:00 2001 From: Heng Li Date: Tue, 11 Aug 2009 09:02:36 +0000 Subject: [PATCH] * samtools-0.1.5-28 (r444) * bug in "merge -n" --- bam_sort.c | 21 +++++++++++---------- bamtk.c | 2 +- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/bam_sort.c b/bam_sort.c index 402792a..c43e56f 100644 --- a/bam_sort.c +++ b/bam_sort.c @@ -40,7 +40,9 @@ typedef struct { static inline int heap_lt(const heap1_t a, const heap1_t b) { if (g_is_by_qname) { - int t = strnum_cmp(bam1_qname(a.b), bam1_qname(b.b)); + int t; + if (a.b == 0 || b.b == 0) return a.b == 0? 1 : 0; + t = strnum_cmp(bam1_qname(a.b), bam1_qname(b.b)); return (t > 0 || (t == 0 && a.pos > b.pos)); } else return (a.pos > b.pos); } @@ -106,18 +108,17 @@ void bam_merge_core(int by_qname, const char *out, int n, char * const *fn) while (heap->pos != HEAP_EMPTY) { bam1_t *b = heap->b; bam_write1_core(fpout, &b->core, b->data_len, b->data); - if ((j = bam_read1(fp[heap->i], b)) >= 0) + if ((j = bam_read1(fp[heap->i], b)) >= 0) { heap->pos = ((uint64_t)b->core.tid<<32) | (uint32_t)b->core.pos<<1 | bam1_strand(b); - else if (j == -1) heap->pos = HEAP_EMPTY; - else fprintf(stderr, "[bam_merge_core] '%s' is truncated. Continue anyway.\n", fn[heap->i]); + } else if (j == -1) { + heap->pos = HEAP_EMPTY; + free(heap->b->data); free(heap->b); + heap->b = 0; + } else fprintf(stderr, "[bam_merge_core] '%s' is truncated. Continue anyway.\n", fn[heap->i]); ks_heapadjust(heap, 0, n, heap); } - for (i = 0; i != n; ++i) { - bam_close(fp[i]); - free(heap[i].b->data); - free(heap[i].b); - } + for (i = 0; i != n; ++i) bam_close(fp[i]); bam_close(fpout); free(fp); free(heap); } @@ -222,7 +223,7 @@ void bam_sort_core(int is_by_qname, const char *fn, const char *prefix, size_t m bam_merge_core(is_by_qname, fnout, n, fns); free(fnout); for (i = 0; i < n; ++i) { - unlink(fns[i]); +// unlink(fns[i]); free(fns[i]); } free(fns); diff --git a/bamtk.c b/bamtk.c index 2df9032..a7c67ab 100644 --- a/bamtk.c +++ b/bamtk.c @@ -9,7 +9,7 @@ #endif #ifndef PACKAGE_VERSION -#define PACKAGE_VERSION "0.1.5-27 (r443)" +#define PACKAGE_VERSION "0.1.5-28 (r444)" #endif int bam_taf2baf(int argc, char *argv[]); -- 2.39.2