fixed and added man/help/debug
authorHeiko Schlittermann (JUMPER) <hs@schlittermann.de>
Sun, 07 Aug 2011 11:07:27 +0200
changeset 3 92690b23b317
parent 2 19a7554ddd6c
child 4 cdf3ca65d677
fixed and added man/help/debug
bin/blockfuse
--- a/bin/blockfuse	Sun Aug 07 10:01:07 2011 +0200
+++ b/bin/blockfuse	Sun Aug 07 11:07:27 2011 +0200
@@ -25,22 +25,39 @@
 use POSIX;
 use autodie qw(:all);
 use Fuse;
+use Getopt::Long;
+use Pod::Usage;
 
+my $opt_debug = 0;
 our $VERSION = "0.1";
 
-my $mountpoint = shift // die "$0: need mountpoint!\n";
+GetOptions(
+    "debug!" => \$opt_debug,
+    "h|help" => sub { pod2usage(-verbose => 1, -exit => 0) },
+    "m|man"  => sub {
+        pod2usage(
+            -verbose   => 2,
+            -exit      => 0,
+            -noperldoc => system("perldoc -V 1>/dev/null 2>&1")
+        );
+    },
+  )
+  and @ARGV == 1
+  or pod2usage();
 
 warn "Your're probably not running a 64bit system, the devices sizes "
   . "will be incorrect!\n"
   if not `uname -m` =~ /64/;
 
-fork() and exit 0;
-
-open(STDIN, "</dev/null");
-setpgid($$ => $$);
+if (not $opt_debug) {
+    fork() and exit 0;
+    open(STDIN, "</dev/null");
+    setpgid($$ => $$);
+}
 
 Fuse::main(
-    mountpoint => $mountpoint,
+    mountpoint => $ARGV[0],
+    debug      => $opt_debug,
     getattr    => \&my_getattr,
     getdir     => \&my_getdir,
     open       => \&my_open,
@@ -80,7 +97,7 @@
     sub my_open {
         my $path = "/dev" . shift;
         eval { open($FD{$path} => $path) };
-        return $!;
+	return $@ ? $! : 0;
     }
 
     sub my_release {
@@ -97,3 +114,44 @@
         return $_;
     }
 }
+
+__END__
+
+=head1 NAME
+
+    blockfuse - mount /dev and map block devices into files
+
+=head1 SYNOPSIS
+
+    blockfuse [-d|--debug] {mountpoint}
+
+    blockfuse [-h|--help] [-m|--man]
+
+=head1 DESCRIPTION
+
+B<blockfuse> is a Fuse helper to mount the "/dev" structure to some
+mointpoint and map all block devices into ordinary files. This makes
+B<rsync> happy.
+
+=head1 OPTIONS
+
+=over
+
+=item B<-d> | B<--debug>
+
+Switch on Fuse debugging. It will prevent B<blockfuse> to fork to background
+too. (default: no debugging)
+
+=item B<-h> | B<--help> | B<-m> | B<--man>
+
+The standard help options.
+
+=back
+
+=head1 AUTHOR and SOURCE
+
+Heiko Schlittermann <hs@schlittermann.de>
+
+Source: L<https://ssl.schlittermann.de/hg/blockfuse>
+
+=cut