implement fuse stub
authorIan Beckwith <ianb@erislabs.net>
Mon, 20 Sep 2010 00:47:57 +0000 (01:47 +0100)
committerIan Beckwith <ianb@erislabs.net>
Mon, 20 Sep 2010 00:47:57 +0000 (01:47 +0100)
bin/id3fs
lib/ID3FS/Fuse.pm [new file with mode: 0644]
sbin/id3fsd

index 8b7294c..1998169 100755 (executable)
--- a/bin/id3fs
+++ b/bin/id3fs
@@ -13,7 +13,7 @@ $me=($0=~/(?:.*\/)?(.*)/)[0];
 my $verbose=0;
 my $help=0;
 my $init=0;
-my @extensions=qw(mp3 ogg flac);
+my @extensions=qw(mp3); # ogg flac);
 Configure(qw(bundling no_ignore_case));
 my $optret=GetOptions(
     "verbose|v"  => \$verbose,
diff --git a/lib/ID3FS/Fuse.pm b/lib/ID3FS/Fuse.pm
new file mode 100644 (file)
index 0000000..014706e
--- /dev/null
@@ -0,0 +1,82 @@
+package ID3FS::Fuse;
+
+use strict;
+use warnings;
+use POSIX qw(EINVAL ENOENT EROFS EOPNOTSUPP);
+use Fuse;
+
+sub new
+{
+    my $proto=shift;
+    my $class=ref($proto) || $proto;
+    my $self={};
+    bless($self,$class);
+
+    $self->{db}=shift;
+    $self->{source}=shift;
+    $self->{mountpoint}=shift;
+
+    return $self;
+}
+
+sub run
+{
+    my($self)=@_;
+    Fuse::main(
+       mountpoint  => $self->{mountpoint},
+       getattr     => "ID3FS::Fuse::getattr",
+       readlink    => "ID3FS::Fuse::readlink",
+       getdir      => "ID3FS::Fuse::getdir",
+       mknod       => "ID3FS::Fuse::mknod",
+       mkdir       => "ID3FS::Fuse::mkdir",
+       unlink      => "ID3FS::Fuse::unlink",
+       rmdir       => "ID3FS::Fuse::rmdir",
+       symlink     => "ID3FS::Fuse::symlink",
+       rename      => "ID3FS::Fuse::rename",
+       link        => "ID3FS::Fuse::link",
+       chmod       => "ID3FS::Fuse::chmod",
+       chown       => "ID3FS::Fuse::chown",
+       truncate    => "ID3FS::Fuse::truncate",
+       utime       => "ID3FS::Fuse::utime",
+       open        => "ID3FS::Fuse::open",
+       read        => "ID3FS::Fuse::read",
+       write       => "ID3FS::Fuse::write",
+       statfs      => "ID3FS::Fuse::statfs",
+       release     => "ID3FS::Fuse::release",
+       fsync       => "ID3FS::Fuse::fsync",
+       setxattr    => "ID3FS::Fuse::setxattr",
+       getxattr    => "ID3FS::Fuse::getxattr",
+       listxattr   => "ID3FS::Fuse::listxattr",
+       removexattr => "ID3FS::Fuse::removexattr",
+       threaded=>0,
+       debug => 1,
+       );
+
+}
+
+sub getattr     { return -ENOENT();     }
+sub readlink    { return "FIXME";       }
+sub getdir      { return(0);            }
+sub mknod       { return -EINVAL();     }
+sub mkdir       { return -EROFS();      }
+sub unlink      { return -EINVAL();     }
+sub rmdir       { return -EROFS();      }
+sub symlink     { return -EROFS();      }
+sub rename      { return -EROFS();      }
+sub link        { return -EROFS();      }
+sub chmod       { return -EINVAL();     }
+sub chown       { return -EINVAL();     }
+sub truncate    { return -EROFS();      }
+sub utime       { return -EINVAL();     }
+sub open        { return -EINVAL();     }
+sub read        { return -EINVAL();     }
+sub write       { return -EINVAL();     }
+sub statfs      { return -EINVAL();     }
+sub release     { return 0;             }
+sub fsync       { return 0;             }
+sub setxattr    { return -EOPNOTSUPP(); }
+sub getxattr    { return -EOPNOTSUPP(); }
+sub listxattr   { return -EOPNOTSUPP(); }
+sub removexattr { return -EOPNOTSUPP(); }
+
+1;
index 31a480f..da5f7df 100755 (executable)
@@ -2,8 +2,11 @@
 # Ian Beckwith <ianb@erislabs.net>
 #
 
+use lib '/home/ianb/projects/id3fs/id3fs/lib';
 use strict;
 use Getopt::Long qw(Configure);
+use ID3FS::DB;
+use ID3FS::Fuse;
 use vars qw($me);
 $me=($0=~/(?:.*\/)?(.*)/)[0];
 
@@ -17,7 +20,14 @@ my $optret=GetOptions(
     "help|h"     => \$help,
     );
 
-usage() if(!@ARGV || !$optret || $help);
+usage() if(scalar(@ARGV) != 2 || !$optret || $help);
+
+my $source=shift;
+my $mountpoint=shift;
+
+my $db=ID3FS::DB->new($source, 0, $me);
+my $fuse=ID3FS::Fuse->new($db, $source, $mountpoint);
+$fuse->run();
 
 sub usage
 {
@@ -30,7 +40,6 @@ sub usage
 
 __END__
 
-
 =head1 NAME
 
 program - description