aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLucas De Marchi <lucas.de.marchi@gmail.com>2012-06-12 01:43:46 -0300
committerLucas De Marchi <lucas.de.marchi@gmail.com>2012-06-12 01:43:46 -0300
commite7fc2c868e240b280f593934278cc719e33e90f7 (patch)
tree3d0ea1965bcd7bd46e8ad976e6f1a5512534eafe
parentc8c956b1995f53a25d365b67d66204208e496150 (diff)
downloadkmod-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.c13
-rw-r--r--libkmod/libkmod-module.c31
-rw-r--r--libkmod/libkmod-private.h8
-rw-r--r--libkmod/libkmod.c29
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;
}