#!/bin/bash -efu

localdev_slice()
{
	enter "localdev_slice"

	local odev mp devname="" mnt=""

	if [ -n "$overlays" ]; then
		overlays="${overlays//\\040/ }"
		if [ "$overlays" = local_profile ]; then
			devname="$(stage2_getenv DEVICE)"
			[ -z "$devname" ] ||
				devname="/dev/$devname"
			overlays=
		elif [ -L "/dev/disk/by-label/$overlays" ]; then
			devname="$(readlink-e "/dev/disk/by-label/$overlays" ||:)"
		fi
	fi

	odev="${devname}${overlays:+ (\"$overlays\")}"

	if [ -z "$overlays" ] || [ -z "$devname" ]; then
		debug "overlay device not defined"
		leave "localdev_slice"
		return 0
	elif [ ! -b "$devname" ]; then
		message "specified overlay device not found: $odev"
		leave "localdev_slice"
		return 0
	fi

	message "mounting local overlays for profile '$profile'"
	mp="$(grep -s "$devname /" /proc/mounts |cut -f2 -d' ')"

	if [ -n "$mp" ]; then
		debug "device $odev already mounted to $mp"
	else
		mp="$prevdir.rw/rw$OEM_IMAGES_BASE"

		run mkdir -p -- "$mp"

		if run mount -o ro -- "$devname" "$mp"; then
			debug "device $odev has been mounted to $mp"
			mnt=1
		else
			message "can't mount specified overlay device: $odev"
			run rmdir -- "$mp" ||:
			leave "localdev_slice"
			return 0
		fi
	fi

	if [ -d "$mp/$profile" ]; then
		mount_overlays "$mp"
	else
		message "however specified profile not found: '$profile'"

		if [ -n "$mnt" ]; then
			run umount -fl -- "$mp" ||:
			run rmdir -- "$mp" ||:
		fi
	fi

	leave "localdev_slice"
}

case "$method" in
disk|cdrom)
	localdev_slice
	;;
esac
