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:
Lucas De Marchi 2012-06-12 01:43:46 -03:00
parent c8c956b199
commit e7fc2c868e
4 changed files with 28 additions and 53 deletions

View File

@ -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;

View File

@ -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)

View File

@ -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 {

View File

@ -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;
}