#!/bin/bash

SD_PREFIX=$(sed -nr 's#^.*root=[^ ]*/([^ ]+)[1-8].*$#\1#gp' /proc/cmdline)

if [ "${SD_PREFIX}" == "" ];then
   SD_PREFIX="mmcblk0p"
fi

BOOT_DEVICE="/dev/${SD_PREFIX}1"
BOOTCONF_DEVICE="/dev/${SD_PREFIX}2"
RECOVERY_DEVICE="/dev/${SD_PREFIX}3"
RESERVED_DEVICE="/dev/${SD_PREFIX}8"

systembootmount="/run/media/systemboot/"
bootconfmount="/run/media/bootconf/"
reservedmount="/run/reserved/"

function MountExt4Partition()
{
   local device=$1
   local mountpoint=$2

   if [ ! -d ${mountpoint} ]; then
      mkdir -p ${mountpoint}
   fi

   # mount partition.
   for i in $(seq 1 3)
   do
      mount -o rw,noatime,nodev ${device} ${mountpoint}
      if [ $? -ne 0 ]; then
         echo "Mount ${device} partition failed"

         # Try to fix partition errors when checking mount partition failed.
         fsck -y ${device}
      else
         echo "Mount ${device} partition success"
         break
      fi
   done
}

function FsckExt4Partition()
{
   local device=$1
   fsck.ext4 -p ${device}
   if [ $? -ne 0 ]; then
      echo "Failed to fsck.ext4 -p ${device}"
      fsck -y ${device}
   fi
}

# fsck systemboot and bootconf partition and clean the fsck residual files, like FSCK0000.REC
# on systemboot partition
umount ${BOOT_DEVICE}
fsck.vfat -p ${BOOT_DEVICE}
if [ ! -d ${systembootmount} ]; then
   mkdir -p ${systembootmount}
fi
mount ${BOOT_DEVICE} ${systembootmount}
rm ${systembootmount}FSCK*
umount ${systembootmount}

# we found that fsck on bootconf partition may delete signatures, like boot_boot_broken
# so cancel this step temporarily.

# fsck recovery partition
FsckExt4Partition ${RECOVERY_DEVICE}

# TODO: need do fsck for rootfs1, rootfs2 in future

PRODUCT_DEVICE="/dev/${SD_PREFIX}7"
MAVERICK_DIR="/opt/maverick"

# fsck check product partition.
fsck.ext4 -p ${PRODUCT_DEVICE}

# fsck check reserved partition.
fsck.ext4 -p ${RESERVED_DEVICE}

# mount product partition.
MountExt4Partition ${PRODUCT_DEVICE} ${MAVERICK_DIR}

# mount reserved partition.
MountExt4Partition ${RESERVED_DEVICE} ${reservedmount}
