minimal working fuse stub
[id3fs.git] / lib / ID3FS / Fuse.pm
1 package ID3FS::Fuse;
2
3 use strict;
4 use warnings;
5 use POSIX qw(EINVAL ENOENT EROFS EOPNOTSUPP);
6 use Fuse;
7
8 sub new
9 {
10     my $proto=shift;
11     my $class=ref($proto) || $proto;
12     my $self={};
13     bless($self,$class);
14
15     $self->{db}=shift;
16     $self->{source}=shift;
17     $self->{mountpoint}=shift;
18
19     return $self;
20 }
21
22 sub run
23 {
24     my($self)=@_;
25     Fuse::main(
26         mountpoint  => $self->{mountpoint},
27         threaded=>0,
28         debug => 1,
29         getattr     => "ID3FS::Fuse::getattr",
30 #       readlink    => "ID3FS::Fuse::readlink",
31         getdir      => "ID3FS::Fuse::getdir",
32 #       mknod       => "ID3FS::Fuse::mknod",
33 #       mkdir       => "ID3FS::Fuse::mkdir",
34 #       unlink      => "ID3FS::Fuse::unlink",
35 #       rmdir       => "ID3FS::Fuse::rmdir",
36 #       symlink     => "ID3FS::Fuse::symlink",
37 #       rename      => "ID3FS::Fuse::rename",
38 #       link        => "ID3FS::Fuse::link",
39 #       chmod       => "ID3FS::Fuse::chmod",
40 #       chown       => "ID3FS::Fuse::chown",
41 #       truncate    => "ID3FS::Fuse::truncate",
42 #       utime       => "ID3FS::Fuse::utime",
43 #       open        => "ID3FS::Fuse::open",
44 #       read        => "ID3FS::Fuse::read",
45 #       write       => "ID3FS::Fuse::write",
46 #       statfs      => "ID3FS::Fuse::statfs",
47 #       release     => "ID3FS::Fuse::release",
48 #       fsync       => "ID3FS::Fuse::fsync",
49 #       setxattr    => "ID3FS::Fuse::setxattr",
50 #       getxattr    => "ID3FS::Fuse::getxattr",
51 #       listxattr   => "ID3FS::Fuse::listxattr",
52 #       removexattr => "ID3FS::Fuse::removexattr",
53         );
54 }
55
56 sub getattr
57 {
58     my($filename)=@_;
59     print "GETATTR: $filename\n";
60     my($dev,$ino,$nlink)=(0,0,1);
61     my($uid,$gid)=(1000,1000);
62     my($rdev,$size)=(0,1);
63     my($atime,$mtime,$ctime)=(0,0,0);
64     my($blksize,$blocks)=(512,1);
65     my $mode=(0040 << 9) | 0755;
66     return($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
67            $atime,$mtime,$ctime,$blksize,$blocks);
68 }
69
70 sub readlink    { print "readlink\n"; return "FIXME";       }
71
72 sub getdir
73 {
74     my($filename)=@_;
75     print "GETDIR: $filename\n";
76     return('.',0);
77 }
78
79 sub mknod       { print "mknod\n"; return -EINVAL();     }
80 sub mkdir       { print "mkdir\n"; return -EROFS();      }
81 sub unlink      { print "unlink\n"; return -EINVAL();     }
82 sub rmdir       { print "rmdir\n"; return -EROFS();      }
83 sub symlink     { print "symlink\n"; return -EROFS();      }
84 sub rename      { print "rename\n"; return -EROFS();      }
85 sub link        { print "link\n"; return -EROFS();      }
86 sub chmod       { print "chmod\n"; return -EINVAL();     }
87 sub chown       { print "chown\n"; return -EINVAL();     }
88 sub truncate    { print "truncate\n"; return -EROFS();      }
89 sub utime       { print "utime\n"; return -EINVAL();     }
90 sub open        { print "open\n"; return -EINVAL();     }
91 sub read        { print "read\n"; return -EINVAL();     }
92 sub write       { print "write\n"; return -EINVAL();     }
93 sub statfs      { print "statfs\n"; return -EINVAL();     }
94 sub release     { print "release\n"; return 0;             }
95 sub fsync       { print "fsync\n"; return 0;             }
96 sub setxattr    { print "setxattr\n"; return -EOPNOTSUPP(); }
97 sub getxattr    { print "getxattr\n"; return -EOPNOTSUPP(); }
98 sub listxattr   { print "listxattr\n"; return -EOPNOTSUPP(); }
99 sub removexattr { print "removexattr\n"; return -EOPNOTSUPP(); }
100
101 1;