X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=lib%2FIO%2FUncompress%2FBrotli.pm;h=0cc22e2643e49fed2148760c3885b9484af8df6b;hb=799b2a343f40ccc586481aa7b269da5f0abf513f;hp=7cf3bd65bece4e6d5ff61ca5e01963acf4f85f1e;hpb=f9995f31e58bcdfc9eb528128c6bfcbb0b8fc777;p=io-compress-brotli.git diff --git a/lib/IO/Uncompress/Brotli.pm b/lib/IO/Uncompress/Brotli.pm index 7cf3bd6..0cc22e2 100644 --- a/lib/IO/Uncompress/Brotli.pm +++ b/lib/IO/Uncompress/Brotli.pm @@ -8,31 +8,24 @@ use parent qw/Exporter/; our @EXPORT = qw/unbro/; our @EXPORT_OK = @EXPORT; -our $VERSION = '0.001'; +our $VERSION = '0.004001'; require XSLoader; XSLoader::load('IO::Compress::Brotli', $VERSION); -sub create { - my ($class) = @_; - my $state = BrotliCreateState(); - bless \$state, $class -} - -sub DESTROY { - my ($self) = @_; - BrotliDestroyState($$self) -} - -sub decompress { - my ($self, $data) = @_; - BrotliDecompressStream($$self, $data) -} - -# Untested, probably not working -sub set_dictionary { - my ($self, $dict) = @_; - BrotliSetCustomDictionary($$self, $dict) +# 0.004 has unbro with prototype $$ +# 0.004_001 renames it to unbro_given_size, and provides unbro with +# prototype $;$ which calls: +# * unbro_given_size when called with two arguments +# * the OO interface when called with one argument +sub unbro ($;$) { + my ($buffer, $decoded_size) = @_; + if (defined $decoded_size) { + return unbro_given_size($buffer, $decoded_size) + } else { + my $bro = IO::Uncompress::Brotli->create; + return $bro->decompress($buffer); + } } 1; @@ -48,8 +41,8 @@ IO::Uncompress::Brotli - Read Brotli buffers/streams use IO::Uncompress::Brotli; - # uncompress a buffer - my $decoded = unbro $encoded; + # uncompress a buffer (yielding at most 10MB) + my $decoded = unbro $encoded, 10_000_000; # uncompress a stream my $bro = IO::Uncompress::Brotli->create; @@ -73,13 +66,17 @@ function. =over -=item B(I<$input>) +=item B(I<$input>, I<$maximum_decoded_size>) Takes a whole compressed buffer as input and returns the decompressed -data. This function relies on the BrotliDecompressedSize function. In -other words, it only works if the buffer has a single meta block or -two meta-blocks where the first is uncompressed and the second is -empty. +data. It allocates a buffer of size I<$maximum_decoded_size> to store +the decompressed data, if this is not sufficient (or there is another +error) this function will croak. + +As of version 0.004_001, the I<$maximum_decoded_size> argument is +optional. If not provided, B uses the streaming interface +described in the next section to decompress the buffer in blocks of +one megabyte. The decompressed blocks are concatenated and returned. Exported by default. @@ -106,8 +103,8 @@ uncompressed data. Dies on error. =head1 SEE ALSO -Brotli Compressed Data Format Internet-Draft: -L +RFC 7392 Brotli Compressed Data Format: +L Brotli source code: L @@ -115,9 +112,26 @@ Brotli source code: L Marius Gavrilescu, Emarius@ieval.roE +The encoder bindings, modernisation of the decoder bindings and a +clean up of the overall project were contributed by: + +=over + +=item Quim Rovira, Equim@rovira.catE + +=item Ævar Arnfjörð Bjarmason, Eavarab@gmail.comE + +=item Marcell Szathmári + +=item Mattia Barbon, Emattia@barbon.orgE + +=back + +POD fix by Mark Zabaro, Emarkzabaro@gmail.comE. + =head1 COPYRIGHT AND LICENSE -Copyright (C) 2015 by Marius Gavrilescu +Copyright (C) 2015-2018 by Marius Gavrilescu This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.20.2 or,