#!/bin/sh


get_magic_word() {
	dd if=$1 bs=4 count=1 2>/dev/null | od -A n -N 4 -t x1 | tr -d ' '
}

get_post_padding_word() {
	local rootfs_length="$(stat -c%s "$1")"
	[ "$rootfs_length" -ge 4 ] || return
	rootfs_length=$((rootfs_length-4))

	# the JFFS2 end marker must be on a 4K boundary (often 64K or 256K)
	local unaligned_bytes=$((rootfs_length%4096))
	[ "$unaligned_bytes" = 0 ] || return

	# skip rootfs data except the potential EOF marker
	dd if="$1" bs=1 skip="$rootfs_length" 2>/dev/null | od -A n -N 4 -t x1 | tr -d ' '
}

get_fs_type() {
	local magic_word="$(get_magic_word "$1")"

	case "$magic_word" in
	"3118"*)
		echo "ubifs"
		;;
	"68737173")
		local post_padding_word="$(get_post_padding_word "$1")"

		case "$post_padding_word" in
		"deadc0de")
			echo "squashfs-jffs2"
			;;
		*)
			echo "squashfs"
			;;
		esac
		;;
	*)
		echo "unknown"
		;;
	esac
}

round_up() {
	echo "$(((($1 + ($2 - 1))/ $2) * $2))"
}