From 50e2cd3f3433c42b1c4104430692acc6bc450646 Mon Sep 17 00:00:00 2001 From: Frank Haverkamp Date: Mon, 7 Jan 2008 14:05:00 +0100 Subject: ubi-utils: Remove obsolete code/data Artem figured out that certain stuff is obsolete. He also sugested that we move the code from the perl directory into the scripts directory to reduce the number of directories. Signed-off-by: Frank Haverkamp --- ubi-utils/scripts/ubicrc32.pl | 74 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 ubi-utils/scripts/ubicrc32.pl (limited to 'ubi-utils/scripts/ubicrc32.pl') diff --git a/ubi-utils/scripts/ubicrc32.pl b/ubi-utils/scripts/ubicrc32.pl new file mode 100644 index 0000000..92711cb --- /dev/null +++ b/ubi-utils/scripts/ubicrc32.pl @@ -0,0 +1,74 @@ +#!/usr/bin/perl -w + +# Subroutine crc32(): Calculates the CRC on a given string. + +{ + my @table = (); + + # @brief Calculate CRC32 for a given string. + sub crc32 + { + unless (@table) { + # Initialize the CRC table + my $poly = 0xEDB88320; + @table = (); + + for my $i (0..255) { + my $c = $i; + + for my $j (0..7) { + $c = ($c & 1) ? (($c >> 1) ^ $poly) : ($c >> 1); + } + $table[$i] = $c; + } + } + my $s = shift; # string to calculate the CRC for + my $crc = shift; # CRC start value + + defined($crc) + or $crc = 0xffffffff; # Default CRC start value + + for (my $i = 0; $i < length($s); $i++) { + $crc = $table[($crc ^ ord(substr($s, $i, 1))) & 0xff] + ^ ($crc >> 8); + } + return $crc; + } +} + +sub crc32_on_file +{ + my $file = shift; + + my $crc32 = crc32(''); + my $buf = ''; + my $ret = 0; + + while ($ret = read($file, $buf, 8192)) { + $crc32 = crc32($buf, $crc32); + } + defined($ret) + or return undef; + printf("0x%x\n", $crc32); +} + + +# Main routine: Calculate the CRCs on the given files and print the +# results. + +{ + if (@ARGV) { + while (my $path = shift) { + my $file; + open $file, "<", $path + or die "Error opening '$path'.\n"; + + &crc32_on_file($file) + or die "Error reading from '$path'.\n"; + close $file; + } + } else { + &crc32_on_file(\*STDIN) + or die "Error reading from stdin.\n"; + } +} -- cgit v1.2.3