#!/bin/sh
set -e

if [ "$1" = driver ]; then
	WANTDRIVER=1
elif [ "$1" = floppy ]; then
	WANTFLOPPY=1
fi

MNT=/media

devlist() {
		list-devices usb-partition
}

media_mounted() {
	mount | cut -d' ' -f3 | grep -q "^$MNT$"
}

try_mount() {
	# TO REMOVE, there is a bug somewhere in the kernel, the first
	# mount command fail when changing floppy disk
	# so we have to launch mount twice
	mount $1 -tauto $MNT || true
	umount $MNT || true
	mount $1 -tauto $MNT
	media_mounted && checkcontents $MNT
}

checkcontents() {
	dir="$1"

	if [ "$WANTDRIVER" ]; then
		# Make sure this is driver media by checking the files on
		# it. Check for regular debs, udebs, and to be on the safe
		# side, check for *.ude files (msdos file names...)
		for filename in $dir/*.deb $dir/*.udeb $dir/*.ude \
		    $dir/firmware/*.deb $dir/firmware/*.udeb $dir/firmware/*.ude; do
			if [ -f "$filename" ]; then
				return 0 # success
			fi
		done
		# umount can legitimatly fail if something is keeping
		# it open
		umount $dir 2>/dev/null || true
		return 1
	else
		return 0 
	fi
}

if ! ( media_mounted && checkcontents $MNT ); then
	# Special case for an already mounted /hd-media.
	if [ -d /hd-media ] && checkcontents /hd-media; then
		mount --bind /hd-media /media
		exit 0
	fi

	if ! grep -q ^vfat /proc/modules ; then
		log-output -t mountmedia modprobe -q vfat || true
	fi

	# Repeat twice if necessary, to accomodate devices that need some
	# time to initialise, like USB devices.
	for i in 1 2; do
		for dev in $(devlist); do
			if try_mount $dev; then
				exit 0 # success
			fi
		done
		
		if [ "$i" = 1 ]; then       
			# Give USB time to settle, make sure all devices are
			# seen next time though.
			sleep 5
		fi
	done

fi
