diff -r 73b95264a70c -r f218b05f1da4 fuse --- 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;