#!/system/bin/sh
#
# mount ext4 partition from sd card

BB="logwrapper busybox";

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

# 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
        SDCARD=/dev/block/mmcblk$MMC_NUM
        break
    fi
done

if [ -b "$SDCARD" ];
then
    # find sd-ext partition by label
    PARTITIONS=`cat /proc/partitions|grep mmcblk$MMC_NUM|grep -v "mmcblk$MMC_NUM$"|awk '{print $4}'`
    for PARTITION in $PARTITIONS
    do
        LABEL=`e2label /dev/block/$PARTITION`
        if [ "$LABEL" = "sd-ext" ];
        then
            SD_EXT_PART=/dev/block/$PARTITION
            break
        fi
    done

    if [ -b "$SD_EXT_PART" ];
    then
        log -p i -t mountsd "Checking filesystems..";
   
        # fsck the sdcard filesystem first
        if [ -x `which e2fsck` ];
        then
            e2fsck -y $SD_EXT_PART;e2fsk_exitcode=$?
        else
            echo "executable e2fsck not found, assuming no filesystem errors"
            e2fsk_exitcode=0
        fi
        # set property with exit code in case an error occurs
        setprop cm.e2fsck.errors $e2fsk_exitcode;
        if [ "$e2fsk_exitcode" -lt 2 ];
        then
            # mount and set perms
            $BB mount -o noatime,barrier=1,data=ordered,noauto_da_alloc -t ext4 $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 mountsd "$SD_EXT_DIRECTORY successfully mounted";
            else
                log -p e -t mountsd "Unable to mount filesystem for $SD_EXT_DIRECTORY!";
            fi
        else
            log -p e -t mountsd "Unable to repair filesystem, disabling apps2sd";
        fi
    fi
fi
