diff options
author | Lucas De Marchi <lucas.de.marchi@gmail.com> | 2012-06-12 01:43:46 -0300 |
---|---|---|
committer | Lucas De Marchi <lucas.de.marchi@gmail.com> | 2012-06-12 01:43:46 -0300 |
commit | e7fc2c868e240b280f593934278cc719e33e90f7 (patch) | |
tree | 3d0ea1965bcd7bd46e8ad976e6f1a5512534eafe | |
parent | c8c956b1995f53a25d365b67d66204208e496150 (diff) | |
download | kmod-e7fc2c868e240b280f593934278cc719e33e90f7.tar.gz |
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
-rw-r--r-- | libkmod/libkmod-config.c | 13 | ||||
-rw-r--r-- | libkmod/libkmod-module.c | 31 | ||||
-rw-r--r-- | libkmod/libkmod-private.h | 8 | ||||
-rw-r--r-- | libkmod/libkmod.c | 29 |
4 files changed, 28 insertions, 53 deletions
diff --git a/libkmod/libkmod-config.c b/libkmod/libkmod-config.c index d0f7848..70044f0 100644 --- a/libkmod/libkmod-config.c +++ b/libkmod/libkmod-config.c @@ -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; diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c index f5384a7..fb3a64e 100644 --- a/libkmod/libkmod-module.c +++ b/libkmod/libkmod-module.c @@ -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) diff --git a/libkmod/libkmod-private.h b/libkmod/libkmod-private.h index f21e0a9..7c2602d 100644 --- a/libkmod/libkmod-private.h +++ b/libkmod/libkmod-private.h @@ -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 { diff --git a/libkmod/libkmod.c b/libkmod/libkmod.c index 36ca629..14a8f1f 100644 --- a/libkmod/libkmod.c +++ b/libkmod/libkmod.c @@ -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; } |