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*
 PROTOTYPES: ENABLE
 
 SV*
-unbro(buffer, decoded_size)
+unbro_given_size(buffer, decoded_size)
     SV* buffer
     size_t decoded_size
   PREINIT:
     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);
 
 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__
 
 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.
 
 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
 Exported by default.
 
 =back
index f67c5e478bf054f122a0ebb609115b772983c09d..b8fbc6dba22f4a40ae3388d863c337386db5b527 100644 (file)
@@ -2,7 +2,7 @@
 use v5.14;
 use warnings;
 
 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;
 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);
        $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;
 
        open FH, '<', $test;
        binmode FH;
This page took 0.01372 seconds and 4 git commands to generate.