#
# This script provides a way to check for media readiness
# It will copy itself onto the media and validate that the
# copy is successful
#
# Usage: CheckMedia -r { dvd | diskette | usbdiskette | usbflashmem }
#
# This script is meant to be called by chkmedia command and not 
# run manually.
#

# Exit values:
# 0 Success
SUCCESS=0
# 1 Invalid number of parameters.
ERR_NUMPARMS=1
# 2 Invalid parameter.
ERR_INVALPARMS=2
# 3 Invalid parameter value.
ERR_INVALPVAL=3
# 4 Unable to mount resource. Cannot find mount point in /etc/fstab.
ERR_FSTAB=4
# 5 Unable to mount. Media may not be present, or not formatted.
ERR_MOUNT=5
# 6 Unable to write to media. Media may be bad, not formatted or write-protected.
ERR_WRITE=6
# 7 Unable to mount to verify data. Media may not be present.
ERR_MEDIA=7
# 8 Data verification failure.
ERR_DATA=8

exit_cleanup()
{
  # parm 1 exit code, parm 2 cleanup flag
  if [ $2 -eq 1 ];then
     /bin/rm -f $MOUNT_POINT/chkmedia 2>/dev/null
     umount -l $MOUNT_POINT 2>/dev/null
  fi
  exit $1
}

if [ $# -le 1 ]; then
   exit_cleanup $ERR_NUMPARMS 0
fi
MOUNT_POINT=""
TYPE=""
while getopts r: c
do
    case $c in
       r) TYPE="$OPTARG";;
       *) exit_cleanup $ERR_INVALPARMS 0;;
    esac
done
shift $(($OPTIND-1))
case $TYPE in
  dvd) MOUNT_POINT="/media/cdrom";;
  diskette) MOUNT_POINT="/media/floppy";;
  usbdiskette)
	x=`/opt/hsc/bin/discover_devices --all usbfloppy`
        if [ "$x" != "" ]; then
	# now find mount point
          device=`echo "$x" | cut -d';' -f1`
          l=`cat /etc/fstab | grep ^"$device"`
 	  for i in $l
	  do
            d=`/usr/bin/dirname $i 2>/dev/null`
	    if [ "$d" = "/media" ]; then
	       MOUNT_POINT="$i"
	       break
	    fi
	  done
	fi
	;;
  usbflashmem) 
	x=`/opt/hsc/bin/discover_devices --all usbflashkey`
        if [ "$x" != "" ]; then
	# now find mount point
          device=`echo $x | cut -d';' -f1`
          l=`cat /etc/fstab | grep ^"$device"`
 	  for i in $l
	  do
            d=`/usr/bin/dirname $i 2>/dev/null`
	    if [ "$d" = "/media" ]; then
	       MOUNT_POINT="$i"
	       break
	    fi
	  done
	fi
	;;
  *) exit_cleanup $ERR_INVALPVAL 0;;
esac
if [ -z "$MOUNT_POINT" ];then
   exit_cleanup $ERR_FSTAB 0
fi
mount $MOUNT_POINT 2>/dev/null
if [ $? -ne 0 ]; then
   exit_cleanup $ERR_MOUNT 1
fi
cp /usr/hmcrbin/chkmedia $MOUNT_POINT/ 2>/dev/null
if [ $? -ne 0 ]; then
   exit_cleanup $ERR_WRITE 1
fi
umount $MOUNT_POINT 2>/dev/null
# Now remount and verify data written is good
mount $MOUNT_POINT 2>/dev/null
if [ $? -ne 0 ]; then
   exit_cleanup $ERR_MEDIA 1
fi
origsum=`/usr/bin/sum /usr/hmcrbin/chkmedia | cut -d' ' -f1`
cpsum=`/usr/bin/sum $MOUNT_POINT/chkmedia | cut -d' ' -f1`
/bin/rm -f $MOUNT_POINT/chkmedia
if [ "$origsum" = "$cpsum" ]; then
   exit_cleanup $SUCCESS 1
else
   exit_cleanup $ERR_DATA 1
fi

