tools_kmod_modprobe_LDADD = libkmod/libkmod.la
tools_kmod_modinfo_LDADD = libkmod/libkmod.la
-tools_kmod_SOURCES = tools/kmod.c tools/kmod.h
+tools_kmod_SOURCES = tools/kmod.c tools/kmod.h tools/kmod-lsmod.c
+tools_kmod_CPPFLAGS = $(AM_CPPFLAGS) -DKMOD_BUNDLE_TOOL=1
tools_kmod_LDADD = libkmod/libkmod.la
endif
#include "libkmod.h"
-int main(int argc, char *argv[])
+static int do_lsmod(int argc, char *argv[])
{
struct kmod_ctx *ctx;
const char *null_config = NULL;
return EXIT_SUCCESS;
}
+
+#ifndef KMOD_BUNDLE_TOOL
+int main(int argc, char *argv[])
+{
+ return do_lsmod(argc, argv);
+}
+
+#else
+#include "kmod.h"
+
+const struct kmod_cmd kmod_cmd_compat_lsmod = {
+ .name = "lsmod",
+ .cmd = do_lsmod,
+ .help = "compat lsmod command",
+};
+
+#endif
&kmod_cmd_help,
};
+static const struct kmod_cmd *kmod_compat_cmds[] = {
+ &kmod_cmd_compat_lsmod,
+};
+
static int kmod_help(int argc, char *argv[])
{
size_t i;
}
}
- puts("\nkmod will also handle gracefully if called\n"
- "from a symlink to previous tools\n");
+ puts("\nkmod also handles gracefully if called from following symlinks:");
+
+ for (i = 0; i < ARRAY_SIZE(kmod_compat_cmds); i++) {
+ if (kmod_compat_cmds[i]->help != NULL) {
+ printf(" %-12s %s\n", kmod_compat_cmds[i]->name,
+ kmod_compat_cmds[i]->help);
+ }
+ }
return EXIT_SUCCESS;
}
return err;
}
+
+static int handle_kmod_compat_commands(int argc, char *argv[])
+{
+ const char *cmd;
+ int err = -ENOENT;
+ size_t i;
+
+ cmd = basename(argv[0]);
+
+ for (i = 0; i < ARRAY_SIZE(kmod_compat_cmds); i++) {
+ if (strcmp(kmod_compat_cmds[i]->name, cmd) != 0)
+ continue;
+
+ err = kmod_compat_cmds[i]->cmd(argc, argv);
+ }
+
+ return err;
+}
+
int main(int argc, char *argv[])
{
const char *binname = basename(argv[0]);
if (strcmp(binname, "kmod") == 0)
err = handle_kmod_commands(argc, argv);
else
- err = -ENOENT;
+ err = handle_kmod_compat_commands(argc, argv);
return err;
}