@@ -39,23 +39,35 @@ class LZFSETransform : public Transform
3939{
4040
4141public:
42- LZFSETransform ():
43- Transform (DecodeTransform, " LZFSE" , " LZFSE" , " Compression" )
42+ LZFSETransform (): Transform(BinaryCodecTransform, " LZFSE" , " LZFSE" , " Compress" )
4443 {
4544 }
4645
4746 virtual bool Decode (const DataBuffer& input, DataBuffer& output, const std::map<std::string, DataBuffer>& params)
4847 {
4948 size_t outputBufferSize = input.GetLength () * 6 ;
50- uint8_t * lzfseOutputBuffer = (uint8_t *)malloc (outputBufferSize);
51- uint8_t * scratchBuffer = (uint8_t *)malloc (lzfse_decode_scratch_size ());
52- size_t outSize = lzfse_decode_buffer (lzfseOutputBuffer, outputBufferSize,
53- (uint8_t *)input.GetData (), input.GetLength (), scratchBuffer);
54-
55- free (scratchBuffer);
56-
57- output = DataBuffer (lzfseOutputBuffer, outSize);
49+ std::unique_ptr<uint8_t []> lzfseOutputBuffer (new uint8_t [outputBufferSize]);
50+ std::unique_ptr<uint8_t []> scratchBuffer (new uint8_t [lzfse_decode_scratch_size ()]);
51+ size_t outSize = lzfse_decode_buffer (lzfseOutputBuffer.get (), outputBufferSize,
52+ (uint8_t *)input.GetData (), input.GetLength (),
53+ scratchBuffer.get ());
54+ if (!outSize)
55+ return false ;
56+ output = DataBuffer (lzfseOutputBuffer.get (), outSize);
57+ return true ;
58+ }
5859
60+ virtual bool Encode (const DataBuffer& input, DataBuffer& output, const std::map<std::string, DataBuffer>&)
61+ {
62+ size_t outputBufferSize = input.GetLength () + (input.GetLength () / 16 ) + 64 ;
63+ std::unique_ptr<uint8_t []> lzfseOutputBuffer (new uint8_t [outputBufferSize]);
64+ std::unique_ptr<uint8_t []> scratchBuffer (new uint8_t [lzfse_encode_scratch_size ()]);
65+ size_t outSize = lzfse_encode_buffer (lzfseOutputBuffer.get (), outputBufferSize,
66+ (uint8_t *)input.GetData (), input.GetLength (),
67+ scratchBuffer.get ());
68+ if (!outSize)
69+ return false ;
70+ output = DataBuffer (lzfseOutputBuffer.get (), outSize);
5971 return true ;
6072 }
6173};
0 commit comments