#!/bin/sh
#Unmount a mounted MNTPT.
# By Alan M Bruce (qole)
#
# GPL licensed; keep code free!

if [ "`whoami`" != "root" ] ; then
  echo "please run me as root!"
  exit 9
fi

#Try to get the MNTPT location from the first parameter
MNTPT=$1

#Try to get the MNTPT location from the config file... 
if [ "x$MNTPT" = x ] ; then
  #Pull in the config, if possible...
  [ -f /home/user/.chroot ] && . /home/user/.chroot
  MNTPT=$CHROOT
  #Still not set? FAIL
  if [ "x$MNTPT" != x ] ; then
    echo "No mountpoint to unmount!" >/dev/stderr
    exit 8
  fi
fi

# Strip off a trailing slash
LASTCHAR=`echo $MNTPT | cut -c ${#MNTPT}`
if [ "$LASTCHAR" = "/" ] ; then
   echo "..stripping trailing slash..." >/dev/stderr
   MNTPT=`echo $MNTPT | cut -c 0-$((${#MNTPT}-1))`
fi

TEST1=`mount | grep " $MNTPT "`

if [ "x$TEST1" != "x" ] ; then
  echo "..Unmounting $MNTPT..." >/dev/stderr
  umount -ld "$MNTPT"

  TEST2=`mount | grep " $MNTPT "`

  if [ "x$TEST2" != "x" ] ; then
    echo "...$MNTPT didn't unmount!" >/dev/stderr
    exit 8
  fi
else
  echo "$MNTPT is not mounted; Check for trailing slashes." >/dev/stderr
fi

if [ ! "x`grep device-mapper /proc/misc`" = "x" ] ; then
  LOOPDEV=`echo $TEST1 | cut -f1 -d' '`
  while [ "x`echo $LOOPDEV | grep dm-`" != "x" ] ; do
    LOOPNO=`echo $LOOPDEV | awk -F '-' '{print $NF}'`
    echo "..Unmounting turbo loop ($LOOPNO)..." >/dev/stderr
    dmlosetup -d /dev/loop$LOOPNO
    if [ "$?" != 0 ] || [ "x`dmsetup status | grep loop$LOOPNO`" != "x" ] ; then
      echo "Waiting for apps to terminate, will try again." >/dev/stderr
      sleep 5
      dmlosetup -d /dev/loop$LOOPNO 
      if [ "$?" != 0 ] ; then
        echo "Can't unmount turbo-loop! Try dmlosetup -d /dev/loop$LOOPNO manually." >/dev/stderr
        exit 9
      fi
    fi
    LOOPDEV=`mount | grep " $MNTPT " | cut -f1 -d' '`
  done
fi

echo "successful unmount..." >/dev/stderr
exit 0
