diff --git a/src/post_modules/Bz2/libbzip2mod.cmod b/src/post_modules/Bz2/libbzip2mod.cmod index 131649591a82fce9a1f781689680ce781f73290b..698d9de07e7ef5a7dd85a86e6e02500259cac9c3 100644 --- a/src/post_modules/Bz2/libbzip2mod.cmod +++ b/src/post_modules/Bz2/libbzip2mod.cmod @@ -1,5 +1,5 @@ #include "global.h" -RCSID("$Id: libbzip2mod.cmod,v 1.6 2003/01/24 10:24:26 finnman Exp $"); +RCSID("$Id: libbzip2mod.cmod,v 1.7 2003/01/24 11:28:52 finnman Exp $"); #include "interpret.h" #include "svalue.h" #include "stralloc.h" @@ -60,8 +60,17 @@ RCSID("$Id: libbzip2mod.cmod,v 1.6 2003/01/24 10:24:26 finnman Exp $"); #define bzWriteOpen BZ2_bzWriteOpen #define bzWrite BZ2_bzWrite #define bzWriteClose BZ2_bzWriteClose + +/* use 64 bit counting struct */ +#define TOTAL_OUT (s->total_out_lo_32 + (s->total_out_hi_32 << 32)) #endif /* HAVE_BZ2_BZCOMPRESSINIT */ +#ifndef HAVE_BZ2_BZCOMPRESSINIT +#define TOTAL_OUT s->total_out +#endif + + + /*! @module Bz2 *! *! The Bz2 module contains functions to compress and uncompress strings using @@ -246,11 +255,11 @@ PIKECLASS Deflate Pike_error("Error when compressing in Bz2.feed()"); } - if(s->total_out - THIS->total_out_previous_buf > 0){ + if(TOTAL_OUT - THIS->total_out_previous_buf > 0){ /*if something was written to the outbuffer, then buffer it internally*/ - low_my_binary_strcat(tmp, s->total_out - THIS->total_out_previous_buf,&(THIS->intern_buffer)); + low_my_binary_strcat(tmp, TOTAL_OUT - THIS->total_out_previous_buf,&(THIS->intern_buffer)); THIS->internbuf = &(THIS->intern_buffer); - THIS->total_out_previous_buf = s->total_out; + THIS->total_out_previous_buf = TOTAL_OUT; } /*free the outbuffer*/ free(tmp); @@ -283,7 +292,7 @@ PIKECLASS Deflate retval = bzCompress(s, mode); if(tmp != NULL){ - low_my_binary_strcat(tmp,s->total_out-total_out_old,&retbuf); + low_my_binary_strcat(tmp,TOTAL_OUT-total_out_old,&retbuf); free(tmp); } if(retval < 0){ @@ -307,7 +316,7 @@ PIKECLASS Deflate } s->next_out = tmp; s->avail_out = i * DEFL_BUF_SIZE; - total_out_old = s->total_out; + total_out_old = TOTAL_OUT; } } return (&retbuf); @@ -334,20 +343,20 @@ PIKECLASS Deflate low_make_buf_space(DEFL_BUF_SIZE, &retbuf); ret = do_deflate(data, retbuf,BZ_FLUSH, args); - if(s->total_out - THIS->total_out_previous_flush > 0){ + if(TOTAL_OUT - THIS->total_out_previous_flush > 0){ if(THIS->total_out_previous_buf > THIS->total_out_previous_flush){ - low_my_binary_strcat(ret->s.str,s->total_out - THIS->total_out_previous_buf, &(THIS->intern_buffer)); - retstr = make_shared_binary_string(THIS->intern_buffer.s.str, s->total_out - THIS->total_out_previous_flush); + low_my_binary_strcat(ret->s.str,TOTAL_OUT - THIS->total_out_previous_buf, &(THIS->intern_buffer)); + retstr = make_shared_binary_string(THIS->intern_buffer.s.str, TOTAL_OUT - THIS->total_out_previous_flush); } else{ - retstr = make_shared_binary_string(ret->s.str,s->total_out-THIS->total_out_previous_flush); + retstr = make_shared_binary_string(ret->s.str,TOTAL_OUT-THIS->total_out_previous_flush); } if(THIS->internbuf != NULL){ toss_buffer(&THIS->intern_buffer); THIS->internbuf = NULL; } - THIS->total_out_previous_flush = s->total_out; - THIS->total_out_previous_buf = s->total_out; + THIS->total_out_previous_flush = TOTAL_OUT; + THIS->total_out_previous_buf = TOTAL_OUT; } else{ retstr = make_shared_binary_string("",0); @@ -383,17 +392,17 @@ PIKECLASS Deflate ret = do_deflate(data, retbuf,BZ_FINISH, args); /*use perhaps a better check?*/ - if(s->total_out - THIS->total_out_previous_flush > 0){ + if(TOTAL_OUT - THIS->total_out_previous_flush > 0){ if(THIS->total_out_previous_buf > THIS->total_out_previous_flush){ - low_my_binary_strcat(ret->s.str,s->total_out - THIS->total_out_previous_buf, &(THIS->intern_buffer)); - retstr = make_shared_binary_string(THIS->intern_buffer.s.str, s->total_out - THIS->total_out_previous_flush); + low_my_binary_strcat(ret->s.str,TOTAL_OUT - THIS->total_out_previous_buf, &(THIS->intern_buffer)); + retstr = make_shared_binary_string(THIS->intern_buffer.s.str, TOTAL_OUT - THIS->total_out_previous_flush); } else{ - retstr = make_shared_binary_string(ret->s.str,s->total_out-THIS->total_out_previous_flush); + retstr = make_shared_binary_string(ret->s.str,TOTAL_OUT-THIS->total_out_previous_flush); } - THIS->total_out_previous_flush = s->total_out; - THIS->total_out_previous_buf = s->total_out; + THIS->total_out_previous_flush = TOTAL_OUT; + THIS->total_out_previous_buf = TOTAL_OUT; } else{ /* something went wrong*/ @@ -651,7 +660,7 @@ PIKECLASS Inflate retval = bzDecompress(s); /* updates next_in, avail_in, total_in, next_out, avail_out, total_out*/ if(tmp != NULL){ - low_my_binary_strcat(tmp,s->total_out-total_out_old,&ret_buffer); + low_my_binary_strcat(tmp,TOTAL_OUT-total_out_old,&ret_buffer); free(tmp); } /* errorcheck*/ @@ -682,20 +691,20 @@ PIKECLASS Inflate } s->next_out = tmp; s->avail_out = i * INFL_BUF_SIZE; - total_out_old = s->total_out; + total_out_old = TOTAL_OUT; } } /*return the bytes decompressed since the last time bytes were returned from this stream, in other words, return a block*/ if((retval == BZ_OK) || (retval==BZ_STREAM_END)){ - if(s->total_out - THIS->total_out_previous_flush > 0){ - retstr = make_shared_binary_string(ret_buffer.s.str,s->total_out-THIS->total_out_previous_flush); + if(TOTAL_OUT - THIS->total_out_previous_flush > 0){ + retstr = make_shared_binary_string(ret_buffer.s.str,TOTAL_OUT-THIS->total_out_previous_flush); } else{ retstr = make_shared_binary_string("",0); } - THIS->total_out_previous_flush = s->total_out; + THIS->total_out_previous_flush = TOTAL_OUT; if(retval == BZ_STREAM_END){ bzDecompressEnd(s); toss_buffer(&(THIS->intern_buffer));/*free the final buffer*/