]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
libkmod-module: fill builtin's name
authorLucas De Marchi <lucas.demarchi@profusion.mobi>
Mon, 27 Feb 2012 21:48:02 +0000 (18:48 -0300)
committerLucas De Marchi <lucas.demarchi@profusion.mobi>
Mon, 27 Feb 2012 21:48:02 +0000 (18:48 -0300)
modules.builtin don't have any realname->value -- it follows the same
format of modules.dep, not the aliases ones.

libkmod/libkmod-index.c
libkmod/libkmod.c

index 2a5a26e33732036089480decffa3e75ab5faf3f6..be4a2c23343338c4f1d53dc1a927f03291289471 100644 (file)
@@ -485,6 +485,7 @@ static char *index_search__node(struct index_node_f *node, const char *key, int
  */
 char *index_search(struct index_file *in, const char *key)
 {
+// FIXME: return value by reference instead of strdup
        struct index_node_f *root;
        char *value;
 
@@ -958,6 +959,7 @@ static char *index_mm_search_node(struct index_mm_node *node, const char *key,
  */
 char *index_mm_search(struct index_mm *idx, const char *key)
 {
+// FIXME: return value by reference instead of strdup
        struct index_mm_node *root;
        char *value;
 
index 8c91a7c5806a2d232cf9ad3cf948c80587a20a13..6c3e0f84c5663df9d42ba80b72018fdb3f0f1bf6 100644 (file)
@@ -18,6 +18,7 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stddef.h>
@@ -480,18 +481,53 @@ int kmod_lookup_alias_from_aliases_file(struct kmod_ctx *ctx, const char *name,
 int kmod_lookup_alias_from_builtin_file(struct kmod_ctx *ctx, const char *name,
                                                struct kmod_list **list)
 {
-       const struct kmod_list *l;
+       char *line = NULL;
+       int err = 0;
 
-       int err = kmod_lookup_alias_from_alias_bin(ctx,
-                                       KMOD_INDEX_MODULES_BUILTIN, name, list);
-       if (err < 0)
-               return err;
+       assert(*list == NULL);
 
-       kmod_list_foreach(l, *list) {
-               struct kmod_module *m = l->data;
-               kmod_module_set_builtin(m, true);
+       if (ctx->indexes[KMOD_INDEX_MODULES_BUILTIN]) {
+               DBG(ctx, "use mmaped index '%s' modname=%s\n",
+                               index_files[KMOD_INDEX_MODULES_BUILTIN].fn,
+                               name);
+               line = index_mm_search(ctx->indexes[KMOD_INDEX_MODULES_BUILTIN],
+                                                                       name);
+       } else {
+               struct index_file *idx;
+               char fn[PATH_MAX];
+
+               snprintf(fn, sizeof(fn), "%s/%s.bin", ctx->dirname,
+                               index_files[KMOD_INDEX_MODULES_BUILTIN].fn);
+               DBG(ctx, "file=%s modname=%s\n", fn, name);
+
+               idx = index_file_open(fn);
+               if (idx == NULL) {
+                       DBG(ctx, "could not open builtin file '%s'\n", fn);
+                       goto finish;
+               }
+
+               line = index_search(idx, name);
+               index_file_close(idx);
        }
 
+       if (line != NULL) {
+               struct kmod_module *mod;
+
+               err = kmod_module_new_from_name(ctx, name, &mod);
+               if (err < 0) {
+                       ERR(ctx, "Could not create module from name %s: %s\n",
+                                                       name, strerror(-err));
+                       goto finish;
+               }
+
+               kmod_module_set_builtin(mod, true);
+               *list = kmod_list_append(*list, mod);
+               if (*list == NULL)
+                       err = -ENOMEM;
+       }
+
+finish:
+       free(line);
        return err;
 }