--- a/fuse Mon Jul 25 17:27:51 2011 +0200
+++ b/fuse Mon Jul 25 21:53:47 2011 +0200
@@ -65,8 +65,8 @@
use autodie qw(:all);
our ($ROOT, $DATA, $IDX);
- my %FILE;
- my %CACHE;
+ my %IMAGE;
+ my %DIRTY;
sub getattr {
my $path = $IDX . shift;
@@ -88,9 +88,9 @@
sub openfile {
my $path = $IDX . shift;
- return 0 if exists $FILE{$path};
- $FILE{$path}{meta} = { _get_meta($path) };
- $FILE{$path}{blocklist} = {};
+ return 0 if exists $IMAGE{$path};
+ $IMAGE{$path}{meta} = { _get_meta($path) };
+ $IMAGE{$path}{blocklist} = {};
open(my $fh => $path);
{ # the file header
@@ -100,8 +100,8 @@
while (<$fh>) {
/^#/ and last;
my ($block, $cs, $file) = split;
- $block-- if not $FILE{$path}{meta}{format};
- $FILE{$path}{blocklist}{$block} = $file;
+ $block-- if not $IMAGE{$path}{meta}{format};
+ $IMAGE{$path}{blocklist}{$block} = $file;
}
close $fh;
return 0;
@@ -110,7 +110,7 @@
sub readbuffer {
my $path = $IDX . shift;
my ($size, $offset) = @_;
- my $finfo = $FILE{$path} or die "File $path is not opened!";
+ my $finfo = $IMAGE{$path} or die "File $path is not opened!";
return "" if $offset >= $finfo->{meta}{devsize};
my $buffer = "";
@@ -130,8 +130,8 @@
my $length = $finfo->{meta}{blocksize} - $blockoffset;
$length = $size if $size <= $length;
- if (exists $CACHE{$finfo}{$block}) {
- return substr $CACHE{$finfo}{$block}, $blockoffset, $length;
+ if (exists $DIRTY{$finfo}{$block}) {
+ return substr $DIRTY{$finfo}{$block}, $blockoffset, $length;
}
my $fn = "$DATA/" . $finfo->{blocklist}{$block};
@@ -159,7 +159,7 @@
my $path = $IDX . shift;
my ($buffer, $offset) = @_;
my $size = length($buffer);
- my $finfo = $FILE{$path} or die "File $path is not opened!";
+ my $finfo = $IMAGE{$path} or die "File $path is not opened!";
for (my $written = 0; $written < $size;) {
# OPTIMIZE: we should not ask for writing more than the
@@ -178,18 +178,17 @@
my $block = int($offset / $finfo->{meta}{blocksize});
my $blockoffset = $offset % $finfo->{meta}{blocksize};
- if (not exists $CACHE{$finfo}{$block}) {
- #open(my $fh => "$DATA/" . $finfo->{blocklist}{$block});
- #local $/ = undef;
- #$CACHE{$finfo}{$block} = <$fh>;
- #close($fh);
- $CACHE{$finfo}{$block} = _readblock($finfo, $finfo->{meta}{blocksize}, $block * $finfo->{meta}{blocksize});
+ if (not exists $DIRTY{$finfo}{$block}) {
+ $DIRTY{$finfo}{$block} = _readblock(
+ $finfo,
+ $finfo->{meta}{blocksize},
+ $block * $finfo->{meta}{blocksize});
}
my $length = $finfo->{meta}{blocksize} - $blockoffset;
$length = $size if $size < $length;
- substr($CACHE{$finfo}{$block}, $blockoffset, $length)
+ substr($DIRTY{$finfo}{$block}, $blockoffset, $length)
= substr($buffer, 0, $length);
return $length;