#!/bin/sh

. /lib/functions.sh

do_octo_extract_rootfs() {
	local part="$(find_mtd_part "octo_tar")"
	local temp="/tmp/_octo_rootfs"

	[ -n "$part" ] || return
	[ -b "$part" ] || return

	echo "octogate: found mtd device '$part'"

	[ -d "$temp" ] || mkdir -p -m 0755 "$temp"

	cd "$temp" && tar xzf "$part" > /dev/null 2>&1 || {
		echo "octogate: could not extract 'octo_tar'"
		return
	}

	echo "octogate: data extracted to '$temp'"

	# if upper dir exists, assume archive with jffs2 file system
	[ -d "${temp}/upper" ] && {
		cd "${temp}/upper" || return

		# remove whiteouts and opaque directories from /
		for f in $(find -type c); do
			rm -rf "${f:1}" > /dev/null 2>&1
		done

		find -type c -exec rm -rf "{}" \; > /dev/null 2>&1
	}

	cp -a * / > /dev/null 2>&1 && {
		echo "octogate: data copied to '/'"
		cd /tmp > /dev/null 2>&1 && rm -rf "$temp" > /dev/null 2>&1
		return
	}

	echo "octogate: could not copy data to '/'"
}

boot_hook_add preinit_main do_octo_extract_rootfs

