#!/system/bin/sh
#
# mount ext partition from sd card and swapon

SD_EXT_DIRECTORY=/sd-ext;
BB="/system/xbin/busybox";
FDISK="$BB fdisk -l";
E2FSCK="/system/bin/e2fsck";
PROP=`getprop persist.sys.noswap`

# find SD Card
for MMC_NUM in `seq 0 9`;
do
    MMC_TYPE=`cat /sys/block/mmcblk${MMC_NUM}/device/type`
    if [ "$MMC_TYPE" = "SD" ];
    then
        # 2nd partition of sdcard should be the sd-ext if it exists
        SD_EXT_PART=/dev/block/mmcblk${MMC_NUM}p2
        # Find the linux and swap partitions (if they exist)
        #SD_EXT_PART=`$FDISK /dev/block/mmcblk${MMC_NUM} | awk '/^\// && $5 == 83 {print $1;exit;}'`;
        SWAP_PART=`$FDISK /dev/block/mmcblk${MMC_NUM} | awk '/^\// && $5 == 82 {print $1;exit;}'`;
        setprop ev.sdextpart $SD_EXT_PART
        break;
    fi;
done
# mount sdcard if a valid partition was found
if [ -b "$SD_EXT_PART" ];
then
    log -p i -t mountext "Checking $SD_EXT_PART for errors...";
    # fsck the sd-ext filesystem first
    if [ -x "$E2FSCK" ];
    then
        $E2FSCK -y $SD_EXT_PART;
        e2fsk_exitcode=$?;
    else
        log -p i -t mountext "executable e2fsck not found, assuming no filesystem errors";
        e2fsk_exitcode=0;
    fi;
    # set property with exit code in case an error occurs
    setprop ev.e2fsck.errors $e2fsk_exitcode;
    if [ "$e2fsk_exitcode" -lt 2 ];
    then
        # mount and set perms
        # it is ok to mount ext[3/4] partitions as ext4
        $BB mount -t ext4 -o data=ordered,commit=15,barrier=1,nouser_xattr,errors=continue,noatime,nodiratime,nosuid,nodev $SD_EXT_PART $SD_EXT_DIRECTORY;
        if [ "$?" = 0 ];
        then
            $BB chown 1000:1000 $SD_EXT_DIRECTORY;
            $BB chmod 771 $SD_EXT_DIRECTORY;
            log -p i -t mountext "$SD_EXT_DIRECTORY successfully mounted";
        else
            log -p e -t mountext "Unable to mount filesystem for $SD_EXT_DIRECTORY!";
        fi;
    else
        log -p e -t mountext "e2fsck returned error $e2fsk_exitcode";
        log -p e -t mountext "Unable to repair ext partition...not mounting";
    fi;
else
    log -p e -t mountext "linux partition not found on sdcard";
fi;
# enable swap
if [ "$SWAP_PART" = "" ];
then
    setprop ev.swap 0;
    setprop ev.swappart "none";
    log -p i -t mountext "No swap partition found.";
else
if [ "$PROP" = "1" ];
then
    $BB swapon $SWAP_PART;
    setprop ev.swap 1;
    setprop ev.swappart $SWAP_PART;
    log -p i -t mountext "Swap enabled on $SWAP_PART";
fi;
fi;
