From 1587d4f8ead28ec79b4485db54147fa97fb86ef4 Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Fri, 5 Sep 2008 14:47:22 -0700 Subject: [PATCH] checksumiso: pad isolinux.bin to a sector boundary Always pad isolinux.bin to a full CD-ROM sector boundary. This avoids a lot of potential special cases. Signed-off-by: H. Peter Anvin --- core/checksumiso.pl | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/core/checksumiso.pl b/core/checksumiso.pl index b552742..9b8c3ee 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); -- 2.7.4