diff options
author | Frank Haverkamp <haver@vnet.ibm.com> | 2008-01-07 14:05:00 +0100 |
---|---|---|
committer | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2008-01-15 12:47:09 +0200 |
commit | 50e2cd3f3433c42b1c4104430692acc6bc450646 (patch) | |
tree | 6636f1fb445dfbb6642e65fe4f186a1129bbbebc /ubi-utils/scripts/ubicrc32.pl | |
parent | 4bf037f3a2aea4328e10422379f751370d288d46 (diff) |
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 <haver@vnet.ibm.com>
Diffstat (limited to 'ubi-utils/scripts/ubicrc32.pl')
-rw-r--r-- | ubi-utils/scripts/ubicrc32.pl | 74 |
1 files changed, 74 insertions, 0 deletions
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"; + } +} |