#!/system/bin/sh FAIL_CODE=32767 function do_test() { # parameters: sizeK vfat_arg id UUT=/tmp/$$.disk MPT=/tmp/$$ DEV=/dev/block/loop7 step=0 rc=0 while true; do step=1 echo "Creating disk of size $1..." | tee -a $LOG dd if=/dev/zero of=$UUT bs=1024 count=$1 >> $LOG rc=$? if [ $rc -ne 0 ]; then echo "Problems with dd" | tee -a $LOG break fi step=2 echo "Setting up loop device $DEV" losetup $DEV $UUT >> $LOG rc=$? if [ $rc -ne 0 ]; then echo "Problems setting up loop device" | tee -a $LOG break fi step=3 echo "Running mkfs.vfat..." | tee -a $LOG mkfs.vfat $2 -i $3 $DEV >> $LOG rc=$? if [ $rc -ne 0 ]; then echo "Problems formatting loop device" | tee -a $LOG break fi step=4 mkdir -p $MPT step=5 # argument "-t vfat" here is necessary, busybox's mount requires it echo "Mounting device" | tee -a $LOG mount -t vfat $DEV $MPT | tee -a $LOG rc=$? if [ $rc -ne 0 ]; then echo "Could not mount device" | tee -a $LOG break fi step=6 echo "Getting volume ID" | tee -a $LOG v1=`/system/bin/vfat-volid --path $MPT -i` rc=$? if [ $rc -ne 0 ]; then echo "Error when getting volume ID" | tee -a $LOG break fi step=7 echo "Got volume IDs $v1 and $3, should be identical" | tee -a $LOG if [ x$v1 != x$3 ]; then rc=$FAIL_CODE # indicate fail fi break done # clean up [ $step -gt 5 ] && umount $MPT [ $step -gt 4 ] && rmdir $MPT [ $step -gt 2 ] && losetup -d $DEV [ $step -gt 1 ] && rm $UUT return $rc } echo "Starting" mount -o rw,remount / mkdir /tmp LOG=/dev/null if [ $# -ge 1 ]; then LOG=$1 fi for FTYPE in 12 16 32; do for SIZE in 360 1024 102400; do for ID in 0x12347900 0x00000000 0xDEADBEEF; do do_test "$SIZE" "-F $FTYPE" "$ID" rc=$? if [ $rc -ne 0 ]; then echo -e "### FAIL code = $rc" | tee -a $LOG echo -e "[vfat_${FTYPE}_${SIZE}_$ID]: test failed" else echo -e "### PASS" | tee -a $LOG echo -e "[vfat_${FTYPE}_${SIZE}_$ID]: test passed" fi echo -e "(FTYPE=$FTYPE, SIZE=$SIZE, ID=$ID)\n" | tee -a $LOG done done done