From: Heng Li Date: Thu, 31 Mar 2011 20:38:57 +0000 (+0000) Subject: * synchronize bgzf in tabix and in samtools X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=993e30ce486073a7c784d277afd8e168b38dd74e;p=samtools.git * synchronize bgzf in tabix and in samtools * fixed a severe bug in bedidx.c --- diff --git a/bedidx.c b/bedidx.c index 9b76af7..9297831 100644 --- a/bedidx.c +++ b/bedidx.c @@ -26,7 +26,7 @@ int *bed_index_core(int n, uint64_t *a, int *n_idx) m = *n_idx = 0; idx = 0; for (i = 0; i < n; ++i) { int beg, end; - beg = a[i]>>32; end = (uint32_t)a[i]; + beg = a[i]>>32 >> LIDX_SHIFT; end = ((uint32_t)a[i]) >> LIDX_SHIFT; if (m < end + 1) { int oldm = m; m = end + 1; @@ -96,8 +96,9 @@ void *bed_read(const char *fn) int dret; kstring_t *str; // read the list - str = calloc(1, sizeof(kstring_t)); fp = strcmp(fn, "-")? gzopen(fn, "r") : gzdopen(fileno(stdin), "r"); + if (fp == 0) return 0; + str = calloc(1, sizeof(kstring_t)); ks = ks_init(fp); while (ks_getuntil(ks, 0, str, &dret) >= 0) { // read the chr name int beg = -1, end = -1; diff --git a/bgzf.c b/bgzf.c index db970c8..216cd04 100644 --- a/bgzf.c +++ b/bgzf.c @@ -111,6 +111,32 @@ report_error(BGZF* fp, const char* message) { fp->error = message; } +int bgzf_check_bgzf(const char *fn) +{ + BGZF *fp; + uint8_t buf[10],magic[10]="\037\213\010\4\0\0\0\0\0\377"; + int n; + + if ((fp = bgzf_open(fn, "r")) == 0) + { + fprintf(stderr, "[bgzf_check_bgzf] failed to open the file: %s\n",fn); + return -1; + } + +#ifdef _USE_KNETFILE + n = knet_read(fp->x.fpr, buf, 10); +#else + n = fread(buf, 1, 10, fp->file); +#endif + bgzf_close(fp); + + if ( n!=10 ) + return -1; + + if ( !memcmp(magic, buf, 10) ) return 1; + return 0; +} + static BGZF *bgzf_read_init() { BGZF *fp; diff --git a/bgzf.h b/bgzf.h index 9dc7b5f..7295f37 100644 --- a/bgzf.h +++ b/bgzf.h @@ -128,6 +128,7 @@ int bgzf_check_EOF(BGZF *fp); int bgzf_read_block(BGZF* fp); int bgzf_flush(BGZF* fp); int bgzf_flush_try(BGZF *fp, int size); +int bgzf_check_bgzf(const char *fn); #ifdef __cplusplus }