$captive_sandbox_server_bin="/usr/sbin/captive-sandbox-server" if $captive_sandbox_server_bin=~/^@/;
-my $fsname=($0=~m#([^/]*)$#)[0] or die "Cannot detetect my basename from: $0";
+my $ME=($0=~m#([^/]*)$#)[0] or die "Cannot detetect my basename from: $0";
+my $fsname=$ME;
$fsname=~s/^mount[.]captive-// or die "Cannot detect captive filesystem module from my name: $fsname";
my $image=shift @ARGV or die "Missing argv[1]: device or image pathname";
-r $image or die "Image pathname not readable: $image";
# to let the options be overridable by user (such as 'ro').
my @opt_captive=();
my @opt_lufs=();
+my $opt_force;
for (split /,/,$oo) {
$_="--$_" if $_ eq "ro" || $_ eq "rw";
+ $opt_force=1 if $_ eq "force";
push @opt_captive,$_ if /^--/;
push @opt_lufs,$_ if !/^--/;
}
+
+if (!$opt_force) {
+ local *MTAB;
+ if (!open MTAB,"/etc/mtab") {
+ warn "Cannot open /etc/mtab: $!";
+ }
+ else {
+ local $/=undef();
+ my $mtab=<MTAB>;
+ close MTAB;
+ die ""
+ ."$ME: $image already mounted\n"
+ ."$ME: according to mtab, $image is mounted on $1\n"
+ ."$ME: Use '-o force' to mount the image notwithstanding.\n"
+ if $mtab=~/^\Q$image\E\s+(\S+)/m;
+ }
+ }
+
$oo=""
."mntent.mnt_fsname=$image,mntent.mnt_type=captive-$fsname," # Double-dashes forbidden.
."dir_cache_entries=0,"