view bin/cek.pl @ 655:82f5e43259eb

Add helper for easier doas
author nanaya <me@nanaya.pro>
date Mon, 31 May 2021 14:56:58 +0900
parents 70355e17653e
children
line wrap: on
line source

#!/usr/bin/env perl

use strict;
use warnings;
use Compress::Zlib;
use File::Basename;

my @files = @ARGV or print("Usage: ",basename($0)," file1 file2 ... fileN\n") && exit(1);
my $num_ok = 0;
my $num_err = 0;
my $num_nf = 0;
my $num_na = @files;

foreach (@files) {
    my $filename = $_;
    my ($name_crc,$real_crc);

    unless (-f $filename) {
        $num_nf++;
        $num_na--;
        print(qq(Could not find "$filename", skipping\n));
        next();
    }

    if (/(\[|\()([0-9A-F]{8})(\]|\))/i){
        $name_crc = uc($2);
    }

    open(FILE,"<",$filename);
    binmode(FILE);
    my $file_crc = 0;
    my $file_part = '';
    while (read(FILE, $file_part, 4096)) {
        $file_crc = crc32($file_part, $file_crc);
    }
    close(FILE);
    $real_crc = sprintf("%08X", $file_crc);

    if ($name_crc) {
        $num_na--;
        if($name_crc eq $real_crc) {
            $num_ok++;
            print("$filename: OK - $real_crc\n");
        } else {
            $num_err++;
            print("$filename: NOT OK - $real_crc, should be $name_crc\n");
        }
    } else {
        print("$filename: $real_crc\n");
    }
}

printf("%s\n","-"x40);
if ($num_ok > 0) {
    print("Files OK: $num_ok\n");
}
if ($num_err > 0) {
    print("Files error: $num_err\n");
}
if ($num_nf > 0) {
    print("Files not found: $num_nf\n");
}
if ($num_na > 0) {
    print("Files without crc information: $num_na\n");
}

exit(0);