X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=faidx.c;h=51c82ac1dfdcd0baf31435a0fe5f8e45c3289d0f;hb=0b3418cf166ce4a58cedf0d9a2df5ec3dd4cc5fa;hp=fd0389393d8208098a5a6ace60047b1202f37509;hpb=80658e4d152b53bd55927c432ceece7702ab49d7;p=samtools.git diff --git a/faidx.c b/faidx.c index fd03893..51c82ac 100644 --- a/faidx.c +++ b/faidx.c @@ -7,7 +7,8 @@ #include "khash.h" typedef struct { - uint64_t len:32, line_len:16, line_blen:16; + int32_t line_len, line_blen; + int64_t len; uint64_t offset; } faidx1_t; KHASH_MAP_INIT_STR(s, faidx1_t) @@ -64,10 +65,11 @@ faidx_t *fai_build_core(RAZF *rz) { char c, *name; int l_name, m_name, ret; - int len, line_len, line_blen, state; + int line_len, line_blen, state; int l1, l2; faidx_t *idx; uint64_t offset; + int64_t len; idx = (faidx_t*)calloc(1, sizeof(faidx_t)); idx->hash = kh_init(s); @@ -119,11 +121,6 @@ faidx_t *fai_build_core(RAZF *rz) return 0; } ++l1; len += l2; - if (l2 >= 0x10000) { - fprintf(stderr, "[fai_build_core] line length exceeds 65535 in sequence '%s'.\n", name); - free(name); fai_destroy(idx); - return 0; - } if (state == 1) line_len = l1, line_blen = l2, state = 0; else if (state == 0) { if (l1 != line_len || l2 != line_blen) state = 2; @@ -340,6 +337,11 @@ char *fai_fetch(const faidx_t *fai, const char *str, int *len) } else s[name_end] = ':', name_end = l; } } else iter = kh_get(s, h, str); + if(iter == kh_end(h)) { + fprintf(stderr, "[fai_fetch] Warning - Reference %s not found in FASTA file, returning empty sequence\n", str); + free(s); + return 0; + }; val = kh_value(h, iter); // parse the interval if (name_end < l) {