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