Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge branch 'master' of github.com:dpavlin/perl-fuse

  • Loading branch information...
commit 77b8ae12839c2799580ab9cfcaa08a3bf2c463e5 2 parents 4ac1cc8 + 5f24253
@demonfoo demonfoo authored
Showing with 23 additions and 13 deletions.
  1. +22 −12 examples/loopback.pl
  2. +1 −1  test/helper.pm
View
34 examples/loopback.pl
@@ -27,7 +27,7 @@
use blib;
use Fuse;
use IO::File;
-use POSIX qw(ENOENT ENOSYS EEXIST EPERM O_RDONLY O_RDWR O_APPEND O_CREAT);
+use POSIX qw(ENOENT ENOSYS EEXIST EPERM O_RDONLY O_RDWR O_APPEND O_CREAT setsid);
use Fcntl qw(S_ISBLK S_ISCHR S_ISFIFO SEEK_SET S_ISREG S_ISFIFO S_IMODE S_ISCHR S_ISBLK S_ISSOCK);
use Getopt::Long;
use Lchown;
@@ -175,6 +175,25 @@ sub x_statfs {
}
return 255,1000000,500000,1000000,500000,4096;
}
+
+# Required for some edge cases where a simple fork() won't do.
+# from http://perldoc.perl.org/perlipc.html#Complete-Dissociation-of-Child -from-Parent
+sub daemonize {
+ chdir("/") || die "can't chdir to /: $!";
+ open(STDIN, "< /dev/null") || die "can't read /dev/null: $!";
+ open(STDOUT, "> /dev/null") || die "can't write to /dev/null: $!";
+ defined(my $pid = fork()) || die "can't fork: $!";
+ exit if $pid; # non-zero now means I am the parent
+ (setsid() != -1) || die "Can't start a new session: $!";
+ open(STDERR, ">&STDOUT") || die "can't dup stdout: $!";
+
+ if ($pidfile) {
+ open(PIDFILE, '>', $pidfile);
+ print PIDFILE $$, "\n";
+ close(PIDFILE);
+ }
+}
+
my ($mountpoint) = '';
$mountpoint = shift(@ARGV) if @ARGV;
@@ -182,18 +201,9 @@ sub x_statfs {
print STDERR "ERROR: attempted to mount to non-directory\n";
return -&ENOTDIR
}
-my $pid = fork();
-die("fork() failed: $!") unless defined $pid;
-if ($pid > 0) {
- # parent process
- exit(0);
-}
-if ($pidfile) {
- open(PIDFILE, '>', $pidfile);
- print PIDFILE $$, "\n";
- close(PIDFILE);
-}
+daemonize();
+
Fuse::main(
'mountpoint' => $mountpoint,
'getattr' => 'main::x_getattr',
View
2  test/helper.pm
@@ -8,7 +8,7 @@ our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
@ISA = "Exporter";
@EXPORT_OK = qw($_loop $_opts $_point $_pidfile $_real);
my $tmp = -d '/private' ? '/private/tmp' : '/tmp';
-our($_loop, $_point, $_pidfile, $_real, $_opts) = ('examples/loopback.pl',"$tmp/fusemnt-".$ENV{LOGNAME},"test/s/mounted.pid","$tmp/fusetest-".$ENV{LOGNAME}, '');
+our($_loop, $_point, $_pidfile, $_real, $_opts) = ('examples/loopback.pl',"$tmp/fusemnt-".$ENV{LOGNAME},$ENV{'PWD'} . "/test/s/mounted.pid","$tmp/fusetest-".$ENV{LOGNAME}, '');
$_opts = '--pidfile ' . $_pidfile;
$_opts .= $Config{useithreads} ? ' --use-threads' : '';
if($0 !~ qr|s/u?mount\.t$|) {
Please sign in to comment.
Something went wrong with that request. Please try again.