#!/bin/sh -efu

. sh-functions

get_device() {
	case "$1" in
		UUID=*|LABEL=*)
			/sbin/blkid -c /dev/null -t "$1" -o device
			return 0
			;;
		/*)
			printf '%s\n' "$1"
			return 0
			;;
	esac
	return 1
}

guess_modalias() {
	printf '%s\n' "$1" >> "$guessdir/modalias"
}

guess_module() {
	printf '%s\n' "$1" >> "$guessdir/modules"
}

guess_feature() {
	printf '%s\n' "$1" >> "$guessdir/features"
}

guess_fstype() {
	for m in ${GUESS_FSTYPE_SCRIPTS-}; do
		"$m" "$@"
	done
}

guess_device() {
	local device_file
	device_file="$(readlink -ev "$SYSFS_PATH$1" 2>/dev/null)" ||
		return 0
	shift

	[ -z "${device_file##$SYSFS_PATH/devices/*}" ] ||
		return 0

	for m in modalias parent slaves ${GUESS_DEVICE_SCRIPTS-}; do
		"$m" "${device_file#$SYSFS_PATH}"
	done
}

modalias() {
	[ -f "$SYSFS_PATH$1"/modalias ] ||
		return 0
	local alias
	read alias < "$SYSFS_PATH$1"/modalias
	guess_modalias "$alias"
}

parent() {
	guess_device "$1/.."
}

slaves() {
	[ -d "$SYSFS_PATH$1/slaves" ] ||
		return 0
	for slave in "$SYSFS_PATH$1/slaves"/*; do
		[ ! -e "$slave" ] ||
			guess_device "$1/slaves/${slave##*/}"
	done
}
