#!/bin/sh

msg () { [ "${quiet}" != "y" ] && echo $@; }
err () { echo "ERROR: $@"; }

msg ":: Loading Initramfs"

/bin/mount -t sysfs none /sys
/bin/mount -t proc  none /proc

read CMDLINE </proc/cmdline
export CMDLINE

# Used so hooks can override params to kinit
export root=""
export rootdelay="0"
export kinit_params=""
echo "/bin/modprobe" > /proc/sys/kernel/modprobe

for cmd in $CMDLINE; do
    case "$cmd" in
        [0123456Ss]) continue ;;
        *=*) export "${cmd}" ;;
        *) export "${cmd}=y" ;;
    esac
done

OLDIFS=$IFS
IFS=,
if [ "x${disablehooks}" != "x" ]; then
    for d in ${disablehooks}; do
        export "hook_${d}=disabled"
    done
fi

if [ "x${disablemodules}" != "x" ]; then
    for d in ${disablemodules}; do
        export "mod_${d}=disabled"
    done
fi
IFS=$OLDIFS

. /config

for m in $MODULES; do
    TST=""
    eval "TST=\$mod_${h}"
    if [ "${TST}" != "disabled" ]; then
        /bin/modprobe -q $m > /dev/null 2>&1
    fi
done

if [ -e "/hooks" ]; then
    for h in $HOOKS; do
        TST=""
        eval "TST=\$hook_${h}"
        if [ "${TST}" != "disabled" ]; then
            run_hook () { msg "$h: no run function defined"; }
            if [ -e "/hooks/$h" ]; then
               . /hooks/$h
               msg ":: Running Hook [${h}]"
               run_hook
            fi
        fi
    done
fi

if [ "${break}" = "y" ]; then
    echo ":: Break requested, type 'exit' to resume operation"
    echo "   NOTE: klibc contains no 'ls' binary, used 'echo *' instead"
    PS1="ramfs$ " /bin/sh -i
fi

#Special handling is udev is running
udevpid=$(/bin/minips -C udevd -o pid=)
if [ "x${udevpid}" != "x" ]; then
    /bin/kill -9 $udevpid
    /bin/sleep 0.01
fi

# Optimize fs type loop for mounting rootfs
msg ":: Initramfs Completed - control passing to kinit"

echo "/sbin/modprobe" > /proc/sys/kernel/modprobe
exec /bin/kinit "root=${root}" "rootdelay=${rootdelay}" ${kinit_params} < /dev/console > /dev/null 2>&1