diff options
-rwxr-xr-x | core/checksumiso.pl | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/core/checksumiso.pl b/core/checksumiso.pl index b5527428..9b8c3ee5 100755 --- a/core/checksumiso.pl +++ b/core/checksumiso.pl @@ -9,11 +9,25 @@ use integer; ($file) = @ARGV; -open(FILE, '+<', $file) or die "$0: Cannot open $file: $!\n"; +open(FILE, '+<', $file) or die "$0: cannot open $file: $!\n"; binmode FILE; +@fstat = stat(FILE) or die "$0: stat $file: $!\n"; +if (!$fstat[7]) { + die "$0: $file: cannot query length\n"; +} + +# Pad file to a multiple of 2048 bytes +$frac = $fstat[7] % 2048; +if ($frac) { + seek(FILE,$fstat[7],0) + or die "$0: $file: cannot seek to end\n"; + print FILE "\0" x (2048-$frac); +} + +# Checksum the file post header if ( !seek(FILE,64,0) ) { - die "$0: Cannot seek past header\n"; + die "$0: $file: cannot seek past header\n"; } $csum = 0; @@ -25,8 +39,9 @@ while ( ($n = read(FILE, $dw, 4)) > 0 ) { $bytes += $n; } +# Update header if ( !seek(FILE,16,0) ) { - die "$0: Cannot seek to header\n"; + die "$0: $file: cannot seek to header\n"; } print FILE pack("VV", $bytes, $csum); |