#!/bin/sh

on_exit()
{
  mountpoint -q /proc && umount /proc
  exec /sbin/init $*
}

trap on_exit 0

mount -t proc proc /proc || exit
grep -q overlay /proc/filesystems || exit

if grep -q ubifs /proc/cmdline; then
  mount -t ubifs ubi0:rootfs_data /overlay
else
  mtdblkdev=`awk -F ':' '/rootfs_data/ {print $1}' /proc/mtd | sed 's/mtd/mtdblock/'`
  mtdchrdev=`grep 'rootfs_data' /proc/mtd | cut -d: -f1`
  mount -t jffs2 /dev/${mtdblkdev} /overlay
  
  if [ $? -ne 0 ] || { dmesg | grep "jffs2.*: Magic bitmask.*not found" > /dev/null 2>&1; } then
	echo "jffs2 health check error, format required!"
	flash_eraseall -j /dev/${mtdchrdev}
	echo "Done! Remounting..."
	mount -t jffs2 /dev/${mtdblkdev} /overlay || mount -t tmpfs tmpfs /overlay || exit
	if ! cat /proc/mounts | grep ${mtdblkdev}; then
	  echo "--------------------------------"
	  echo "Crash - your flash in the trash!"
	  echo "--------------------------------"
	fi
  fi
fi

if grep -q overlayfs /proc/filesystems; then
  mount -t overlayfs overlayfs -o lowerdir=/,upperdir=/overlay,ro /mnt || { umount /overlay; exit; }
else
  overlay_rootdir=/overlay/root
  overlay_workdir=/overlay/work
  mkdir -p ${overlay_rootdir} ${overlay_workdir}
  mount -t overlay overlay -o lowerdir=/,upperdir=${overlay_rootdir},workdir=${overlay_workdir} /mnt || { umount /overlay; exit; }
fi

pivot_root /mnt /mnt/rom
mount -o noatime,move /rom/proc /proc
mount -o noatime,move /rom/dev /dev
mount -o noatime,move /rom/overlay /overlay