bzlib 0.4.0.3 → 0.5.0.0
raw patch · 13 files changed
+226/−146 lines, 13 filesdep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
- Codec.Compression.BZip.Internal: Silent :: Verbosity
- Codec.Compression.BZip.Internal: Verbosity :: Int -> Verbosity
- Codec.Compression.BZip.Internal: compressDefault :: BlockSize -> ByteString -> ByteString
- Codec.Compression.BZip.Internal: compressFull :: BlockSize -> Verbosity -> WorkFactor -> ByteString -> ByteString
- Codec.Compression.BZip.Internal: data Verbosity
- Codec.Compression.BZip.Internal: decompressDefault :: ByteString -> ByteString
- Codec.Compression.BZip.Internal: decompressFull :: Verbosity -> MemoryLevel -> ByteString -> ByteString
+ Codec.Compression.BZip: CompressParams :: BlockSize -> WorkFactor -> Int -> CompressParams
+ Codec.Compression.BZip: DecompressParams :: MemoryLevel -> Int -> DecompressParams
+ Codec.Compression.BZip: DefaultMemoryLevel :: MemoryLevel
+ Codec.Compression.BZip: DefaultWorkFactor :: WorkFactor
+ Codec.Compression.BZip: MinMemoryLevel :: MemoryLevel
+ Codec.Compression.BZip: WorkFactor :: Int -> WorkFactor
+ Codec.Compression.BZip: compressBlockSize :: CompressParams -> BlockSize
+ Codec.Compression.BZip: compressBufferSize :: CompressParams -> Int
+ Codec.Compression.BZip: compressWorkFactor :: CompressParams -> WorkFactor
+ Codec.Compression.BZip: data CompressParams
+ Codec.Compression.BZip: data DecompressParams
+ Codec.Compression.BZip: data MemoryLevel
+ Codec.Compression.BZip: data WorkFactor
+ Codec.Compression.BZip: decompressBufferSize :: DecompressParams -> Int
+ Codec.Compression.BZip: decompressMemoryLevel :: DecompressParams -> MemoryLevel
+ Codec.Compression.BZip: decompressWith :: DecompressParams -> ByteString -> ByteString
+ Codec.Compression.BZip: defaultCompressParams :: CompressParams
+ Codec.Compression.BZip: defaultDecompressParams :: DecompressParams
+ Codec.Compression.BZip.Internal: CompressParams :: BlockSize -> WorkFactor -> Int -> CompressParams
+ Codec.Compression.BZip.Internal: DecompressParams :: MemoryLevel -> Int -> DecompressParams
+ Codec.Compression.BZip.Internal: compress :: CompressParams -> ByteString -> ByteString
+ Codec.Compression.BZip.Internal: compressBlockSize :: CompressParams -> BlockSize
+ Codec.Compression.BZip.Internal: compressBufferSize :: CompressParams -> Int
+ Codec.Compression.BZip.Internal: compressWorkFactor :: CompressParams -> WorkFactor
+ Codec.Compression.BZip.Internal: data CompressParams
+ Codec.Compression.BZip.Internal: data DecompressParams
+ Codec.Compression.BZip.Internal: decompress :: DecompressParams -> ByteString -> ByteString
+ Codec.Compression.BZip.Internal: decompressBufferSize :: DecompressParams -> Int
+ Codec.Compression.BZip.Internal: decompressMemoryLevel :: DecompressParams -> MemoryLevel
+ Codec.Compression.BZip.Internal: defaultCompressParams :: CompressParams
+ Codec.Compression.BZip.Internal: defaultDecompressParams :: DecompressParams
- Codec.Compression.BZip: compressWith :: BlockSize -> ByteString -> ByteString
+ Codec.Compression.BZip: compressWith :: CompressParams -> ByteString -> ByteString
Files
- Codec/Compression/BZip.hs +39/−15
- Codec/Compression/BZip/Internal.hs +111/−67
- Codec/Compression/BZip/Stream.hsc +45/−40
- bzlib.cabal +2/−2
- cbits/blocksort.c +2/−2
- cbits/bzlib.c +4/−3
- cbits/bzlib.h +2/−2
- cbits/bzlib_private.h +11/−5
- cbits/compress.c +2/−2
- cbits/crctable.c +2/−2
- cbits/decompress.c +2/−2
- cbits/huffman.c +2/−2
- cbits/randtable.c +2/−2
Codec/Compression/BZip.hs view
@@ -1,9 +1,9 @@ ----------------------------------------------------------------------------- -- |--- Copyright : (c) 2006 Duncan Coutts+-- Copyright : (c) 2006-2008 Duncan Coutts -- License : BSD-style ----- Maintainer : duncan.coutts@worc.ox.ac.uk+-- Maintainer : duncan@haskell.org -- Stability : provisional -- Portability : portable (H98 + FFI) --@@ -20,8 +20,8 @@ module Codec.Compression.BZip ( -- | This module provides pure functions for compressing and decompressing- -- streams of data represented by lazy 'ByteString's. This makes it easy to- -- use either in memory or with disk or network IO.+ -- streams of data in the bzip2 format represented by lazy 'ByteString's.+ -- This makes it easy to use either in memory or with disk or network IO. -- -- For example a simple bzip compression program is just: --@@ -35,19 +35,28 @@ -- > content <- fmap BZip.decompress (readFile file) -- - -- * Compression+ -- * Simple compression and decompression compress,+ decompress,++ -- * Extended api with control over compression parameters compressWith,- BlockSize(..),+ decompressWith, - -- * Decompression- decompress+ CompressParams(..), defaultCompressParams,+ DecompressParams(..), defaultDecompressParams, + -- ** The compression parameter types+ BlockSize(..),+ WorkFactor(..),+ MemoryLevel(..),+ ) where import Data.ByteString.Lazy (ByteString) -import Codec.Compression.BZip.Internal as Internal+import qualified Codec.Compression.BZip.Internal as Internal+import Codec.Compression.BZip.Internal hiding (compress, decompress) -- | Decompress a stream of data in the bzip2 format.@@ -68,9 +77,18 @@ -- stream before doing any IO action that depends on it. -- decompress :: ByteString -> ByteString-decompress = Internal.decompressDefault+decompress = Internal.decompress defaultDecompressParams +-- | Like 'decompress' but with the ability to specify various decompression+-- parameters. Typical usage:+--+-- > decompressWith defaultCompressParams { ... }+--+decompressWith :: DecompressParams -> ByteString -> ByteString+decompressWith = Internal.decompress++ -- | Compress a stream of data into the bzip2 format. -- -- This uses the default compression level which uses the largest compression@@ -78,11 +96,17 @@ -- the compression block size. -- compress :: ByteString -> ByteString-compress = Internal.compressDefault DefaultBlockSize+compress = Internal.compress defaultCompressParams --- | Like 'compress' but with an extra parameter to specify the block size--- used for compression.+-- | Like 'compress' but with the ability to specify compression parameters.+-- Typical usage: ---compressWith :: BlockSize -> ByteString -> ByteString-compressWith = Internal.compressDefault+-- > compressWith defaultCompressParams { ... }+--+-- In particular you can set the compression block size:+--+-- > compressWith defaultCompressParams { compressBlockSize = BlockSize 1 }+--+compressWith :: CompressParams -> ByteString -> ByteString+compressWith = Internal.compress
Codec/Compression/BZip/Internal.hs view
@@ -1,9 +1,10 @@+{-# LANGUAGE CPP #-} ----------------------------------------------------------------------------- -- |--- Copyright : (c) 2006-2007 Duncan Coutts+-- Copyright : (c) 2006-2008 Duncan Coutts -- License : BSD-style ----- Maintainer : duncan.coutts@worc.ox.ac.uk+-- Maintainer : duncan@haskell.org -- Stability : provisional -- Portability : portable (H98 + FFI) --@@ -12,18 +13,20 @@ ----------------------------------------------------------------------------- module Codec.Compression.BZip.Internal ( - -- * Compression and decompression- compressDefault,- decompressDefault,- Stream.BlockSize(..),+ -- * Compression+ compress,+ CompressParams(..),+ defaultCompressParams, - -- * The same but with the full set of parameters- compressFull,- decompressFull,+ -- * Decompression+ decompress,+ DecompressParams(..),+ defaultDecompressParams,++ -- * The compression parameter types+ Stream.BlockSize(..), Stream.WorkFactor(..), Stream.MemoryLevel(..),- Stream.Verbosity(..),- ) where import Prelude hiding (length)@@ -40,55 +43,102 @@ import qualified Codec.Compression.BZip.Stream as Stream import Codec.Compression.BZip.Stream (Stream) -compressDefault- :: Stream.BlockSize- -> L.ByteString- -> L.ByteString-compressDefault blockSize =- compressFull blockSize- Stream.Silent- Stream.DefaultWorkFactor+-- | The full set of parameters for compression. The defaults are+-- 'defaultCompressParams'.+--+-- The 'compressBufferSize' is the size of the first output buffer containing+-- the compressed data. If you know an approximate upper bound on the size of+-- the compressed data then setting this parameter can save memory. The default+-- compression output buffer size is @16k@. If your extimate is wrong it does+-- not matter too much, the default buffer size will be used for the remaining+-- chunks.+--+data CompressParams = CompressParams {+ compressBlockSize :: Stream.BlockSize,+ compressWorkFactor :: Stream.WorkFactor,+ compressBufferSize :: Int+} -decompressDefault- :: L.ByteString- -> L.ByteString-decompressDefault =- decompressFull Stream.Silent- Stream.DefaultMemoryLevel+-- | The full set of parameters for decompression. The defaults are+-- 'defaultDecompressParams'.+--+-- The 'decompressBufferSize' is the size of the first output buffer,+-- containing the uncompressed data. If you know an exact or approximate upper+-- bound on the size of the decompressed data then setting this parameter can+-- save memory. The default decompression output buffer size is @32k@. If your+-- extimate is wrong it does not matter too much, the default buffer size will+-- be used for the remaining chunks.+--+-- One particular use case for setting the 'decompressBufferSize' is if you+-- know the exact size of the decompressed data and want to produce a strict+-- 'Data.ByteString.ByteString'. The compression and deccompression functions+-- use lazy 'Data.ByteString.Lazy.ByteString's but if you set the+-- 'decompressBufferSize' correctly then you can generate a lazy+-- 'Data.ByteString.Lazy.ByteString' with exactly one chunk, which can be+-- converted to a strict 'Data.ByteString.ByteString' in @O(1)@ time using+-- @'Data.ByteString.concat' . 'Data.ByteString.Lazy.toChunks'@.+--+data DecompressParams = DecompressParams {+ decompressMemoryLevel :: Stream.MemoryLevel,+ decompressBufferSize :: Int+} -{-# NOINLINE compressFull #-}-compressFull- :: Stream.BlockSize- -> Stream.Verbosity- -> Stream.WorkFactor+-- | The default set of parameters for compression. This is typically used with+-- the @compressWith@ function with specific paramaters overridden.+--+defaultCompressParams :: CompressParams+defaultCompressParams = CompressParams {+ compressBlockSize = Stream.DefaultBlockSize,+ compressWorkFactor = Stream.DefaultWorkFactor,+ compressBufferSize = defaultCompressBufferSize+}++-- | The default set of parameters for decompression. This is typically used with+-- the @compressWith@ function with specific paramaters overridden.+--+defaultDecompressParams :: DecompressParams+defaultDecompressParams = DecompressParams {+ decompressMemoryLevel = Stream.DefaultMemoryLevel,+ decompressBufferSize = defaultDecompressBufferSize+}++-- | The default chunk sizes for the output of compression and decompression+-- are 16k and 32k respectively (less a small accounting overhead).+--+defaultCompressBufferSize, defaultDecompressBufferSize :: Int+#ifdef BYTESTRING_IN_BASE+defaultCompressBufferSize = 16 * 1024 - 16+defaultDecompressBufferSize = 32 * 1024 - 16+#else+defaultCompressBufferSize = 16 * 1024 - L.chunkOverhead+defaultDecompressBufferSize = 32 * 1024 - L.chunkOverhead+#endif++{-# NOINLINE compress #-}+compress+ :: CompressParams -> L.ByteString -> L.ByteString-compressFull blockSize verbosity workFactor input =+compress (CompressParams blockSize workFactor initChunkSize) input = L.fromChunks $ Stream.run $ do- Stream.compressInit blockSize verbosity workFactor+ Stream.compressInit blockSize Stream.Silent workFactor case L.toChunks input of- [] -> fillBuffers []+ [] -> fillBuffers 14 [] --bzip2 header is 14 bytes S.PS inFPtr offset length : chunks -> do Stream.pushInputBuffer inFPtr offset length- fillBuffers chunks+ fillBuffers initChunkSize chunks where-#ifdef BYTESTRING_IN_BASE- outChunkSize = 16 * 1024 - 16-#else- outChunkSize = 32 * 1024 - L.chunkOverhead-#endif- -- we flick between two states: -- * where one or other buffer is empty -- - in which case we refill one or both -- * where both buffers are non-empty -- - in which case we compress until a buffer is empty - fillBuffers ::- [S.ByteString]- -> Stream [S.ByteString]- fillBuffers inChunks = do+ fillBuffers :: Int+ -> [S.ByteString]+ -> Stream [S.ByteString]+ fillBuffers outChunkSize inChunks = do Stream.consistencyCheck -- in this state there are two possabilities:@@ -133,9 +183,10 @@ outputBufferFull <- Stream.outputBufferFull if outputBufferFull then do (outFPtr, offset, length) <- Stream.popOutputBuffer- outChunks <- Stream.unsafeInterleave (fillBuffers inChunks)+ outChunks <- Stream.unsafeInterleave+ (fillBuffers defaultCompressBufferSize inChunks) return (S.PS outFPtr offset length : outChunks)- else do fillBuffers inChunks+ else do fillBuffers defaultCompressBufferSize inChunks Stream.StreamEnd -> do inputBufferEmpty <- Stream.inputBufferEmpty@@ -149,39 +200,31 @@ return [] -{-# NOINLINE decompressFull #-}-decompressFull- :: Stream.Verbosity- -> Stream.MemoryLevel+{-# NOINLINE decompress #-}+decompress+ :: DecompressParams -> L.ByteString -> L.ByteString-decompressFull verbosity memLevel input =+decompress (DecompressParams memLevel initChunkSize) input = L.fromChunks $ Stream.run $ do- Stream.decompressInit verbosity memLevel+ Stream.decompressInit Stream.Silent memLevel case L.toChunks input of- [] -> fillBuffers []+ [] -> fillBuffers 4 [] --always an error anyway S.PS inFPtr offset length : chunks -> do Stream.pushInputBuffer inFPtr offset length- fillBuffers chunks+ fillBuffers initChunkSize chunks where- outChunkSize :: Int-#ifdef BYTESTRING_IN_BASE- outChunkSize = 16 * 1024 - 16-#else- outChunkSize = 32 * 1024 - L.chunkOverhead-#endif- -- we flick between two states: -- * where one or other buffer is empty -- - in which case we refill one or both -- * where both buffers are non-empty -- - in which case we compress until a buffer is empty - fillBuffers ::- [S.ByteString]- -> Stream [S.ByteString]- fillBuffers inChunks = do+ fillBuffers :: Int+ -> [S.ByteString]+ -> Stream [S.ByteString]+ fillBuffers outChunkSize inChunks = do -- in this state there are two possabilities: -- * no outbut buffer space is available@@ -225,13 +268,14 @@ outputBufferFull <- Stream.outputBufferFull if outputBufferFull then do (outFPtr, offset, length) <- Stream.popOutputBuffer- outChunks <- Stream.unsafeInterleave (fillBuffers inChunks)+ outChunks <- Stream.unsafeInterleave+ (fillBuffers defaultDecompressBufferSize inChunks) return (S.PS outFPtr offset length : outChunks) else do -- We need to detect if we ran out of input: inputBufferEmpty <- Stream.inputBufferEmpty if inputBufferEmpty && null inChunks then fail "premature end of compressed stream"- else fillBuffers inChunks+ else fillBuffers defaultDecompressBufferSize inChunks Stream.StreamEnd -> do -- Note that there may be input bytes still available if the stream
Codec/Compression/BZip/Stream.hsc view
@@ -1,4 +1,4 @@-{-# OPTIONS_GHC -fno-warn-missing-methods #-}+{-# LANGUAGE ForeignFunctionInterface #-} ----------------------------------------------------------------------------- -- | -- Copyright : (c) 2006-2008 Duncan Coutts@@ -56,11 +56,16 @@ ) where import Foreign+ ( Word8, Ptr, nullPtr, plusPtr, peekByteOff, pokeByteOff, mallocBytes+ , ForeignPtr, FinalizerPtr, newForeignPtr_, addForeignPtrFinalizer+ , finalizeForeignPtr, withForeignPtr, touchForeignPtr+ , unsafeForeignPtrToPtr, unsafePerformIO ) import Foreign.C+ ( CInt, CUInt ) #ifdef BYTESTRING_IN_BASE-import Data.ByteString.Base+import Data.ByteString.Base (nullForeignPtr) #else-import Data.ByteString.Internal+import Data.ByteString.Internal (nullForeignPtr) #endif import System.IO.Unsafe (unsafeInterleaveIO) import System.IO (hPutStrLn, stderr)@@ -363,13 +368,13 @@ | StreamEnd -- ^ Compression of data was completed, or the logical stream -- end was detected during decompression. -instance Enum Status where- toEnum (#{const BZ_OK}) = Ok- toEnum (#{const BZ_RUN_OK}) = Ok- toEnum (#{const BZ_FLUSH_OK}) = Ok- toEnum (#{const BZ_FINISH_OK}) = Ok- toEnum (#{const BZ_STREAM_END}) = StreamEnd- toEnum other = error ("unexpected bzip2 status: " ++ show other)+toStatus :: CInt -> Status+toStatus (#{const BZ_OK}) = Ok+toStatus (#{const BZ_RUN_OK}) = Ok+toStatus (#{const BZ_FLUSH_OK}) = Ok+toStatus (#{const BZ_FINISH_OK}) = Ok+toStatus (#{const BZ_STREAM_END}) = StreamEnd+toStatus other = error ("unexpected bzip2 status: " ++ show other) failIfError :: CInt -> Stream () failIfError errno@@ -392,10 +397,10 @@ | Flush | Finish -instance Enum Action where- fromEnum Run = #{const BZ_RUN}- fromEnum Flush = #{const BZ_FLUSH}- fromEnum Finish = #{const BZ_FINISH}+fromAction :: Action -> CInt+fromAction Run = #{const BZ_RUN}+fromAction Flush = #{const BZ_FLUSH}+fromAction Finish = #{const BZ_FINISH} -- | The block size affects both the compression ratio achieved, and the amount -- of memory needed for compression and decompression.@@ -429,11 +434,11 @@ DefaultBlockSize -- ^ The default block size is also the maximum. | BlockSize Int -- ^ A specific block size between 1 and 9. -instance Enum BlockSize where- fromEnum DefaultBlockSize = 9- fromEnum (BlockSize n)- | n >= 1 && n <= 9 = n- | otherwise = error "BlockSize must be in the range 1..9"+fromBlockSize :: BlockSize -> CInt+fromBlockSize DefaultBlockSize = 9+fromBlockSize (BlockSize n)+ | n >= 1 && n <= 9 = fromIntegral n+ | otherwise = error "BlockSize must be in the range 1..9" -- | For files compressed with the default 900k block size, decompression will -- require about 3700k to decompress. To support decompression of any file in@@ -447,9 +452,9 @@ -- halves the memory needed but also halves the -- decompression speed. -instance Enum MemoryLevel where- fromEnum DefaultMemoryLevel = 0- fromEnum MinMemoryLevel = 1+fromMemoryLevel :: MemoryLevel -> CInt+fromMemoryLevel DefaultMemoryLevel = 0+fromMemoryLevel MinMemoryLevel = 1 -- | The 'WorkFactor' parameter controls how the compression phase behaves when -- presented with worst case, highly repetitive, input data. If compression@@ -472,11 +477,11 @@ DefaultWorkFactor -- ^ The default work factor is 30. | WorkFactor Int -- ^ Allowable values range from 1 to 250 inclusive. -instance Enum WorkFactor where- fromEnum DefaultWorkFactor = 0- fromEnum (WorkFactor n)- | n >= 1 && n <= 250 = n- | otherwise = error "WorkFactor must be in the range 1..250"+fromWorkFactor :: WorkFactor -> CInt+fromWorkFactor DefaultWorkFactor = 0+fromWorkFactor (WorkFactor n)+ | n >= 1 && n <= 250 = fromIntegral n+ | otherwise = error "WorkFactor must be in the range 1..250" -- | The 'Verbosity' parameter is a number between 0 and 4. 0 is silent, and -- greater numbers give increasingly verbose monitoring\/debugging output.@@ -484,11 +489,11 @@ data Verbosity = Silent -- ^ No output. This is the default. | Verbosity Int -- ^ A specific level between 0 and 4. -instance Enum Verbosity where- fromEnum Silent = 0- fromEnum (Verbosity n)- | n >= 0 && n <= 4 = n- | otherwise = error "Verbosity must be in the range 0..4"+fromVerbosity :: Verbosity -> CInt+fromVerbosity Silent = 0+fromVerbosity (Verbosity n)+ | n >= 0 && n <= 4 = fromIntegral n+ | otherwise = error "Verbosity must be in the range 0..4" withStreamPtr :: (Ptr StreamState -> IO a) -> Stream a withStreamPtr f = do@@ -532,8 +537,8 @@ decompressInit verbosity memoryLevel = do err <- withStreamState $ \bzstream -> bzDecompressInit bzstream- (fromIntegral (fromEnum verbosity))- (fromIntegral (fromEnum memoryLevel))+ (fromVerbosity verbosity)+ (fromMemoryLevel memoryLevel) failIfError err getStreamState >>= unsafeLiftIO . addForeignPtrFinalizer bzDecompressEnd @@ -541,9 +546,9 @@ compressInit blockSize verbosity workFactor = do err <- withStreamState $ \bzstream -> bzCompressInit bzstream- (fromIntegral (fromEnum blockSize))- (fromIntegral (fromEnum verbosity))- (fromIntegral (fromEnum workFactor))+ (fromBlockSize blockSize)+ (fromVerbosity verbosity)+ (fromWorkFactor workFactor) failIfError err getStreamState >>= unsafeLiftIO . addForeignPtrFinalizer bzCompressEnd @@ -552,14 +557,14 @@ err <- withStreamState $ \bzstream -> bzDecompress bzstream failIfError err- return (toEnum (fromIntegral err))+ return (toStatus err) compress_ :: Action -> Stream Status compress_ action = do err <- withStreamState $ \bzstream ->- bzCompress bzstream (fromIntegral (fromEnum action))+ bzCompress bzstream (fromAction action) failIfError err- return (toEnum (fromIntegral err))+ return (toStatus err) -- | This never needs to be used as the stream's resources will be released -- automatically when no longer needed, however this can be used to release
bzlib.cabal view
@@ -1,5 +1,5 @@ name: bzlib-version: 0.4.0.3+version: 0.5.0.0 copyright: (c) 2006-2008 Duncan Coutts license: BSD3 license-file: LICENSE@@ -44,7 +44,7 @@ extra-libraries: bz2 else -- However for the benefit of users of Windows (which does not have zlib- -- by default) we bundle a complete copy of the C sources of bzip2-1.0.4+ -- by default) we bundle a complete copy of the C sources of bzip2-1.0.5 c-sources: cbits/blocksort.c cbits/bzlib.c cbits/compress.c cbits/crctable.c cbits/decompress.c cbits/huffman.c cbits/randtable.c
cbits/blocksort.c view
@@ -8,8 +8,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.4 of 20 December 2006- Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>+ bzip2/libbzip2 version 1.0.5 of 10 December 2007+ Copyright (C) 1996-2007 Julian Seward <jseward@bzip.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file.
cbits/bzlib.c view
@@ -8,8 +8,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.4 of 20 December 2006- Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>+ bzip2/libbzip2 version 1.0.5 of 10 December 2007+ Copyright (C) 1996-2007 Julian Seward <jseward@bzip.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file.@@ -48,7 +48,7 @@ "component, you should also report this bug to the author(s)\n" "of that program. Please make an effort to report this bug;\n" "timely and accurate bug reports eventually lead to higher\n"- "quality software. Thanks. Julian Seward, 15 February 2005.\n\n",+ "quality software. Thanks. Julian Seward, 10 December 2007.\n\n", errcode, BZ2_bzlibVersion() );@@ -598,6 +598,7 @@ UInt32 c_tPos = s->tPos; char* cs_next_out = s->strm->next_out; unsigned int cs_avail_out = s->strm->avail_out;+ Int32 ro_blockSize100k = s->blockSize100k; /* end restore */ UInt32 avail_out_INIT = cs_avail_out;
cbits/bzlib.h view
@@ -8,8 +8,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.4 of 20 December 2006- Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>+ bzip2/libbzip2 version 1.0.5 of 10 December 2007+ Copyright (C) 1996-2007 Julian Seward <jseward@bzip.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file.
cbits/bzlib_private.h view
@@ -8,8 +8,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.4 of 20 December 2006- Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>+ bzip2/libbzip2 version 1.0.5 of 10 December 2007+ Copyright (C) 1996-2007 Julian Seward <jseward@bzip.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file.@@ -36,7 +36,7 @@ /*-- General stuff. --*/ -#define BZ_VERSION "1.0.4, 20-Dec-2006"+#define BZ_VERSION "1.0.5, 10-Dec-2007" typedef char Char; typedef unsigned char Bool;@@ -442,11 +442,15 @@ /*-- Macros for decompression. --*/ #define BZ_GET_FAST(cccc) \+ /* c_tPos is unsigned, hence test < 0 is pointless. */ \+ if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \ s->tPos = s->tt[s->tPos]; \ cccc = (UChar)(s->tPos & 0xff); \ s->tPos >>= 8; #define BZ_GET_FAST_C(cccc) \+ /* c_tPos is unsigned, hence test < 0 is pointless. */ \+ if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \ c_tPos = c_tt[c_tPos]; \ cccc = (UChar)(c_tPos & 0xff); \ c_tPos >>= 8;@@ -469,8 +473,10 @@ (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16)) #define BZ_GET_SMALL(cccc) \- cccc = BZ2_indexIntoF ( s->tPos, s->cftab ); \- s->tPos = GET_LL(s->tPos);+ /* c_tPos is unsigned, hence test < 0 is pointless. */ \+ if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \+ cccc = BZ2_indexIntoF ( s->tPos, s->cftab ); \+ s->tPos = GET_LL(s->tPos); /*-- externs for decompression. --*/
cbits/compress.c view
@@ -8,8 +8,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.4 of 20 December 2006- Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>+ bzip2/libbzip2 version 1.0.5 of 10 December 2007+ Copyright (C) 1996-2007 Julian Seward <jseward@bzip.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file.
cbits/crctable.c view
@@ -8,8 +8,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.4 of 20 December 2006- Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>+ bzip2/libbzip2 version 1.0.5 of 10 December 2007+ Copyright (C) 1996-2007 Julian Seward <jseward@bzip.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file.
cbits/decompress.c view
@@ -8,8 +8,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.4 of 20 December 2006- Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>+ bzip2/libbzip2 version 1.0.5 of 10 December 2007+ Copyright (C) 1996-2007 Julian Seward <jseward@bzip.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file.
cbits/huffman.c view
@@ -8,8 +8,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.4 of 20 December 2006- Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>+ bzip2/libbzip2 version 1.0.5 of 10 December 2007+ Copyright (C) 1996-2007 Julian Seward <jseward@bzip.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file.
cbits/randtable.c view
@@ -8,8 +8,8 @@ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. - bzip2/libbzip2 version 1.0.4 of 20 December 2006- Copyright (C) 1996-2006 Julian Seward <jseward@bzip.org>+ bzip2/libbzip2 version 1.0.5 of 10 December 2007+ Copyright (C) 1996-2007 Julian Seward <jseward@bzip.org> Please read the WARNING, DISCLAIMER and PATENTS sections in the README file.