#!/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 'root=.*nfs\|mmcblk\|ram' /proc/cmdline; then
  if grep -q ubifs /proc/cmdline; then
    mount -t ubifs ubi0:rootfs_data /overlay
# The code block is disabled until a fix is made due to a global problem with the overlay
#  elif grep -q loop /proc/devices; then
#    mount -t devtmpfs devtmpfs /dev
#    mount -t tmpfs tmpfs /overlay
#    sleep 1
#    mkdir -p /overlay/sdcard
#    mount -r /dev/mmcblk0p1 /overlay/sdcard
#    tar -xf /overlay/sdcard/settings.tar -C /overlay && echo OpenIPC: Extract settings from sdcard
#    umount /overlay/sdcard
#    rmdir /overlay/sdcard
  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
fi