. "$IPKG_INSTROOT/lib/functions.sh"

asrock_bootconfig_mangle() {
	local mtdnum="$( find_mtd_index 0:BOOTCONFIG )"

	if [ -z "$mtdnum" ]; then
		echo "cannot find bootconfig mtd partition"
		return 1
	fi
	dd if=/dev/mtd$mtdnum of=/tmp/mtd$mtdnum bs=1k

	local partition_byte="$(dd if=/tmp/mtd$mtdnum bs=1 skip=52 count=1)"
	local upgrade_byte="$(dd if=/tmp/mtd$mtdnum bs=1 skip=4 count=1)"

	if [ $1 = "bootcheck" ]; then
		if [ ! -s $upgrade_byte ]; then
			dd if=/dev/mtd$mtdnum of=/tmp/mtd$mtdnum bs=1k
			printf '\x00' | dd of=/tmp/mtd$mtdnum conv=notrunc bs=1 seek=4
			printf '\x00' | dd of=/tmp/mtd$mtdnum conv=notrunc bs=1 seek=56
		else
			return 1
		fi
	elif [ $1 = "sysupgrade" ]; then
		printf '\x01' | dd of=/tmp/mtd$mtdnum conv=notrunc bs=1 seek=4
		printf '\x01' | dd of=/tmp/mtd$mtdnum conv=notrunc bs=1 seek=56
	fi

	if [ -s $partition_byte ]; then
		printf '\x01' | dd of=/tmp/mtd$mtdnum conv=notrunc bs=1 seek=52
	else
		printf '\x00' | dd of=/tmp/mtd$mtdnum conv=notrunc bs=1 seek=52
	fi

	mtd write /tmp/mtd$mtdnum /dev/mtd$mtdnum
	return 0
}

asrock_upgrade_prepare() {
	local ubidev="$( nand_find_ubi ubi )"

	#Set upgrade flag. If something goes wrong, router will boot with
	#factory firmware.
	asrock_bootconfig_mangle 'sysupgrade'

	if [ $? -ne 0 ]; then
		echo "cannot find bootconfig mtd partition"
		exit 1
	fi

	# Just delete these partitions if present and use
	# OpenWrt's standard names for those.
	ubirmvol /dev/$ubidev -N ubi_rootfs &> /dev/null || true
	ubirmvol /dev/$ubidev -N ubi_rootfs_data &> /dev/null || true
}
