libkmod-config: refactor functions to get config
It makes more sense to have libkmod-config.c deal with the configuration directly and the others get the config from ctx. As a bonus point we get a smaller binary. Following numbers are for x86-64, libkmod + kmod: Before: text data bss dec hex filename 128840 1496 104 130440 1fd88 tools/modprobe After: text data bss dec hex filename 128392 1496 104 129992 1fbc8 tools/modprobe
This commit is contained in:
parent
c8c956b199
commit
e7fc2c868e
|
@ -975,6 +975,7 @@ static struct kmod_config_iter *kmod_config_iter_new(const struct kmod_ctx* ctx,
|
|||
enum config_type type)
|
||||
{
|
||||
struct kmod_config_iter *iter = calloc(1, sizeof(*iter));
|
||||
const struct kmod_config *config = kmod_get_config(ctx);
|
||||
|
||||
if (iter == NULL)
|
||||
return NULL;
|
||||
|
@ -983,31 +984,31 @@ static struct kmod_config_iter *kmod_config_iter_new(const struct kmod_ctx* ctx,
|
|||
|
||||
switch (type) {
|
||||
case CONFIG_TYPE_BLACKLIST:
|
||||
iter->list = kmod_get_blacklists(ctx);
|
||||
iter->list = config->blacklists;
|
||||
iter->get_key = kmod_blacklist_get_modname;
|
||||
break;
|
||||
case CONFIG_TYPE_INSTALL:
|
||||
iter->list = kmod_get_install_commands(ctx);
|
||||
iter->list = config->install_commands;
|
||||
iter->get_key = kmod_command_get_modname;
|
||||
iter->get_value = kmod_command_get_command;
|
||||
break;
|
||||
case CONFIG_TYPE_REMOVE:
|
||||
iter->list = kmod_get_remove_commands(ctx);
|
||||
iter->list = config->remove_commands;
|
||||
iter->get_key = kmod_command_get_modname;
|
||||
iter->get_value = kmod_command_get_command;
|
||||
break;
|
||||
case CONFIG_TYPE_ALIAS:
|
||||
iter->list = kmod_get_aliases(ctx);
|
||||
iter->list = config->aliases;
|
||||
iter->get_key = kmod_alias_get_name;
|
||||
iter->get_value = kmod_alias_get_modname;
|
||||
break;
|
||||
case CONFIG_TYPE_OPTION:
|
||||
iter->list = kmod_get_options(ctx);
|
||||
iter->list = config->options;
|
||||
iter->get_key = kmod_option_get_modname;
|
||||
iter->get_value = kmod_option_get_options;
|
||||
break;
|
||||
case CONFIG_TYPE_SOFTDEP:
|
||||
iter->list = kmod_get_softdeps(ctx);
|
||||
iter->list = config->softdeps;
|
||||
iter->get_key = kmod_softdep_get_name;
|
||||
iter->get_value = softdep_get_plain_softdep;
|
||||
iter->intermediate = true;
|
||||
|
|
|
@ -840,7 +840,8 @@ elf_failed:
|
|||
static bool module_is_blacklisted(struct kmod_module *mod)
|
||||
{
|
||||
struct kmod_ctx *ctx = mod->ctx;
|
||||
const struct kmod_list *bl = kmod_get_blacklists(ctx);
|
||||
const struct kmod_config *config = kmod_get_config(ctx);
|
||||
const struct kmod_list *bl = config->blacklists;
|
||||
const struct kmod_list *l;
|
||||
|
||||
kmod_list_foreach(l, bl) {
|
||||
|
@ -1280,13 +1281,14 @@ KMOD_EXPORT const char *kmod_module_get_options(const struct kmod_module *mod)
|
|||
if (!mod->init.options) {
|
||||
/* lazy init */
|
||||
struct kmod_module *m = (struct kmod_module *)mod;
|
||||
const struct kmod_list *l, *ctx_options;
|
||||
const struct kmod_list *l;
|
||||
const struct kmod_config *config;
|
||||
char *opts = NULL;
|
||||
size_t optslen = 0;
|
||||
|
||||
ctx_options = kmod_get_options(mod->ctx);
|
||||
config = kmod_get_config(mod->ctx);
|
||||
|
||||
kmod_list_foreach(l, ctx_options) {
|
||||
kmod_list_foreach(l, config->options) {
|
||||
const char *modname = kmod_option_get_modname(l);
|
||||
const char *str;
|
||||
size_t len;
|
||||
|
@ -1354,11 +1356,12 @@ KMOD_EXPORT const char *kmod_module_get_install_commands(const struct kmod_modul
|
|||
if (!mod->init.install_commands) {
|
||||
/* lazy init */
|
||||
struct kmod_module *m = (struct kmod_module *)mod;
|
||||
const struct kmod_list *l, *ctx_install_commands;
|
||||
const struct kmod_list *l;
|
||||
const struct kmod_config *config;
|
||||
|
||||
ctx_install_commands = kmod_get_install_commands(mod->ctx);
|
||||
config = kmod_get_config(mod->ctx);
|
||||
|
||||
kmod_list_foreach(l, ctx_install_commands) {
|
||||
kmod_list_foreach(l, config->install_commands) {
|
||||
const char *modname = kmod_command_get_modname(l);
|
||||
|
||||
if (fnmatch(modname, mod->name, 0) != 0)
|
||||
|
@ -1426,7 +1429,8 @@ KMOD_EXPORT int kmod_module_get_softdeps(const struct kmod_module *mod,
|
|||
struct kmod_list **pre,
|
||||
struct kmod_list **post)
|
||||
{
|
||||
const struct kmod_list *l, *ctx_softdeps;
|
||||
const struct kmod_list *l;
|
||||
const struct kmod_config *config;
|
||||
|
||||
if (mod == NULL || pre == NULL || post == NULL)
|
||||
return -ENOENT;
|
||||
|
@ -1434,9 +1438,9 @@ KMOD_EXPORT int kmod_module_get_softdeps(const struct kmod_module *mod,
|
|||
assert(*pre == NULL);
|
||||
assert(*post == NULL);
|
||||
|
||||
ctx_softdeps = kmod_get_softdeps(mod->ctx);
|
||||
config = kmod_get_config(mod->ctx);
|
||||
|
||||
kmod_list_foreach(l, ctx_softdeps) {
|
||||
kmod_list_foreach(l, config->softdeps) {
|
||||
const char *modname = kmod_softdep_get_name(l);
|
||||
const char * const *array;
|
||||
unsigned count;
|
||||
|
@ -1481,11 +1485,12 @@ KMOD_EXPORT const char *kmod_module_get_remove_commands(const struct kmod_module
|
|||
if (!mod->init.remove_commands) {
|
||||
/* lazy init */
|
||||
struct kmod_module *m = (struct kmod_module *)mod;
|
||||
const struct kmod_list *l, *ctx_remove_commands;
|
||||
const struct kmod_list *l;
|
||||
const struct kmod_config *config;
|
||||
|
||||
ctx_remove_commands = kmod_get_remove_commands(mod->ctx);
|
||||
config = kmod_get_config(mod->ctx);
|
||||
|
||||
kmod_list_foreach(l, ctx_remove_commands) {
|
||||
kmod_list_foreach(l, config->remove_commands) {
|
||||
const char *modname = kmod_command_get_modname(l);
|
||||
|
||||
if (fnmatch(modname, mod->name, 0) != 0)
|
||||
|
|
|
@ -91,13 +91,7 @@ struct kmod_module *kmod_pool_get_module(struct kmod_ctx *ctx, const char *key)
|
|||
void kmod_pool_add_module(struct kmod_ctx *ctx, struct kmod_module *mod, const char *key) __attribute__((nonnull(1,2, 3)));
|
||||
void kmod_pool_del_module(struct kmod_ctx *ctx, struct kmod_module *mod, const char *key) __attribute__((nonnull(1,2, 3)));
|
||||
|
||||
const struct kmod_list *kmod_get_blacklists(const struct kmod_ctx *ctx) _must_check_ __attribute__((nonnull(1)));
|
||||
const struct kmod_list *kmod_get_options(const struct kmod_ctx *ctx) _must_check_ __attribute__((nonnull(1)));
|
||||
const struct kmod_list *kmod_get_install_commands(const struct kmod_ctx *ctx) _must_check_ __attribute__((nonnull(1)));
|
||||
const struct kmod_list *kmod_get_remove_commands(const struct kmod_ctx *ctx) _must_check_ __attribute__((nonnull(1)));
|
||||
const struct kmod_list *kmod_get_softdeps(const struct kmod_ctx *ctx) _must_check_ __attribute__((nonnull(1)));
|
||||
const struct kmod_list *kmod_get_aliases(const struct kmod_ctx *ctx) _must_check_ __attribute__((nonnull(1)));
|
||||
|
||||
const struct kmod_config *kmod_get_config(const struct kmod_ctx *ctx) __attribute__((nonnull(1)));
|
||||
|
||||
/* libkmod-config.c */
|
||||
struct kmod_config_path {
|
||||
|
|
|
@ -896,32 +896,7 @@ KMOD_EXPORT int kmod_dump_index(struct kmod_ctx *ctx, enum kmod_index type,
|
|||
return 0;
|
||||
}
|
||||
|
||||
const struct kmod_list *kmod_get_blacklists(const struct kmod_ctx *ctx)
|
||||
const struct kmod_config *kmod_get_config(const struct kmod_ctx *ctx)
|
||||
{
|
||||
return ctx->config->blacklists;
|
||||
}
|
||||
|
||||
const struct kmod_list *kmod_get_options(const struct kmod_ctx *ctx)
|
||||
{
|
||||
return ctx->config->options;
|
||||
}
|
||||
|
||||
const struct kmod_list *kmod_get_install_commands(const struct kmod_ctx *ctx)
|
||||
{
|
||||
return ctx->config->install_commands;
|
||||
}
|
||||
|
||||
const struct kmod_list *kmod_get_remove_commands(const struct kmod_ctx *ctx)
|
||||
{
|
||||
return ctx->config->remove_commands;
|
||||
}
|
||||
|
||||
const struct kmod_list *kmod_get_softdeps(const struct kmod_ctx *ctx)
|
||||
{
|
||||
return ctx->config->softdeps;
|
||||
}
|
||||
|
||||
const struct kmod_list *kmod_get_aliases(const struct kmod_ctx *ctx)
|
||||
{
|
||||
return ctx->config->aliases;
|
||||
return ctx->config;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue