pci: replace '-' by '_' in modules names
authorErwan Velu <erwan.velu@free.fr>
Mon, 30 Nov 2009 10:02:49 +0000 (11:02 +0100)
committerErwan Velu <erwan.velu@free.fr>
Fri, 4 Dec 2009 09:11:16 +0000 (10:11 +0100)
Impact: avoid kernel modules duplication

In modules.pcimap, kernel modules name are featuring '_' or '-' whereas modules.alias is only using '_'.
To avoid kernel modules duplication, let's rename all '-' by '_' to match what modules.alias provides
This avoid stupid duplications like "a-b" & "a_b" whereas they are in
fact the same kernel module

com32/lib/pci/scan.c

index a3a804f..65d8015 100644 (file)
@@ -74,6 +74,15 @@ static int hex_to_int(char *hexa)
     return strtoul(hexa, NULL, 16);
 }
 
+/* Replace char 'old' by char 'new' in source */
+void chr_replace(char *source, char old, char new) 
+{
+    while (*source) { 
+       source++;
+       if (source[0] == old) source[0]=new;
+    }
+}
+
 /* Try to match any pci device to the appropriate kernel module */
 /* it uses the modules.pcimap from the boot device */
 int get_module_name_from_pcimap(struct pci_domain *domain,
@@ -130,7 +139,11 @@ int get_module_name_from_pcimap(struct pci_domain *domain,
        /* multiple spaces generates some empty fields */
        if (strlen(result)>1) {
         switch (field) {
-        case 0:strcpy(module_name,result); break;
+        /* About case 0, the kernel module name is featuring '_' or '-' 
+         * in the module name whereas modules.alias is only using '_'.
+         * To avoid kernel modules duplication, let's rename all '-' in '_' 
+         * to match what modules.alias provides */
+        case 0:chr_replace(result,'-','_');strcpy(module_name,result); break;
         case 1:strcpy(vendor_id,result); break;
         case 2:strcpy(product_id,result); break;
         case 3:strcpy(sub_vendor_id,result); break;