X-Git-Url: http://git.ieval.ro/?p=io-compress-brotli.git;a=blobdiff_plain;f=Brotli.xs;fp=Brotli.xs;h=2370abbcef9b2df7dcfa86ded4ec306c2dea17f7;hp=5b7d008594a958e07e8a12f5be841a9655bd52d8;hb=56bfd9c0a0380461b810f820869768f4e8a7ad4a;hpb=390e0fef70ee97b173f25b04ce6308c572a0660a diff --git a/Brotli.xs b/Brotli.xs index 5b7d008..2370abb 100644 --- a/Brotli.xs +++ b/Brotli.xs @@ -5,9 +5,8 @@ #include "ppport.h" -#include -#include -#include +#include +#include #define BUFFER_SIZE 1048576 @@ -24,24 +23,20 @@ MODULE = IO::Compress::Brotli PACKAGE = IO::Uncompress::Brotli PROTOTYPES: ENABLE SV* -unbro(buffer) +unbro(buffer, decoded_size) SV* buffer + size_t decoded_size PREINIT: - size_t decoded_size; STRLEN encoded_size; uint8_t *encoded_buffer, *decoded_buffer; CODE: encoded_buffer = (uint8_t*) SvPV(buffer, encoded_size); - if(!BrotliDecompressedSize(encoded_size, encoded_buffer, &decoded_size)){ - croak("Error in BrotliDecompressedSize"); - } - Newx(decoded_buffer, decoded_size+1, uint8_t); - decoded_buffer[decoded_size]=0; + Newx(decoded_buffer, decoded_size, uint8_t); if(!BrotliDecoderDecompress(encoded_size, encoded_buffer, &decoded_size, decoded_buffer)){ croak("Error in BrotliDecoderDecompress"); } RETVAL = newSV(0); - sv_usepvn_flags(RETVAL, decoded_buffer, decoded_size, SV_HAS_TRAILING_NUL); + sv_usepvn(RETVAL, decoded_buffer, decoded_size); OUTPUT: RETVAL @@ -73,8 +68,8 @@ decompress(self, in) next_in = (uint8_t*) SvPV(in, available_in); Newx(buffer, BUFFER_SIZE, uint8_t); RETVAL = newSVpv("", 0); - result = BROTLI_RESULT_NEEDS_MORE_OUTPUT; - while(result == BROTLI_RESULT_NEEDS_MORE_OUTPUT) { + result = BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT; + while(result == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) { next_out = buffer; available_out=BUFFER_SIZE; result = BrotliDecoderDecompressStream( self->decoder, @@ -122,7 +117,7 @@ bro(buffer, quality=BROTLI_DEFAULT_QUALITY, lgwin=BROTLI_DEFAULT_WINDOW) if( quality < BROTLI_MIN_QUALITY || quality > BROTLI_MAX_QUALITY ) { croak("Invalid quality value"); } - if( lgwin < kBrotliMinWindowBits || lgwin > kBrotliMaxWindowBits ) { + if( lgwin < BROTLI_MIN_WINDOW_BITS || lgwin > BROTLI_MAX_WINDOW_BITS ) { croak("Invalid window value"); } decoded_buffer = (uint8_t*) SvPV(buffer, decoded_size); @@ -172,7 +167,7 @@ bool BrotliEncoderSetParameter(self, value) croak("BrotliEncoderSetParameter may not be called directly"); break; case 1: - if( value < kBrotliMinWindowBits || value > kBrotliMaxWindowBits ) { + if( value < BROTLI_MIN_WINDOW_BITS || value > BROTLI_MAX_WINDOW_BITS ) { croak("Invalid window value"); } param = BROTLI_PARAM_LGWIN;