#!/usr/sbin/openrc-run

description="Load the modules listed in /etc/modules."

depend()
{
	need checkroot.sh
	provide kmod modules
}

[ -f /proc/modules ] || exit 0
[ -x /sbin/modprobe ] || exit 0

[ -f /etc/default/rcS ] && . /etc/default/rcS

load_module() {
	local module="$1" args="$2"
	if [ "$VERBOSE" != no ]; then
		einfo "Loading kernel module $module"
		modprobe $module $args || true
	else
		modprobe $module $args > /dev/null 2>&1 || true
	fi
}

modules_files() {
	local modules_load_dirs='/etc/modules-load.d /run/modules-load.d /usr/local/lib/modules-load.d /usr/lib/modules-load.d'
	local processed=' ' add_etc_modules=true dir file base
	for dir in $modules_load_dirs; do
		[ -d $dir ] || continue
		for file in $(run-parts --list --regex='\.conf$' $dir 2> /dev/null || true); do
			base=${file##*/}
			echo -n "$processed" | grep -qF " $base " && continue
			if [ "$add_etc_modules" -a -L $file -a "$(readlink -f $file)" = /etc/modules ]; then
				add_etc_modules=
			fi
			processed="$processed$base "
			echo $file
		done
	done
	[ "$add_etc_modules" ] && echo /etc/modules
}

start()
{
	local files module args
	[ "$VERBOSE" = no ] && ebegin "Loading kernel modules" || true
	files=$(modules_files)
	if [ "$files" ]; then
		grep -h '^[^#]' $files |
		while read module args; do
			[ "$module" ] || continue
			load_module "$module" "$args"
		done
	fi
	[ "$VERBOSE" = no ] && eend 0
	return 0
}

stop()
{
	return 0
}
