From: Lucas De Marchi Date: Mon, 27 Feb 2012 21:48:02 +0000 (-0300) Subject: libkmod-module: fill builtin's name X-Git-Tag: v6~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ee1d188f70574b626090c417ff75cd0dbf6cfa27;p=thirdparty%2Fkmod.git libkmod-module: fill builtin's name modules.builtin don't have any realname->value -- it follows the same format of modules.dep, not the aliases ones. --- diff --git a/libkmod/libkmod-index.c b/libkmod/libkmod-index.c index 2a5a26e3..be4a2c23 100644 --- a/libkmod/libkmod-index.c +++ b/libkmod/libkmod-index.c @@ -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; diff --git a/libkmod/libkmod.c b/libkmod/libkmod.c index 8c91a7c5..6c3e0f84 100644 --- a/libkmod/libkmod.c +++ b/libkmod/libkmod.c @@ -18,6 +18,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include #include #include #include @@ -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; }