diff options
author | Mike Buland <eichlan@xagasoft.com> | 2009-09-23 23:19:38 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2009-09-23 23:19:38 +0000 |
commit | 1b7caf3368675eb6825e0dca77782a141dfa0392 (patch) | |
tree | 01fb357534875c7a69199e4dd3f0c9d8810810e2 /src/bzip2.cpp | |
parent | 319a773dfcb187bc7e87ae6d64df3b6b6ec4831a (diff) | |
download | libbu++-1b7caf3368675eb6825e0dca77782a141dfa0392.tar.gz libbu++-1b7caf3368675eb6825e0dca77782a141dfa0392.tar.bz2 libbu++-1b7caf3368675eb6825e0dca77782a141dfa0392.tar.xz libbu++-1b7caf3368675eb6825e0dca77782a141dfa0392.zip |
Wow, ok, file was broken on changing position in the stream, it wouldn't reset
the end of stream flag. Now it does reset it, and assumes that you've placed
the position not at the end, if you have, it will detect it again immediately
upon read.
BZip2 now provides a method of getting the number of bytes written out, i.e.
the compressed size of the output, I have to figure out the input side next...
Diffstat (limited to 'src/bzip2.cpp')
-rw-r--r-- | src/bzip2.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/bzip2.cpp b/src/bzip2.cpp index 0a56f83..7f6e45e 100644 --- a/src/bzip2.cpp +++ b/src/bzip2.cpp | |||
@@ -12,7 +12,8 @@ using namespace Bu; | |||
12 | 12 | ||
13 | Bu::BZip2::BZip2( Bu::Stream &rNext, int nCompression ) : | 13 | Bu::BZip2::BZip2( Bu::Stream &rNext, int nCompression ) : |
14 | Bu::Filter( rNext ), | 14 | Bu::Filter( rNext ), |
15 | nCompression( nCompression ) | 15 | nCompression( nCompression ), |
16 | sTotalOut( 0 ) | ||
16 | { | 17 | { |
17 | TRACE( nCompression ); | 18 | TRACE( nCompression ); |
18 | start(); | 19 | start(); |
@@ -50,7 +51,7 @@ size_t Bu::BZip2::stop() | |||
50 | } | 51 | } |
51 | else | 52 | else |
52 | { | 53 | { |
53 | size_t sTotal = 0; | 54 | // size_t sTotal = 0; |
54 | for(;;) | 55 | for(;;) |
55 | { | 56 | { |
56 | bzState.next_in = NULL; | 57 | bzState.next_in = NULL; |
@@ -60,7 +61,7 @@ size_t Bu::BZip2::stop() | |||
60 | int res = BZ2_bzCompress( &bzState, BZ_FINISH ); | 61 | int res = BZ2_bzCompress( &bzState, BZ_FINISH ); |
61 | if( bzState.avail_out < nBufSize ) | 62 | if( bzState.avail_out < nBufSize ) |
62 | { | 63 | { |
63 | sTotal += rNext.write( pBuf, nBufSize-bzState.avail_out ); | 64 | sTotalOut += rNext.write( pBuf, nBufSize-bzState.avail_out ); |
64 | } | 65 | } |
65 | if( res == BZ_STREAM_END ) | 66 | if( res == BZ_STREAM_END ) |
66 | break; | 67 | break; |
@@ -68,7 +69,7 @@ size_t Bu::BZip2::stop() | |||
68 | BZ2_bzCompressEnd( &bzState ); | 69 | BZ2_bzCompressEnd( &bzState ); |
69 | delete[] pBuf; | 70 | delete[] pBuf; |
70 | pBuf = NULL; | 71 | pBuf = NULL; |
71 | return sTotal; | 72 | return sTotalOut; |
72 | } | 73 | } |
73 | } | 74 | } |
74 | return 0; | 75 | return 0; |
@@ -182,7 +183,7 @@ size_t Bu::BZip2::write( const void *pData, size_t nBytes ) | |||
182 | if( bReading == true ) | 183 | if( bReading == true ) |
183 | throw ExceptionBase("This bzip2 filter is in reading mode, you can't write."); | 184 | throw ExceptionBase("This bzip2 filter is in reading mode, you can't write."); |
184 | 185 | ||
185 | size_t sTotalOut = 0; | 186 | // size_t sTotalOut = 0; |
186 | bzState.next_in = (char *)pData; | 187 | bzState.next_in = (char *)pData; |
187 | bzState.avail_in = nBytes; | 188 | bzState.avail_in = nBytes; |
188 | for(;;) | 189 | for(;;) |
@@ -209,3 +210,8 @@ bool Bu::BZip2::isOpen() | |||
209 | return (bzState.state != NULL); | 210 | return (bzState.state != NULL); |
210 | } | 211 | } |
211 | 212 | ||
213 | size_t Bu::BZip2::getCompressedSize() | ||
214 | { | ||
215 | return sTotalOut; | ||
216 | } | ||
217 | |||