Make ioctl implementation BSD-friendly.
[perl-fuse.git] / test / helper.pm
index ba179a1..ca75dc3 100644 (file)
@@ -6,17 +6,21 @@ use Config;
 use POSIX qw(WEXITSTATUS);
 our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
 @ISA = "Exporter";
-@EXPORT_OK = qw($_loop $_point $_pidfile $_real);
-our($_loop, $_point, $_pidfile, $_real) = ("","/tmp/fusemnt-".$ENV{LOGNAME},"test/s/mounted.pid","/tmp/fusetest-".$ENV{LOGNAME});
-$_loop = $Config{useithreads} ? "examples/loopback_t.pl" : "examples/loopback.pl";
+@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},$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$|) {
        my ($reject) = 1;
-       if(-f $_pidfile) {
-               unless(POSIX::WEXITSTATUS(system("ps `cat $_pidfile` | grep \"$_loop $_point\" >/dev/null"))) {
-                       if(`mount | grep "on $_point"`) {
+       if(open my $fh, '<', $_pidfile) {
+               my $pid = do {local $/ = undef; <$fh>};
+               close $fh;
+               if(kill 0, $pid) {
+                       if(`mount` =~ m{on (?:/private)?$_point }) {
                                $reject = 0;
                        } else {
-                               system("kill `cat $_pidfile`");
+                               kill 1, $pid;
                        }
                }
        }