From f7d89692b08081802bc5d01d266d212a2875fc5a Mon Sep 17 00:00:00 2001 From: peterjc Date: Thu, 17 Nov 2011 16:34:12 +0000 Subject: [PATCH 1/4] Force standard 28 bytes empty BGZF GZIP block for no compression BAM output --- bgzf.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/bgzf.c b/bgzf.c index 216cd04..f971da3 100644 --- a/bgzf.c +++ b/bgzf.c @@ -626,14 +626,24 @@ int bgzf_close(BGZF* fp) { if (fp->open_mode == 'w') { if (bgzf_flush(fp) != 0) return -1; - { // add an empty block + if (fp->compress_level==0) { + // add 28 byes EOF empty block even if no compression + // (gzip no compresison would give block size 32 bytes) + //fprintf(stderr, "[bgzf_close] Forcing empty EOF block\n"); + int count; +#ifdef _USE_KNETFILE + count = fwrite("\037\213\010\4\0\0\0\0\0\377\6\0\102\103\2\0\033\0\3\0\0\0\0\0\0\0\0\0", 1, 28, fp->x.fpw); +#else + count = fwrite("\037\213\010\4\0\0\0\0\0\377\6\0\102\103\2\0\033\0\3\0\0\0\0\0\0\0\0\0", 1, 28, fp->file); +#endif + } else { // add an empty block int count, block_length = deflate_block(fp, 0); #ifdef _USE_KNETFILE count = fwrite(fp->compressed_block, 1, block_length, fp->x.fpw); #else count = fwrite(fp->compressed_block, 1, block_length, fp->file); #endif - } + } #ifdef _USE_KNETFILE if (fflush(fp->x.fpw) != 0) { #else From dee0acf3dfe1e8a849437842c6d2813a9d05d064 Mon Sep 17 00:00:00 2001 From: peterjc Date: Thu, 17 Nov 2011 17:08:18 +0000 Subject: [PATCH 2/4] Tweak patch following comments from John Marshall --- bgzf.c | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/bgzf.c b/bgzf.c index f971da3..6e3a6db 100644 --- a/bgzf.c +++ b/bgzf.c @@ -626,24 +626,17 @@ int bgzf_close(BGZF* fp) { if (fp->open_mode == 'w') { if (bgzf_flush(fp) != 0) return -1; - if (fp->compress_level==0) { - // add 28 byes EOF empty block even if no compression - // (gzip no compresison would give block size 32 bytes) - //fprintf(stderr, "[bgzf_close] Forcing empty EOF block\n"); - int count; -#ifdef _USE_KNETFILE - count = fwrite("\037\213\010\4\0\0\0\0\0\377\6\0\102\103\2\0\033\0\3\0\0\0\0\0\0\0\0\0", 1, 28, fp->x.fpw); -#else - count = fwrite("\037\213\010\4\0\0\0\0\0\377\6\0\102\103\2\0\033\0\3\0\0\0\0\0\0\0\0\0", 1, 28, fp->file); -#endif - } else { // add an empty block + { // add an empty block + // add 28 byes EOF empty block + fp->compress_level=0; //don't need original value again + // (different compression levels would give different empty blocks) int count, block_length = deflate_block(fp, 0); #ifdef _USE_KNETFILE count = fwrite(fp->compressed_block, 1, block_length, fp->x.fpw); #else count = fwrite(fp->compressed_block, 1, block_length, fp->file); #endif - } + } #ifdef _USE_KNETFILE if (fflush(fp->x.fpw) != 0) { #else From b99764528ed99b5e98579b31ddd6adc2d29f07ac Mon Sep 17 00:00:00 2001 From: peterjc Date: Thu, 17 Nov 2011 17:22:25 +0000 Subject: [PATCH 3/4] Fix compression level, not zero for a 28 byte EOF block --- bgzf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bgzf.c b/bgzf.c index 6e3a6db..7b0881d 100644 --- a/bgzf.c +++ b/bgzf.c @@ -627,8 +627,8 @@ int bgzf_close(BGZF* fp) if (fp->open_mode == 'w') { if (bgzf_flush(fp) != 0) return -1; { // add an empty block - // add 28 byes EOF empty block - fp->compress_level=0; //don't need original value again + // add 28 bytes EOF empty block + fp->compress_level=-1; //don't need original value again // (different compression levels would give different empty blocks) int count, block_length = deflate_block(fp, 0); #ifdef _USE_KNETFILE From 17314c09ac1f546b51ea6661dffabb097168e8ff Mon Sep 17 00:00:00 2001 From: peterjc Date: Thu, 17 Nov 2011 17:25:56 +0000 Subject: [PATCH 4/4] Use Z_DEFAULT_COMPRESSION constant, thanks John --- bgzf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bgzf.c b/bgzf.c index 7b0881d..62fb489 100644 --- a/bgzf.c +++ b/bgzf.c @@ -628,7 +628,7 @@ int bgzf_close(BGZF* fp) if (bgzf_flush(fp) != 0) return -1; { // add an empty block // add 28 bytes EOF empty block - fp->compress_level=-1; //don't need original value again + fp->compress_level=Z_DEFAULT_COMPRESSION; //don't need value again // (different compression levels would give different empty blocks) int count, block_length = deflate_block(fp, 0); #ifdef _USE_KNETFILE