#!/bin/sh

convert_dev() {
	local retval dev value major minor
	retval="$1"
	dev="$2"

	case "$dev" in
		[0-9]*:[0-9]*)
			value="/dev/block/$dev"
			;;
		[0-9]*)
			value=$(( 0x$dev ))
			major=$(( $value / 256 ))
			minor=$(( $value % 256 ))
			value="/dev/block/$major:$minor"
			;;
		*)
			value="$dev"
			;;
	esac
	eval "$retval=\"\$value\""
}

msg='Generation fstab...'
run() {
	local i=1 n dev path str s0 ndev

	[ ! -s /etc/fstab ] ||
		while read dev path str; do
			[ -n "${dev##\#*}" ] && [ -z "${path##/*}" ] ||
				continue
			n=$i
			[ "$path" = / ] && n=0 || i=$(($i+1))

			convert_dev ndev "$dev"

			eval "local s$n=\"\$ndev \$rootmnt\$path \$str\""
		done < /etc/fstab

	if [ -n "${ROOT-}" ]; then
		convert_dev ndev "$ROOT"
		s0="$ndev $rootmnt ${ROOTFSTYPE:-auto} ${ROOTFLAGS:-defaults} 1 1"
	fi

	if [ -z "${s0-}" ]; then
		error "Root device unspecified."
		return 1
	fi

	n=0
	while [ $n -lt $i ]; do
		eval "printf '%s\n' \"\$s$n\""
		n=$(($n+1))
	done > /etc/fstab
}
