#!/system/bin/sh
#
# mount ext partition from sd card
#
# Andrew Sutherland - (20121003)

BB=/system/xbin/busybox
E2FSCK=/system/bin/e2fsck
TUNE2FS=/system/bin/tune2fs
logI="log -p i -t mountext"
logE="log -p e -t mountext"

if [ -z "$SD_EXT_DIRECTORY" ]; then SD_EXT_DIRECTORY=/sd-ext; fi

# find SD Card
for MMC_NUM in $(seq 0 9); do
    if [ ! -e /sys/block/mmcblk${MMC_NUM}/device/type ]; then continue; fi
    MMC_TYPE=$(cat /sys/block/mmcblk${MMC_NUM}/device/type)
    if [ "$MMC_TYPE" = "SD" ]; then
        # 2nd partition will be used for /sd-ext
        SD_EXT_PART=/dev/block/mmcblk${MMC_NUM}p2
        setprop ev.sdextpart $SD_EXT_PART
        break
    fi
done

# make sure partition exists
if [ ! -b "$SD_EXT_PART" ]; then exit; fi
# make sure its not already mounted (ie via init.rc)
if ! awk -vBLK="$SD_EXT_PART" '$1 == BLK { exit 1; }' /proc/mounts; then exit; fi

# Check for errors
if [ -x "$E2FSCK" ]; then
    if [ "$(getprop persist.a2sd.forcecheck)" = "true" ]; then
        $E2FSCK -fy $SD_EXT_PART
        setprop persist.a2sd.forcecheck done
    else
        $E2FSCK -p $SD_EXT_PART
    fi
    e2fsk_exitcode=$?
else
    e2fsk_exitcode=0
fi

# Sdcard tweak: remove journal if present
if [ -x "$TUNE2FS" ]; then
    if [ "$($TUNE2FS -l $SD_EXT_PART | $BB grep -o has_journal)" ]; then
        $TUNE2FS -O ^has_journal $SD_EXT_PART >/dev/null
    fi
fi

# Mount: options tuned for sdcards
if [ $e2fsk_exitcode -le 2 ]; then
    $BB mount -t ext4 -o defaults,data=writeback,nobh,noatime,nodiratime,noauto_da_alloc $SD_EXT_PART $SD_EXT_DIRECTORY
fi

# Disable /data encryption on yaffs
DATA_FS_TYPE=$($BB awk -vDIR="/data" '$2 == DIR { print $3; exit; }' /proc/mounts)
if [ "$DATA_FS_TYPE" = "yaffs2" ]; then
    setprop ro.crypto.state unsupported
fi
