use Data::Dumper;
-our $VERSION = '0.05';
+our $VERSION = '0.06';
=head1 NAME
my $pid;
if ($arg->{'fork'}) {
- $self->{'mounted'} = 1;
$pid = fork();
die "fork() failed: $!" unless defined $pid;
# child will return to caller
$self->{'read_filenames'} = sub { $self->read_filenames };
$self->read_filenames;
- $self->{'mounted'} = 1 unless ($arg->{'fork'});
-
$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'} || warn "umount error: $!" && return 0;
- }
+ 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