modprobe: add scanning of /lib/modules/`uname -r`/modules.symbols
authorDenis Vlasenko <vda.linux@googlemail.com>
Thu, 16 Aug 2007 10:40:06 +0000 (10:40 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Thu, 16 Aug 2007 10:40:06 +0000 (10:40 -0000)
  (by Yann E. MORIN)

modutils/modprobe.c

index 3861dd1e338719dcb33e973c0dd5a3420c436b2b..fe399acfcebbcb9fb94b3ce80c93f17f58336d98 100644 (file)
@@ -504,7 +504,7 @@ static struct dep_t *build_dep(void)
 
        /* Only 2.6 has a modules.alias file */
        if (ENABLE_FEATURE_2_6_MODULES) {
-               /* Parse kernel-declared aliases */
+               /* Parse kernel-declared module aliases */
                filename = xasprintf("/lib/modules/%s/modules.alias", un.release);
                fd = open(filename, O_RDONLY);
                if (fd < 0) {
@@ -518,6 +518,21 @@ static struct dep_t *build_dep(void)
                        include_conf(&first, &current, buffer, sizeof(buffer), fd);
                        close(fd);
                }
+
+               /* Parse kernel-declared symbol aliases */
+               filename = xasprintf("/lib/modules/%s/modules.symbols", un.release);
+               fd = open(filename, O_RDONLY);
+               if (fd < 0) {
+                       /* Ok, that didn't work.  Fall back to looking in /lib/modules */
+                       fd = open("/lib/modules/modules.symbols", O_RDONLY);
+               }
+               if (ENABLE_FEATURE_CLEAN_UP)
+                       free(filename);
+
+               if (fd >= 0) {
+                       include_conf(&first, &current, buffer, sizeof(buffer), fd);
+                       close(fd);
+               }
        }
 
        return first;