9 |
|
|
10 |
($file) = @ARGV; |
($file) = @ARGV; |
11 |
|
|
12 |
open(FILE, '+<', $file) or die "$0: Cannot open $file: $!\n"; |
open(FILE, '+<', $file) or die "$0: cannot open $file: $!\n"; |
13 |
binmode FILE; |
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) ) { |
if ( !seek(FILE,64,0) ) { |
30 |
die "$0: Cannot seek past header\n"; |
die "$0: $file: cannot seek past header\n"; |
31 |
} |
} |
32 |
|
|
33 |
$csum = 0; |
$csum = 0; |
39 |
$bytes += $n; |
$bytes += $n; |
40 |
} |
} |
41 |
|
|
42 |
|
# Update header |
43 |
if ( !seek(FILE,16,0) ) { |
if ( !seek(FILE,16,0) ) { |
44 |
die "$0: Cannot seek to header\n"; |
die "$0: $file: cannot seek to header\n"; |
45 |
} |
} |
46 |
|
|
47 |
print FILE pack("VV", $bytes, $csum); |
print FILE pack("VV", $bytes, $csum); |