diff options
-rw-r--r-- | functions | 12 | ||||
-rw-r--r-- | install/autodetect | 3 |
2 files changed, 8 insertions, 7 deletions
@@ -251,16 +251,18 @@ list_hookpoints() { in_array run_cleanuphook "${funcs[@]}" && msg2 "cleanup hook" } +modprobe() { + command modprobe -d "$_optmoduleroot" -S "$KERNELVERSION" "$@" +} + auto_modules() { # Perform auto detection of modules via sysfs. local mods= - IFS=$'\n' read -rd '' -a mods < \ - <(find /sys/devices -name modalias -exec sort -u {} + | - # delimit each input by a newline, expanded in place - xargs -d $'\n' modprobe -d "$MODULEROOT" -qaRS "$KERNELVERSION" | - sort -u) + mapfile -t mods < <(find /sys/devices -name uevent \ + -exec sort -u {} + | awk -F= '$1 == "MODALIAS" && !_[$0]++') + mapfile -t mods < <(modprobe -qaR "${mods[@]#MODALIAS=}") (( ${#mods[*]} )) && printf "%s\n" "${mods[@]//-/_}" } diff --git a/install/autodetect b/install/autodetect index b3db536..37af3be 100644 --- a/install/autodetect +++ b/install/autodetect @@ -10,8 +10,7 @@ build() { # treat this as an alias, since ext3 might be aliased to ext4. also, as # of linux 3.9, we can find any filesystem by the alias "fs-$name" # rather than having to guess at the corresponding module name. - IFS=$'\n' read -rd '' -a resolved < \ - <(modprobe -d "$_optmoduleroot" -S "$KERNELVERSION" -Ra {fs-,}"$1" 2>/dev/null) + mapfile -t resolved < <(modprobe -Ra {fs-,}"$1" 2>/dev/null) for r in "${resolved[@]}"; do _autodetect_cache["$r"]=1 |