blob: dc459ef6c5855c1a51a6a1e3852ae53d1da70bbe (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
package resize_fat::info_sector;
use diagnostics;
use strict;
use common qw(:system);
use resize_fat::io;
#- Oops, this will be unresizable on big-endian machine. trapped by signature.
my $format = "a484 I I I a16";
my @fields = (
'unused',
'signature', #- should be 0x61417272
'free_clusters', #- -1 for unknown
'next_cluster', #- most recently allocated cluster
'unused2',
);
1;
sub read($) {
my ($fs) = @_;
my $info = resize_fat::io::read($fs, $fs->{info_offset}, psizeof($format));
@{$fs->{info_sector}}{@fields} = unpack $format, $info;
$fs->{info_sector}{signature} == 0x61417272 or die "Invalid information sector signature\n";
}
sub write($) {
my ($fs) = @_;
$fs->{info_sector}{free_clusters} = $fs->{clusters}->{count}->{free};
$fs->{info_sector}{next_cluster} = 2;
my $info = pack $format, @{$fs->{info_sector}}{@fields};
resize_fat::io::write($fs, $fs->{info_offset}, psizeof($format), $info);
}
|