fuse
changeset 2 79eb9a0609af
parent 0 e92e765779e7
child 5 bef1e4dd8e85
equal deleted inserted replaced
1:d5d051a56a87 2:79eb9a0609af
     2 
     2 
     3 use 5.010;
     3 use 5.010;
     4 use strict;
     4 use strict;
     5 use warnings;
     5 use warnings;
     6 use autodie qw(:all);
     6 use autodie qw(:all);
     7 
     7 use Getopt::Long;
     8 use Fuse;
     8 use Fuse;
     9 
     9 
    10 my $src = shift // die "need source directory\n";
    10 my $opt_debug = 0;
    11 my $mp = shift // die "need mountpoint\n";
    11 
       
    12 GetOptions("debug!" => \$opt_debug)
       
    13 	and @ARGV == 2
       
    14 	or die "Bad Usage\n";
       
    15 
       
    16 my $src = shift;
       
    17 my $mp = shift;
    12 
    18 
    13 $fs::DATA = "$src/data";
    19 $fs::DATA = "$src/data";
    14 $fs::IDX = "$src/idx";
    20 $fs::IDX = "$src/idx";
    15 
    21 
    16 Fuse::main(mountpoint => $mp,
    22 Fuse::main(mountpoint => $mp,
    17     debug => 0,
    23     debug => $opt_debug,
    18     getattr => "fs::getattr",
    24     getattr => "fs::getattr",
    19     getdir => "fs::getdir",
    25     getdir => "fs::getdir",
    20     open => "fs::openfile",
    26     open => "fs::openfile",
    21     read => "fs::readbuffer",
    27     read => "fs::readbuffer",
    22     write => "fs::writebuffer",
    28     write => "fs::writebuffer",
    32   our ($ROOT, $DATA, $IDX);
    38   our ($ROOT, $DATA, $IDX);
    33   my %FILE;
    39   my %FILE;
    34   my %CACHE;
    40   my %CACHE;
    35 
    41 
    36     sub getattr {
    42     sub getattr {
    37 	my $path = $IDX . shift;
    43 		my $path = $IDX . shift;
    38 	return stat $path if $path eq "$IDX/";
    44 		return stat $path if -d $path;
    39 	# rest are the idx
    45 		# rest are the idx
    40 	my @attr = stat $path or return -(ENOENT);
    46 		my @attr = stat $path or return -(ENOENT);
    41 	my %meta = _get_meta($path);
    47 		my %meta = _get_meta($path);
    42 	$attr[7] = $meta{devsize};
    48 		use Data::Dumper;
    43 	$attr[9] = $meta{timestamp};
    49 		warn Dumper \%meta;
    44 	$attr[2] &= ~0222;		# r/o
    50 		$attr[7] = $meta{devsize};
    45 	return @attr;
    51 		$attr[9] = $meta{timestamp};
       
    52 		$attr[2] &= ~0222;		# r/o
       
    53 		warn Dumper \@attr;
       
    54 		return @attr;
    46     }
    55     }
    47 
    56 
    48     sub getdir {
    57     sub getdir {
    49 	my $path = $IDX . shift;
    58 	my $path = $IDX . shift;
    50 	opendir(my $dh, $path) or return 0;
    59 	opendir(my $dh, $path) or return 0;