Contents of /tags/mkinitrd-6_3_4/isolinux/checksumiso.pl
Parent Directory | Revision Log
Revision 1189 -
(show annotations)
(download)
Thu Dec 16 01:27:43 2010 UTC (13 years, 9 months ago) by niro
File MIME type: text/plain
File size: 999 byte(s)
Thu Dec 16 01:27:43 2010 UTC (13 years, 9 months ago) by niro
File MIME type: text/plain
File size: 999 byte(s)
tagged 'mkinitrd-6_3_4'
1 | #!/usr/bin/perl |
2 | # |
3 | # Construct a checksum for isolinux*.bin, compatible |
4 | # with an mkisofs boot-info-table |
5 | # |
6 | |
7 | use bytes; |
8 | use integer; |
9 | |
10 | ($file) = @ARGV; |
11 | |
12 | open(FILE, '+<', $file) or die "$0: cannot open $file: $!\n"; |
13 | binmode FILE; |
14 | |
15 | @fstat = stat(FILE) or die "$0: stat $file: $!\n"; |
16 | if (!$fstat[7]) { |
17 | die "$0: $file: cannot query length\n"; |
18 | } |
19 | |
20 | # Pad file to a multiple of 2048 bytes |
21 | $frac = $fstat[7] % 2048; |
22 | if ($frac) { |
23 | seek(FILE,$fstat[7],0) |
24 | or die "$0: $file: cannot seek to end\n"; |
25 | print FILE "\0" x (2048-$frac); |
26 | } |
27 | |
28 | # Checksum the file post header |
29 | if ( !seek(FILE,64,0) ) { |
30 | die "$0: $file: cannot seek past header\n"; |
31 | } |
32 | |
33 | $csum = 0; |
34 | $bytes = 64; |
35 | while ( ($n = read(FILE, $dw, 4)) > 0 ) { |
36 | $dw .= "\0\0\0\0"; # Pad to at least 32 bits |
37 | ($v) = unpack("V", $dw); |
38 | $csum = ($csum + $v) & 0xffffffff; |
39 | $bytes += $n; |
40 | } |
41 | |
42 | # Update header |
43 | if ( !seek(FILE,16,0) ) { |
44 | die "$0: $file: cannot seek to header\n"; |
45 | } |
46 | |
47 | print FILE pack("VV", $bytes, $csum); |
48 | |
49 | close(FILE); |
50 | |
51 | exit 0; |
Properties
Name | Value |
---|---|
svn:executable | * |