diff options
author | Gustavo Sverzut Barbieri <barbieri@profusion.mobi> | 2011-12-08 05:17:43 -0200 |
---|---|---|
committer | Lucas De Marchi <lucas.demarchi@profusion.mobi> | 2011-12-08 11:17:16 -0200 |
commit | 1487a64ffa39cc9fdbac990e6e64658f21d67f16 (patch) | |
tree | a30e166d3efc1b5b1f0124e6743a7440261ff882 /test | |
parent | e005facdb9bc99a3aacb55c23260464fb31e25d0 (diff) | |
download | kmod-1487a64ffa39cc9fdbac990e6e64658f21d67f16.tar.gz |
add kmod_module_get_filtered_blacklist()
This function will filter the given list against the known blacklist,
returning a new list with remaining modules with the reference
incremented.
Diffstat (limited to 'test')
-rw-r--r-- | test/.gitignore | 1 | ||||
-rw-r--r-- | test/test-blacklist.c | 76 |
2 files changed, 77 insertions, 0 deletions
diff --git a/test/.gitignore b/test/.gitignore index c22a721..0722c91 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -8,3 +8,4 @@ test-lookup test-path-from-name test-get-dependencies test-mod-double-ref +test-blacklist diff --git a/test/test-blacklist.c b/test/test-blacklist.c new file mode 100644 index 0000000..515bfb8 --- /dev/null +++ b/test/test-blacklist.c @@ -0,0 +1,76 @@ +#include <stdio.h> +#include <stdlib.h> +#include <stddef.h> +#include <errno.h> +#include <unistd.h> +#include <inttypes.h> +#include <string.h> +#include <libkmod.h> + + +int main(int argc, char *argv[]) +{ + const char *alias; + struct kmod_ctx *ctx; + struct kmod_list *list = NULL, *l; + int err; + + printf("libkmod version %s\n", VERSION); + + if (argc < 2) { + fprintf(stderr, "ERR: Provide an alias name\n"); + return EXIT_FAILURE; + } + + alias = argv[1]; + + ctx = kmod_new(NULL); + if (ctx == NULL) + exit(EXIT_FAILURE); + + err = kmod_module_new_from_lookup(ctx, alias, &list); + if (err < 0) + goto fail_lookup; + + if (list == NULL) + printf("No module matches '%s'\n", alias); + else + printf("Alias: '%s'\nModules matching:\n", alias); + + kmod_list_foreach(l, list) { + struct kmod_module *mod = kmod_module_get_module(l); + printf("\t%s\n", kmod_module_get_name(mod)); + kmod_module_unref(mod); + } + + if (list != NULL) { + struct kmod_list *filtered; + err = kmod_module_get_filtered_blacklist(ctx, list, &filtered); + if (err < 0) { + printf("Could not filter: %s\n", strerror(-err)); + goto fail; + } + if (filtered == NULL) + printf("All modules were filtered out!\n"); + else + printf("Modules remaining after filter:\n"); + + kmod_list_foreach(l, filtered) { + struct kmod_module *mod = kmod_module_get_module(l); + printf("\t%s\n", kmod_module_get_name(mod)); + kmod_module_unref(mod); + } + kmod_module_unref_list(filtered); + } + + kmod_module_unref_list(list); + kmod_unref(ctx); + + return EXIT_SUCCESS; + +fail: + kmod_module_unref_list(list); +fail_lookup: + kmod_unref(ctx); + return EXIT_FAILURE; +} |