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         3  
  2         52  
4 2     2   7 use warnings;
  2         3  
  2         215  
5             our $VERSION = '0.089_001';
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   9 use Carp;
  2         13  
  2         113  
14             $Carp::Internal{(__PACKAGE__)}++;
15 2     2   406 use CryptX;
  2         3  
  2         1093  
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 542 sub adler32_data_hex { require Crypt::Checksum::Adler32; goto \&Crypt::Checksum::Adler32::adler32_data_hex }
  1         8  
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 10 sub crc32_data_hex { require Crypt::Checksum::CRC32; goto \&Crypt::Checksum::CRC32::crc32_data_hex }
  1         10  
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 39 my ($self, $file) = @_;
33              
34 14         23 my ($handle, $close_handle);
35 14 50 33     117 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       776 open($handle, "<", $file) || croak "FATAL: cannot open '$file': $!";
40 14         44 binmode($handle);
41 14         33 $close_handle = 1;
42             }
43             else {
44 0         0 croak "FATAL: invalid handle";
45             }
46              
47 14         19 my $n;
48 14         23 my $buf = "";
49             {
50 14         26 local $SIG{__DIE__} = \&CryptX::_croak;
  14         77  
51 14         591 while (($n = read($handle, $buf, 32*1024))) {
52 14         206 $self->add($buf);
53             }
54 14 50       62 croak "FATAL: read failed: $!" unless defined $n;
55             }
56 14 50       206 close($handle) if $close_handle;
57              
58 14         191 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