#!/bin/sh
#set -x

path2dev()
{
echo "$1"|sed  's#/[^/]*/\([^/]*\).*#/dev/\1#';
}

path2mnt()
{
echo "$1"|sed  's#/[^/]*/\([^/]*\).*#/mnt/\1#';
}

dev2mnt()
{
echo $1|sed  's#/dev/#/mnt/#';
}

where_is_mounted() {
    local device=$(path2mnt $1) 
    if [ -d $device ];then 
       mountpoint=$device;
       return 0;
    fi
    device=$(path2dev $1);
    if grep -q "^$device " /proc/mounts; then
        mountpoint=$(grep "^$device " /proc/mounts | { read d mountpoint rest;echo $mountpoint; });
        return 0
    fi
    return 1
}

myrun()
{
export MYRUNCMD="$@";
ret=0;
while :;do
eval $MYRUNCMD && break || { 
echo -ne "failed!:$@\nexit  :retry\nexit 1:skip\nexit 2:abort\n$errmsg";
echo "$@" >> /.ash_history
/bin/sh ;
case "$?" in
1)
break
;;
2)
ret=1;
break
;;
esac;
}
done
errmsg="";
return $ret;
}


mountdev()
{
local linuxdev=$(path2dev $1);
if ! where_is_mounted $linuxdev;then
mkdir -p $(dev2mnt $linuxdev)
errmsg="try:fsck -y -C  $linuxdev"  myrun mount $linuxdev $(dev2mnt $linuxdev) -o ro  || return 2
return 1
fi
return 0;
}

for i in `cat /proc/cmdline`;
do
case $i in
waitdev=*)
2>/dev/null 1</dev/${i##waitdev=} || { 
echo -n wait ${i##waitdev=} to settle ; sleep 1; 
while :;do
	2>/dev/null 1</dev/${i##waitdev=} && { echo done;break; } || { echo -n .; sleep 1; }
done
}
;;
rc=*)
i=${i##rc=}
mountdev $i
newmount=$?
file=$(dev2mnt $i)
if [ -f $file ]; then
exec </dev/console >/dev/console 2>&0
/debug/ttyrun /bin/sh  $file
fi
if [ $newmount == 1 ]; then
umount $(path2mnt $i);
rmdir $(path2mnt $i);
fi

;;
esac
done

