diff options
author | Mike Buland <eichlan@xagasoft.com> | 2007-06-11 07:58:18 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2007-06-11 07:58:18 +0000 |
commit | 55244c8fd50dfda9c7c434cd05fc6280204447dd (patch) | |
tree | 8780ed2bcb2f16c537502b55d09caac82386f754 | |
parent | 408aca47fd423e7c4c38665b892a13c1c9fb1e9a (diff) | |
download | libbu++-55244c8fd50dfda9c7c434cd05fc6280204447dd.tar.gz libbu++-55244c8fd50dfda9c7c434cd05fc6280204447dd.tar.bz2 libbu++-55244c8fd50dfda9c7c434cd05fc6280204447dd.tar.xz libbu++-55244c8fd50dfda9c7c434cd05fc6280204447dd.zip |
Wow that was a stupid bug. OK, decompression is working really well, and it
corrects the underlying stream's position if it can seek, otherwise you just
lose data (for now).
-rw-r--r-- | src/bzip2.cpp | 13 |
1 files changed, 2 insertions, 11 deletions
diff --git a/src/bzip2.cpp b/src/bzip2.cpp index 6bb1429..d3f237a 100644 --- a/src/bzip2.cpp +++ b/src/bzip2.cpp | |||
@@ -64,13 +64,9 @@ void Bu::BZip2::bzError( int code ) | |||
64 | switch( code ) | 64 | switch( code ) |
65 | { | 65 | { |
66 | case BZ_OK: | 66 | case BZ_OK: |
67 | printf("<BZ_OK>\n"); return; | ||
68 | case BZ_RUN_OK: | 67 | case BZ_RUN_OK: |
69 | printf("<BZ_RUN_OK>\n"); return; | ||
70 | case BZ_FLUSH_OK: | 68 | case BZ_FLUSH_OK: |
71 | printf("<BZ_FLUSH_OK>\n"); return; | ||
72 | case BZ_FINISH_OK: | 69 | case BZ_FINISH_OK: |
73 | printf("<BZ_FINISH_OK>\n"); return; | ||
74 | return; | 70 | return; |
75 | 71 | ||
76 | case BZ_CONFIG_ERROR: | 72 | case BZ_CONFIG_ERROR: |
@@ -120,19 +116,16 @@ size_t Bu::BZip2::read( void *pData, size_t nBytes ) | |||
120 | 116 | ||
121 | int nRead = 0; | 117 | int nRead = 0; |
122 | int nReadTotal = bzState.total_out_lo32; | 118 | int nReadTotal = bzState.total_out_lo32; |
119 | bzState.next_out = (char *)pData; | ||
120 | bzState.avail_out = nBytes; | ||
123 | for(;;) | 121 | for(;;) |
124 | { | 122 | { |
125 | bzState.next_out = (char *)pData; | ||
126 | bzState.avail_out = nBytes; | ||
127 | printf(" (pre) in: %db, out: %db\n", bzState.avail_in, bzState.avail_out ); | ||
128 | int ret = BZ2_bzDecompress( &bzState ); | 123 | int ret = BZ2_bzDecompress( &bzState ); |
129 | printf("(post) in: %db, out: %db\n", bzState.avail_in, bzState.avail_out ); | ||
130 | 124 | ||
131 | nReadTotal += nRead-bzState.avail_out; | 125 | nReadTotal += nRead-bzState.avail_out; |
132 | 126 | ||
133 | if( ret == BZ_STREAM_END ) | 127 | if( ret == BZ_STREAM_END ) |
134 | { | 128 | { |
135 | printf("<BZ_STREAM_END>\n"); | ||
136 | if( bzState.avail_in > 0 ) | 129 | if( bzState.avail_in > 0 ) |
137 | { | 130 | { |
138 | if( rNext.canSeek() ) | 131 | if( rNext.canSeek() ) |
@@ -146,8 +139,6 @@ size_t Bu::BZip2::read( void *pData, size_t nBytes ) | |||
146 | 139 | ||
147 | if( bzState.avail_out ) | 140 | if( bzState.avail_out ) |
148 | { | 141 | { |
149 | printf("Still more to fill, in: %db, out: %db\n", bzState.avail_in, bzState.avail_out ); | ||
150 | |||
151 | if( bzState.avail_in == 0 ) | 142 | if( bzState.avail_in == 0 ) |
152 | { | 143 | { |
153 | nRead = rNext.read( pBuf, nBufSize ); | 144 | nRead = rNext.read( pBuf, nBufSize ); |