use Data::Dumper;
-our $VERSION = '0.04';
+our $VERSION = '0.06';
=head1 NAME
=head1 DESCRIPTION
This module will use C<Fuse> module, part of C<FUSE (Filesystem in USErspace)>
-available at L<http://sourceforge.net/projects/avf> to mount
+available at L<http://fuse.sourceforge.net/> to mount
your database as file system.
That will give you possibility to use normal file-system tools (cat, grep, vi)
$self->{'read_filenames'} = sub { $self->read_filenames };
$self->read_filenames;
- $self->{'mounted'} = 1;
-
$fuse_self = \$self;
Fuse::main(
debug=>0,
);
- $self->{'mounted'} = 0;
-
exit(0) if ($arg->{'fork'});
return 1;
sub umount {
my $self = shift;
- if ($self->{'mounted'}) {
- system "fusermount -u ".$self->{'mount'} || croak "umount error: $!";
- }
+ if ($self->{'mount'}) {
+ if (open(MTAB, "/etc/mtab")) {
+ my $mounted = 0;
+ my $mount = $self->{'mount'};
+ while(<MTAB>) {
+ $mounted = 1 if (/ $mount fuse /i);
+ }
+ close(MTAB);
+
+ if ($mounted) {
+ system "fusermount -u ".$self->{'mount'}." 2>&1 >/dev/null" || return 0;
+ return 1;
+ }
- return 1;
+ } else {
+ warn "can't open /etc/mtab: $!";
+ return 0;
+ }
+ }
}
$SIG{'INT'} = sub {
- print STDERR "umount called by SIG INT\n";
- umount;
+ if ($fuse_self && $$fuse_self->umount) {
+ print STDERR "umount called by SIG INT\n";
+ }
+};
+
+$SIG{'QUIT'} = sub {
+ if ($fuse_self && $$fuse_self->umount) {
+ print STDERR "umount called by SIG QUIT\n";
+ }
};
sub DESTROY {
my $self = shift;
- return if (! $self->{'mounted'});
- print STDERR "umount called by DESTROY\n";
- $self->umount;
+ if ($self->umount) {
+ print STDERR "umount called by DESTROY\n";
+ }
}
=head2 fuse_module_loaded
type => 0040,
mode => 0755,
},
+ '..' => {
+ type => 0040,
+ mode => 0755,
+ },
# a => {
# cont => "File 'a'.\n",
# type => 0100,
Nothing.
+=head1 BUGS
+
+Size information (C<ls -s>) is wrong. It's a problem in upstream Fuse module
+(for which I'm to blame lately), so when it gets fixes, C<Fuse::DBI> will
+automagically pick it up.
+
=head1 SEE ALSO
C<FUSE (Filesystem in USErspace)> website
-L<http://sourceforge.net/projects/avf>
+L<http://fuse.sourceforge.net/>
Example for WebGUI which comes with this distribution in
directory C<examples/webgui.pl>. It also contains a lot of documentation