From: Henry Amrhein Date: Sat, 22 Dec 2012 09:18:01 +0000 (-0800) Subject: updated main loop to not duplicate hash key X-Git-Url: http://woldlab.caltech.edu/gitweb/?p=samtools.git;a=commitdiff_plain;h=refs%2Fheads%2Fcalnh updated main loop to not duplicate hash key --- diff --git a/bam_calnh.c b/bam_calnh.c index c416af4..40ce683 100644 --- a/bam_calnh.c +++ b/bam_calnh.c @@ -12,7 +12,6 @@ bam_calnh_core(samfile_t *in, samfile_t *out) bam1_t *b; khint_t k; uint8_t *oldnh; - char *qn = NULL; khash_t(QNH) *qnh; int ret; int64_t savepos; @@ -22,7 +21,7 @@ bam_calnh_core(samfile_t *in, samfile_t *out) if (savepos < 0) { - fprintf(stderr, "[bam_calnh_core] bam_tell failure\n"); + fprintf(stderr, "[%s] bam_tell failure.\n", __func__); return 1; } @@ -31,14 +30,10 @@ bam_calnh_core(samfile_t *in, samfile_t *out) while (samread(in, b) >= 0) { - qn = strdup(bam1_qname(b)); - k = kh_put(QNH, qnh, qn, &ret); + k = kh_put(QNH, qnh, bam1_qname(b), &ret); if (ret == 0) - { kh_val(qnh, k) += 1; - free(qn); - } else kh_val(qnh, k) = 1; @@ -46,22 +41,20 @@ bam_calnh_core(samfile_t *in, samfile_t *out) if (bam_seek(in->x.bam, savepos, SEEK_SET) < 0) { - fprintf(stderr, "[bam_calnh_core] bam_seek failure\n"); + fprintf(stderr, "[%s] bam_seek failure.\n", __func__); return 1; } - while (samread(in, b) >= 0) { k = kh_get(QNH, qnh, bam1_qname(b)); oldnh = bam_aux_get(b, "NH"); - if (!(oldnh)) - { - val = kh_val(qnh, k); - bam_aux_append(b, "NH", 'i', 4, (uint8_t *)&val); - } + if (oldnh) + bam_aux_del(b, oldnh); + val = kh_val(qnh, k); + bam_aux_append(b, "NH", 'i', 4, (uint8_t *)&val); samwrite(out, b); }