[arch-projects] [mkinitcpio][PATCH 2/3] handle the case of modinfo returning multiple modules

Dave Reisner dreisner at archlinux.org
Mon Jun 27 12:19:36 UTC 2016


This is true of more and more modules with the advent of aliases, e.g.

  $ modinfo -F filename crc32c
  /lib/modules/4.6.2-rampage/kernel/arch/x86/crypto/crc32c-intel.ko.gz
  /lib/modules/4.6.2-rampage/kernel/crypto/crc32c_generic.ko.gz
---
 functions | 29 ++++++++++++++---------------
 1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/functions b/functions
index 500dcc0..bdba988 100644
--- a/functions
+++ b/functions
@@ -348,8 +348,8 @@ add_module() {
     # discovered and added.
     #   $1: module name
 
-    local module= path= softdeps= deps= field= value= firmware=()
-    local ign_errors=0
+    local target= module= softdeps= deps= field= value= firmware=()
+    local ign_errors=0 found=0
 
     [[ $KERNELVERSION == none ]] && return 0
 
@@ -358,15 +358,19 @@ add_module() {
         set -- "${1%?}"
     fi
 
-    module=${1%.ko*}
+    target=${1%.ko*} target=${target//-/_}
 
     # skip expensive stuff if this module has already been added
-    (( _addedmodules["${module//-/_}"] )) && return
+    (( _addedmodules["$target"] )) && return
 
     while IFS=':= ' read -r -d '' field value; do
         case "$field" in
             filename)
-                path=$value
+                found=1
+                module=${value##*/} module=${module%.ko*}
+                quiet "adding module: %s" "$module"
+                _modpaths["$value"]=1
+                _addedmodules["${module//-/_}"]=1
                 ;;
             depends)
                 IFS=',' read -r -a deps <<< "$value"
@@ -384,26 +388,21 @@ add_module() {
                 add_module "$softdep?"
                 ;;
         esac
-    done < <(modinfo -b "$_optmoduleroot" -k "$KERNELVERSION" -0 "$module" 2>/dev/null)
+    done < <(modinfo -b "$_optmoduleroot" -k "$KERNELVERSION" -0 "$target" 2>/dev/null)
 
-    if [[ -z $path ]]; then
+    if (( !found )); then
         (( ign_errors )) && return 0
-        error "module not found: \`%s'" "$module"
+        error "module not found: \`%s'" "$target"
         return 1
     fi
 
     if (( ${#firmware[*]} )); then
         add_firmware "${firmware[@]}" ||
-            warning 'Possibly missing firmware for module: %s' "$module"
+            warning 'Possibly missing firmware for module: %s' "$target"
     fi
 
-    # aggregate modules and add them all at once to save some forks
-    quiet "adding module: %s" "$1"
-    _modpaths["$path"]=1
-    _addedmodules["${module//-/_}"]=1
-
     # handle module quirks
-    case $module in
+    case $target in
         fat)
             add_module "nls_cp437?"
             add_module "nls_iso8859-1?"
-- 
2.8.3


More information about the arch-projects mailing list