#!/sbin/runscript
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-apps/busybox/files/mdev.rc.1,v 1.1 2011/09/17 03:46:33 vapier Exp $

depend()
{
	provide dev
	need sysfs
}

find_mdev()
{
	if [ -x /sbin/mdev ] ; then
		echo "/sbin/mdev"
	else
		echo "/bin/busybox mdev"
	fi
}

populate_mdev()
{
	# populate /dev with devices already found by the kernel

	if get_bootparam "nocoldplug" ; then
		RC_COLDPLUG="no"
		ewarn "Skipping mdev coldplug as requested in kernel cmdline"
	fi

	ebegin "Populating /dev with existing devices with mdev -s"
	$(find_mdev) -s
	eend $?

	return 0
}

seed_dev()
{
	# Seed /dev with some things that we know we need

	# creating /dev/console and /dev/tty1 to be able to write
	# to $CONSOLE with/without bootsplash before mdev creates it
	[ -c /dev/console ] || mknod /dev/console c 5 1
	[ -c /dev/tty1 ] || mknod /dev/tty1 c 4 1

	# udevd will dup its stdin/stdout/stderr to /dev/null
	# and we do not want a file which gets buffered in ram
	[ -c /dev/null ] || mknod /dev/null c 1 3

	# copy over any persistant things
	if [ -d /lib/mdev/devices ] ; then
		cp -RPp /lib/mdev/devices/* /dev 2>/dev/null
	fi

	# Not provided by sysfs but needed
	ln -snf /proc/self/fd /dev/fd
	ln -snf fd/0 /dev/stdin
	ln -snf fd/1 /dev/stdout
	ln -snf fd/2 /dev/stderr
	[ -e /proc/kcore ] && ln -snf /proc/kcore /dev/core

	# Create problematic directories
	mkdir -p /dev/pts /dev/shm
}

mount_it()
{
	if fstabinfo --quiet /dev ; then
		mount -n /dev
	else
		# Some devices require exec, Bug #92921
		mount -n -t tmpfs -o "exec,nosuid,mode=0755,size=10M" mdev /dev
	fi
}

start()
{
	# Setup temporary storage for /dev
	ebegin "Mounting /dev for mdev"
	mount_it
	eend $?

	# Create a file so that our rc system knows it's still in sysinit.
	# Existance means init scripts will not directly run.
	# rc will remove the file when done with sysinit.
	touch /dev/.rcsysinit

	seed_dev

	# Setup hotplugging (if possible)
	if [ -e /proc/sys/kernel/hotplug ] ; then
		ebegin "Setting up mdev as hotplug agent"
		echo $(find_mdev) > /proc/sys/kernel/hotplug
		eend 0
	fi

	populate_mdev
}
