updated git and svn scripts
[xrzperl.git] / diskimg-umount
blob2b0af867639b4af74bb2da1d20b196cde1423186
1 #!/usr/bin/perl -w
2 ###APPNAME: diskimg-umount
3 ###APPAUTHOR: root
4 ###APPDATE: Sun Oct 7 01:45:28 2007
5 ###APPVER: 0.1
6 ###APPDESC: unmount partitions of disk image
7 ###APPUSAGE: (diskimage name)
8 ###APPEXAMPLE: diskimg-umount disk.img
9 ###APPOPTION:
10 use strict;
11 $ARGV[0]="-h" unless(@ARGV);
12 foreach(@ARGV){
13 exit(system("plhelp",$0,@ARGV)) if($_ eq "-h" || $_ eq "--help");
16 #die("You must be root for running $0.\n") unless($>==0);
18 my $disk=shift;
20 sub sudo_system {
21 if ($>==0) {
22 return (system(@_)==0);
24 else {
25 return (system("sudo",@_)==0);
29 sub sudo_qx($) {
30 if ($>==0) {
31 return `$_[0]`;
33 else {
34 return `sudo $_[0]`;
38 sub umount($) {
39 my $loopdev=shift;
40 print STDERR ("Unmounting $_...\n");
41 sudo_system("umount",$_) or print STDERR ("$!\n");
42 print STDERR ("Delete loopback device $_...\n");
43 sudo_system("losetup","-vd",$_) or print STDERR ("$!\n");
46 open(TABLE,"mount|") or die("$!\n");
48 my @m_loop;
49 while(<TABLE>) {
50 chomp;
51 if(m/^(\/dev\/loop.*)\s+on\s+/) {
52 push @m_loop,$1;
55 close TABLE;
57 my $match=0;
58 foreach(@m_loop) {
59 if($_ eq $disk) {
60 &umount($_);
61 $match++;
63 else {
64 my $info=sudo_qx("/sbin/losetup $_ 2>/dev/null");
65 chomp($info);
66 print $info,"\n";
67 if($info =~ m/\s*\($disk\)\s*,\s*offset/ or $info =~ m/\($disk\)\$*$/) {
68 &umount($_);
69 $match++;
73 print STDERR "$disk not mounted\n" unless($match);