Blame script/crc32

Packit 0bf95d
#!/usr/bin/perl
Packit 0bf95d
Packit 0bf95d
# Computes and prints to stdout the CRC-32 values of the given files
Packit 0bf95d
Packit 0bf95d
use 5.006;
Packit 0bf95d
use strict;
Packit 0bf95d
use lib qw( blib/lib lib );
Packit 0bf95d
use Archive::Zip;
Packit 0bf95d
use FileHandle;
Packit 0bf95d
Packit 0bf95d
use vars qw( $VERSION );
Packit 0bf95d
BEGIN {
Packit 0bf95d
    $VERSION = '1.51';
Packit 0bf95d
}
Packit 0bf95d
Packit 0bf95d
my $totalFiles = scalar(@ARGV);
Packit 0bf95d
foreach my $file (@ARGV) {
Packit 0bf95d
    if ( -d $file ) {
Packit 0bf95d
        warn "$0: ${file}: Is a directory\n";
Packit 0bf95d
        next;
Packit 0bf95d
    }
Packit 0bf95d
    my $fh = FileHandle->new();
Packit 0bf95d
    if ( !$fh->open( $file, 'r' ) ) {
Packit 0bf95d
        warn "$0: $!\n";
Packit 0bf95d
        next;
Packit 0bf95d
    }
Packit 0bf95d
    binmode($fh);
Packit 0bf95d
    my $buffer;
Packit 0bf95d
    my $bytesRead;
Packit 0bf95d
    my $crc = 0;
Packit 0bf95d
    while ( $bytesRead = $fh->read( $buffer, 32768 ) ) {
Packit 0bf95d
        $crc = Archive::Zip::computeCRC32( $buffer, $crc );
Packit 0bf95d
    }
Packit 0bf95d
    my $fileCrc = sprintf("%08x", $crc);
Packit 0bf95d
    printf("$fileCrc");
Packit 0bf95d
    print("\t$file") if ( $totalFiles > 1 );
Packit 0bf95d
Packit 0bf95d
    if ( $file =~ /[^[:xdigit:]]([[:xdigit:]]{8})[^[:xdigit:]]/ ) {
Packit 0bf95d
	my $filenameCrc = $1;
Packit 0bf95d
	if ( lc($filenameCrc) eq lc($fileCrc) ) {
Packit 0bf95d
	    print("\tOK")
Packit 0bf95d
	} else {
Packit 0bf95d
	    print("\tBAD $fileCrc != $filenameCrc");
Packit 0bf95d
        }
Packit 0bf95d
    }
Packit 0bf95d
Packit 0bf95d
    print("\n");
Packit 0bf95d
}