unbro should not require maximum buffer size (RT #129480)
authorMarius Gavrilescu <marius@ieval.ro>
Tue, 11 Jun 2019 12:39:25 +0000 (15:39 +0300)
committerMarius Gavrilescu <marius@ieval.ro>
Tue, 11 Jun 2019 13:03:24 +0000 (16:03 +0300)
Brotli.xs
lib/IO/Uncompress/Brotli.pm
t/01-uncompress.t

index ffbde1e49c6cd6f0e5ac68c422bff6e7c555acdb..4e030a750b7cae5a5280c62bfe09b2029c765a2e 100644 (file)
--- a/Brotli.xs
+++ b/Brotli.xs
@@ -23,7 +23,7 @@ MODULE = IO::Compress::Brotli         PACKAGE = IO::Uncompress::Brotli
 PROTOTYPES: ENABLE
 
 SV*
-unbro(buffer, decoded_size)
+unbro_given_size(buffer, decoded_size)
     SV* buffer
     size_t decoded_size
   PREINIT:
index 1c6671b0cd3ed77dcd5d5353a3d224065a207ea9..0cc22e2643e49fed2148760c3885b9484af8df6b 100644 (file)
@@ -13,6 +13,21 @@ our $VERSION = '0.004001';
 require XSLoader;
 XSLoader::load('IO::Compress::Brotli', $VERSION);
 
+# 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;
 __END__
 
@@ -58,6 +73,11 @@ 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<unbro> 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.
 
 =back
index f67c5e478bf054f122a0ebb609115b772983c09d..b8fbc6dba22f4a40ae3388d863c337386db5b527 100644 (file)
@@ -2,7 +2,7 @@
 use v5.14;
 use warnings;
 
-use Test::More tests => 84;
+use Test::More tests => 126;
 use File::Slurper qw/read_binary/;
 
 use IO::Uncompress::Brotli;
@@ -12,7 +12,10 @@ for my $test (<brotli/tests/testdata/*.compressed*>) {
        $expected = read_binary $expected;
 
        my $decoded = unbro ((scalar read_binary $test), 1_000_000);
-       is $decoded, $expected, "$test";
+       is $decoded, $expected, "$test (two-argument unbro)";
+
+       $decoded = unbro scalar read_binary $test;
+       is $decoded, $expected, "$test (one-argument unbro)";
 
        open FH, '<', $test;
        binmode FH;
This page took 0.013673 seconds and 4 git commands to generate.