X-Git-Url: http://git.rot13.org/?p=Fuse-DBI;a=blobdiff_plain;f=DBI.pm;h=3537bf070cad63466a64fc3743b2a7c8e4002089;hp=406db385c8397590694663d67cec46c6df50df3f;hb=8b53b090ace163fc02e100998eda16f4a0c0435b;hpb=17f71d3ea4691a9575688d5943c780e7361f550f diff --git a/DBI.pm b/DBI.pm index 406db38..3537bf0 100755 --- a/DBI.pm +++ b/DBI.pm @@ -13,7 +13,7 @@ use Carp; use Data::Dumper; -our $VERSION = '0.04'; +our $VERSION = '0.05'; =head1 NAME @@ -148,6 +148,7 @@ sub mount { my $pid; if ($arg->{'fork'}) { + $self->{'mounted'} = 1; $pid = fork(); die "fork() failed: $!" unless defined $pid; # child will return to caller @@ -169,7 +170,7 @@ sub mount { $self->{'read_filenames'} = sub { $self->read_filenames }; $self->read_filenames; - $self->{'mounted'} = 1; + $self->{'mounted'} = 1 unless ($arg->{'fork'}); $fuse_self = \$self; @@ -211,7 +212,7 @@ sub umount { my $self = shift; if ($self->{'mounted'}) { - system "fusermount -u ".$self->{'mount'} || croak "umount error: $!"; + system "fusermount -u ".$self->{'mount'} || warn "umount error: $!" && return 0; } return 1; @@ -342,7 +343,7 @@ sub e_getdir { my %out; foreach my $f (sort keys %files) { if ($dirname) { - if ($f =~ s/^\E$dirname\Q\///) { + if ($f =~ s/^\Q$dirname\E\///) { $out{$f}++ if ($f =~ /^[^\/]+$/); } } else { @@ -364,7 +365,8 @@ sub read_content { $sth->{'read'}->execute($id) || die $sth->{'read'}->errstr; $files{$file}{cont} = $sth->{'read'}->fetchrow_array; - $files{$file}{ctime} = time(); + # I should modify ctime only if content in database changed + #$files{$file}{ctime} = time() unless ($files{$file}{ctime}); print "file '$file' content [",length($files{$file}{cont})," bytes] read in cache\n"; } @@ -410,6 +412,7 @@ sub clear_cont { print "invalidate all cached content\n"; foreach my $f (keys %files) { delete $files{$f}{cont}; + delete $files{$f}{ctime}; } print "begin new transaction\n"; #$dbh->begin_work || die $dbh->errstr; @@ -524,7 +527,7 @@ C website L Example for WebGUI which comes with this distribution in -directory L. It also contains a lot of documentation +directory C. It also contains a lot of documentation about design of this module, usage and limitations. =head1 AUTHOR