#include #include #include #include #include #include #include #include #include static const char cmdoptions_short[] = "lh"; static const struct option cmdoptions[] = { {"load-resources", no_argument, 0, 'l'}, {"help", no_argument, 0, 'h'}, {NULL, 0, 0, 0} }; static void help(const char *progname) { const struct option *itr_opt; const char *itr_short; printf("Usage:\n" "\t%s [options] \n" "Options:\n", progname); for (itr_opt = cmdoptions, itr_short = cmdoptions_short; itr_opt->name != NULL; itr_opt++, itr_short++) printf("\t-%c, --%s\n", *itr_short, itr_opt->name); } int main(int argc, char *argv[]) { const char *alias = NULL; struct kmod_ctx *ctx; struct kmod_list *list = NULL, *l; char *options; int load_resources = 0; int err; printf("libkmod version %s\n", VERSION); for (;;) { int c, idx = 0; c = getopt_long(argc, argv, cmdoptions_short, cmdoptions, &idx); if (c == -1) break; switch (c) { case 'l': load_resources = 1; break; case 'h': help(argv[0]); return 0; case '?': return -1; default: fprintf(stderr, "ERR: unexpected getopt_long() value %c\n", c); return -1; } } if (optind >= argc) { fprintf(stderr, "ERR: Provide an alias name\n"); return EXIT_FAILURE; } alias = argv[optind]; ctx = kmod_new(NULL, NULL); if (ctx == NULL) { kmod_unref(ctx); exit(EXIT_FAILURE); } if (load_resources) { err = kmod_load_resources(ctx); if (err < 0) { printf("Could not load resources: %s\n", strerror(-err)); kmod_unref(ctx); exit(EXIT_FAILURE); } } err = kmod_module_new_from_lookup(ctx, alias, &list); if (err < 0) exit(EXIT_FAILURE); 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); const char *str; printf("\t%s\n", kmod_module_get_name(mod)); str = kmod_module_get_options(mod); if (str) printf("\t\toptions: '%s'\n", str); str = kmod_module_get_install_commands(mod); if (str) printf("\t\tinstall commands: '%s'\n", str); str = kmod_module_get_remove_commands(mod); if (str) printf("\t\tremove commands: '%s'\n", str); kmod_module_unref(mod); } err = kmod_resolve_alias_options(ctx, alias, &options); if (err == 0) { printf("Alias options: '%s'\n", options); free(options); } kmod_module_unref_list(list); kmod_unref(ctx); return EXIT_SUCCESS; }