File Coverage

blib/lib/IO/Uncompress/UnZstd.pm
Criterion Covered Total %
statement 59 59 100.0
branch 8 10 80.0
condition n/a
subroutine 17 17 100.0
pod 2 9 22.2
total 86 95 90.5


line stmt bran cond sub pod time code
1             package IO::Uncompress::UnZstd ;
2              
3 12     12   124014 use strict ;
  12         30  
  12         376  
4 12     12   67 use warnings;
  12         22  
  12         267  
5 12     12   59 use bytes;
  12         19  
  12         57  
6              
7 12     12   354 use IO::Compress::Base::Common 2.204 qw(:Status createSelfTiedObject);
  12         197  
  12         1624  
8              
9 12     12   4603 use IO::Uncompress::Base 2.204 ;
  12         67849  
  12         615  
10 12     12   3934 use IO::Uncompress::Adapter::UnZstd 2.204 ;
  12         246  
  12         1369  
11              
12              
13             require Exporter ;
14             our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $UnZstdError);
15              
16             $VERSION = '2.204';
17             $UnZstdError = '';
18              
19             @ISA = qw( IO::Uncompress::Base Exporter );
20             @EXPORT_OK = qw( $UnZstdError unzstd ) ;
21             #%EXPORT_TAGS = %IO::Uncompress::Base::EXPORT_TAGS ;
22             push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ;
23             #Exporter::export_ok_tags('all');
24              
25 12     12   92 use constant SIGNATURE => 'ZV';
  12         24  
  12         4283  
26              
27             sub new
28             {
29 739     739 1 2060511 my $class = shift ;
30 739         2578 my $obj = createSelfTiedObject($class, \$UnZstdError);
31              
32 739         30158 $obj->_create(undef, 0, @_);
33             }
34              
35             sub unzstd
36             {
37 60     60 1 91851 my $obj = createSelfTiedObject(undef, \$UnZstdError);
38 60         2625 return $obj->_inf(@_);
39             }
40              
41             sub getExtraParams
42             {
43 782     782 0 34676 return ();
44             }
45              
46             sub ckParams
47             {
48 790     790 0 62252 my $self = shift ;
49 790         1141 my $got = shift ;
50              
51 790         1456 return 1;
52             }
53              
54              
55             sub postCheckParams
56             {
57 778     778 0 152950 my $self = shift ;
58 778         1157 my $got = shift ;
59              
60             # return $self->saveErrorString(undef, "MultiStream not supported by Zstd", STATUS_ERROR)
61             # if $got->getValue('multistream') ;
62              
63             # Compress::Stream::Zstd is only multi-stream
64 778         2188 $got->setValue('multistream' => 1);
65 778         5363 return 1;
66             }
67              
68             sub mkUncomp
69             {
70 789     789 0 111237 my $self = shift ;
71 789         1276 my $got = shift ;
72              
73 789 100       1609 my $magic = $self->ckMagic()
74             or return 0;
75              
76 725 50       1782 *$self->{Info} = $self->readHeader($magic)
77             or return undef ;
78              
79 725         2106 my ($obj, $errstr, $errno) = IO::Uncompress::Adapter::UnZstd::mkUncompObject();
80              
81 725 50       1891 return $self->saveErrorString(undef, $errstr, $errno)
82             if ! defined $obj;
83              
84 725         1523 *$self->{Uncomp} = $obj;
85              
86 725         1688 return 1;
87             }
88              
89              
90             sub ckMagic
91             {
92 971     971 0 443291 my $self = shift;
93              
94 12     12   89 use constant ZSTD_MAGICNUMBER => 0xFD2FB528 ; # >= v0.8.0
  12         23  
  12         2957  
95              
96 971         1386 my $magic ;
97 971         2882 $self->smartReadExact(\$magic, 4);
98              
99 971         43769 *$self->{HeaderPending} = $magic ;
100              
101 971 100       2789 return $self->HeaderError("Header size is " .
102             4 . " bytes")
103             if length $magic != 4;
104              
105 958 100       3459 return $self->HeaderError("Bad Magic.")
106             if unpack("V*", $magic) != ZSTD_MAGICNUMBER;
107              
108              
109 904         1682 *$self->{Type} = 'zstd';
110 904         2763 return $magic;
111             }
112              
113             sub readHeader
114             {
115 904     904 0 2473 my $self = shift;
116 904         1357 my $magic = shift ;
117              
118 904         2451 $self->pushBack($magic);
119 904         10887 *$self->{HeaderPending} = $magic;
120              
121             return {
122 904         4994 'Type' => 'zstd',
123             'FingerprintLength' => 4,
124             'HeaderLength' => 4,
125             'TrailerLength' => 0,
126             'Header' => $magic
127             };
128             }
129              
130             sub chkTrailer
131             {
132 346     346 0 18466 return STATUS_OK;
133             }
134              
135              
136              
137             1 ;
138              
139             __END__