#!/usr/bin/perl # # Construct a checksum for isolinux*.bin, compatible # with an mkisofs boot-info-table # use bytes; use integer; ($file) = @ARGV; open(FILE, '+<', $file) or die "$0: Cannot open $file: $!\n"; binmode FILE; if ( !seek(FILE,64,0) ) { die "$0: Cannot seek past header\n"; } $csum = 0; $bytes = 64; while ( ($n = read(FILE, $dw, 4)) > 0 ) { $dw .= "\0\0\0\0"; # Pad to at least 32 bits ($v) = unpack("V", $dw); $csum = ($csum + $v) & 0xffffffff; $bytes += $n; } if ( !seek(FILE,16,0) ) { die "$0: Cannot seek to header\n"; } print FILE pack("VV", $bytes, $csum); close(FILE); exit 0;