X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2FID3FS%2FFuse.pm;h=cc38b65ee4e6a255780c8ea344a125453d226f6e;hb=10735afb2cc92efa82c27ad7a5a9b514c1091b4b;hp=44fdc6e7e6cc51895cb6d7fad800cdc73b6b8850;hpb=95db19f5d69d997520cefc9b3e1972db4f6777ac;p=id3fs.git diff --git a/lib/ID3FS/Fuse.pm b/lib/ID3FS/Fuse.pm index 44fdc6e..cc38b65 100644 --- a/lib/ID3FS/Fuse.pm +++ b/lib/ID3FS/Fuse.pm @@ -2,8 +2,9 @@ package ID3FS::Fuse; use strict; use warnings; +use ID3FS::Path; use Fuse; -use POSIX qw(EINVAL EROFS EOPNOTSUPP S_IRUSR S_IRGRP S_IROTH S_IXUSR S_IXGRP S_IXOTH); +use POSIX qw(EINVAL EROFS ENOENT EOPNOTSUPP S_IRUSR S_IRGRP S_IROTH S_IXUSR S_IXGRP S_IXOTH); use vars qw($TYPE_DIR $TYPE_SYMLINK); ($TYPE_DIR, $TYPE_SYMLINK)=(0040, 0120); @@ -62,22 +63,16 @@ sub run sub getattr { my($self, $filename)=@_; - print "GETATTR: $filename\n"; + print "**GETATTR: $filename\n"; + my $path=ID3FS::Path->new($self->{db}, $filename); + return(-ENOENT()) unless($path->isvalid()); my($dev,$ino,$nlink)=(0,0,1); my $uid=$<; my $gid=(split(/ /, $( ))[0]; my($rdev,$size)=(0,1); my($atime,$mtime,$ctime)=(0,0,0); my($blksize,$blocks)=(512,1); - my $mode; - if($filename eq "/") - { - $mode=$self->mode($TYPE_DIR); - } - else - { - $mode=$self->mode($TYPE_SYMLINK); - } + my $mode=$self->mode( $path->isdir() ? $TYPE_DIR : $TYPE_SYMLINK ); return($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks); } @@ -85,19 +80,23 @@ sub getattr sub readlink { my($self,$filename)=@_; - print "READLINK: $filename\n"; - return "FIXME"; + print "**READLINK: $filename\n"; + my $path=ID3FS::Path->new($self->{db}, $filename); + return(-EINVAL()) unless($path->isfile()); + return $path->dest(); } sub getdir { my($self, $filename)=@_; - print "GETDIR(", ref($self), ": $filename\n"; - if($filename eq "/") + print "**GETDIR: $filename\n"; + my $path=ID3FS::Path->new($self->{db}, $filename); + return(-ENOENT()) unless($path->isvalid()); + if($path->isdir()) { - return(".", "..", $self->{db}->tags(), 0); + return(".", "..", $path->dirents(), 0); } - return('.',0); + return -ENOTDIR(); } # unused stubs