File Coverage

blib/lib/Crypt/Checksum.pm
Criterion Covered Total %
statement 31 55 56.3
branch 5 10 50.0
condition 2 6 33.3
subroutine 7 18 38.8
pod 0 13 0.0
total 45 102 44.1


line stmt bran cond sub pod time code
1             package Crypt::Checksum;
2              
3 2     2   12 use strict;
  2         4  
  2         55  
4 2     2   6 use warnings;
  2         2  
  2         245  
5             our $VERSION = '0.089';
6              
7             require Exporter; our @ISA = qw(Exporter); ### use Exporter 5.57 'import';
8             our %EXPORT_TAGS = ( all => [qw/ adler32_data adler32_data_hex adler32_data_int adler32_file adler32_file_hex adler32_file_int
9             crc32_data crc32_data_hex crc32_data_int crc32_file crc32_file_hex crc32_file_int /] );
10             our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
11             our @EXPORT = qw();
12              
13 2     2   11 use Carp;
  2         3  
  2         174  
14             $Carp::Internal{(__PACKAGE__)}++;
15 2     2   380 use CryptX;
  2         3  
  2         885  
16              
17             # obsolete since v0.057, only for backwards compatibility
18 0     0 0 0 sub adler32_data { require Crypt::Checksum::Adler32; goto \&Crypt::Checksum::Adler32::adler32_data }
  0         0  
19 1     1 0 537 sub adler32_data_hex { require Crypt::Checksum::Adler32; goto \&Crypt::Checksum::Adler32::adler32_data_hex }
  1         7  
20 0     0 0 0 sub adler32_data_int { require Crypt::Checksum::Adler32; goto \&Crypt::Checksum::Adler32::adler32_data_int }
  0         0  
21 0     0 0 0 sub adler32_file { require Crypt::Checksum::Adler32; goto \&Crypt::Checksum::Adler32::adler32_file }
  0         0  
22 0     0 0 0 sub adler32_file_hex { require Crypt::Checksum::Adler32; goto \&Crypt::Checksum::Adler32::adler32_file_hex }
  0         0  
23 0     0 0 0 sub adler32_file_int { require Crypt::Checksum::Adler32; goto \&Crypt::Checksum::Adler32::adler32_file_int }
  0         0  
24 0     0 0 0 sub crc32_data { require Crypt::Checksum::CRC32; goto \&Crypt::Checksum::CRC32::crc32_data }
  0         0  
25 1     1 0 5 sub crc32_data_hex { require Crypt::Checksum::CRC32; goto \&Crypt::Checksum::CRC32::crc32_data_hex }
  1         6  
26 0     0 0 0 sub crc32_data_int { require Crypt::Checksum::CRC32; goto \&Crypt::Checksum::CRC32::crc32_data_int }
  0         0  
27 0     0 0 0 sub crc32_file { require Crypt::Checksum::CRC32; goto \&Crypt::Checksum::CRC32::crc32_file }
  0         0  
28 0     0 0 0 sub crc32_file_hex { require Crypt::Checksum::CRC32; goto \&Crypt::Checksum::CRC32::crc32_file_hex }
  0         0  
29 0     0 0 0 sub crc32_file_int { require Crypt::Checksum::CRC32; goto \&Crypt::Checksum::CRC32::crc32_file_int }
  0         0  
30              
31             sub addfile {
32 14     14 0 29 my ($self, $file) = @_;
33              
34 14         19 my ($handle, $close_handle);
35 14 50 33     72 if (ref($file) && eval { defined fileno($file) }) {
  0 50 33     0  
36 0         0 $handle = $file;
37             }
38             elsif (defined($file) && !ref($file)) {
39 14 50       575 open($handle, "<", $file) || croak "FATAL: cannot open '$file': $!";
40 14         43 binmode($handle);
41 14         25 $close_handle = 1;
42             }
43             else {
44 0         0 croak "FATAL: invalid handle";
45             }
46              
47 14         16 my $n;
48 14         20 my $buf = "";
49             {
50 14         14 local $SIG{__DIE__} = \&CryptX::_croak;
  14         54  
51 14         402 while (($n = read($handle, $buf, 32*1024))) {
52 14         179 $self->add($buf);
53             }
54 14 50       64 croak "FATAL: read failed: $!" unless defined $n;
55             }
56 14 50       124 close($handle) if $close_handle;
57              
58 14         131 return $self;
59             }
60              
61 0     0     sub CLONE_SKIP { 1 } # prevent cloning
62              
63             1;
64              
65             =pod
66              
67             =head1 NAME
68              
69             Crypt::Checksum - [internal only]
70              
71             =head1 SYNOPSIS
72              
73             Do not use this module directly.
74              
75             Use a concrete checksum module instead.
76              
77             =head1 SEE ALSO
78              
79             =over
80              
81             =item * L
82              
83             =item * L, L
84              
85             =back
86              
87             =cut