From ecd1b309450674842c673f2d779bbdd2a8d97171 Mon Sep 17 00:00:00 2001 From: Ian Beckwith Date: Mon, 20 Sep 2010 01:47:57 +0100 Subject: [PATCH 1/1] implement fuse stub --- bin/id3fs | 2 +- lib/ID3FS/Fuse.pm | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ sbin/id3fsd | 13 +++++++-- 3 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 lib/ID3FS/Fuse.pm diff --git a/bin/id3fs b/bin/id3fs index 8b7294c..1998169 100755 --- 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 index 0000000..014706e --- /dev/null +++ b/lib/ID3FS/Fuse.pm @@ -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; diff --git a/sbin/id3fsd b/sbin/id3fsd index 31a480f..da5f7df 100755 --- a/sbin/id3fsd +++ b/sbin/id3fsd @@ -2,8 +2,11 @@ # Ian Beckwith # +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 -- 2.11.0