fuse
changeset 16 867424a1db61
parent 15 f218b05f1da4
child 18 4a01ae9db5c4
equal deleted inserted replaced
15:f218b05f1da4 16:867424a1db61
   128 	my $blockoffset = $offset % $finfo->{meta}{blocksize};
   128 	my $blockoffset = $offset % $finfo->{meta}{blocksize};
   129 
   129 
   130 	my $length = $finfo->{meta}{blocksize} - $blockoffset;
   130 	my $length = $finfo->{meta}{blocksize} - $blockoffset;
   131 	$length = $size if $size <= $length;
   131 	$length = $size if $size <= $length;
   132 
   132 
   133 	if (exists $DIRTY{$finfo}{$block}) {
   133 	if (exists $DIRTY{$finfo.$block}) {
   134 	    return substr $DIRTY{$finfo}{$block}, $blockoffset, $length;
   134 	    return substr $DIRTY{$finfo.$block}, $blockoffset, $length;
   135 	}
   135 	}
   136 
   136 
   137 	my $fn = "$DATA/" . $finfo->{blocklist}{$block};
   137 	my $fn = "$DATA/" . $finfo->{blocklist}{$block};
   138 	if (-e $fn) {
   138 	if (-e $fn) {
   139 		open(my $fh => $fn);
   139 		open(my $fh => $fn);
   176 	my $size = length($buffer);
   176 	my $size = length($buffer);
   177 
   177 
   178 	my $block = int($offset / $finfo->{meta}{blocksize});
   178 	my $block = int($offset / $finfo->{meta}{blocksize});
   179 	my $blockoffset = $offset % $finfo->{meta}{blocksize};
   179 	my $blockoffset = $offset % $finfo->{meta}{blocksize};
   180 
   180 
   181 	if (not exists $DIRTY{$finfo}{$block}) {
   181 	if (not exists $DIRTY{$finfo.$block}) {
   182 	    $DIRTY{$finfo}{$block} = _readblock(
   182 	    $DIRTY{$finfo.$block} = _readblock(
   183 		    $finfo, 
   183 		    $finfo, 
   184 		    $finfo->{meta}{blocksize}, 
   184 		    $finfo->{meta}{blocksize}, 
   185 		    $block * $finfo->{meta}{blocksize});
   185 		    $block * $finfo->{meta}{blocksize});
   186 	}
   186 	}
   187 
   187 
   188 	my $length = $finfo->{meta}{blocksize} - $blockoffset;
   188 	my $length = $finfo->{meta}{blocksize} - $blockoffset;
   189 	$length = $size if $size < $length;
   189 	$length = $size if $size < $length;
   190 
   190 
   191 	substr($DIRTY{$finfo}{$block}, $blockoffset, $length)
   191 	substr($DIRTY{$finfo.$block}, $blockoffset, $length)
   192 	    = substr($buffer, 0, $length);
   192 	    = substr($buffer, 0, $length);
   193 
   193 
   194 	return $length;
   194 	return $length;
   195     }
   195     }
   196 
   196