[Patch] kvm tools: implement "help xxx" command

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



'kvm run --help' works fine but 'kvm help run' shows nothing,
this patch implements it.

Signed-off-by: WANG Cong <amwang@xxxxxxxxxx>

---
diff --git a/tools/kvm/include/kvm/kvm-cmd.h b/tools/kvm/include/kvm/kvm-cmd.h
index 8d5fca5..0a73bce 100644
--- a/tools/kvm/include/kvm/kvm-cmd.h
+++ b/tools/kvm/include/kvm/kvm-cmd.h
@@ -4,9 +4,14 @@
 struct cmd_struct {
 	const char *cmd;
 	int (*fn)(int, const char **, const char *);
+	void (*help)(void);
 	int option;
 };
 
+extern struct cmd_struct kvm_commands[];
+struct cmd_struct *kvm_get_command(struct cmd_struct *command,
+                const char *cmd);
+
 int handle_command(struct cmd_struct *command, int argc, const char **argv);
 
 #endif
diff --git a/tools/kvm/include/kvm/kvm-run.h b/tools/kvm/include/kvm/kvm-run.h
index 13104e2..d056ad4 100644
--- a/tools/kvm/include/kvm/kvm-run.h
+++ b/tools/kvm/include/kvm/kvm-run.h
@@ -2,5 +2,6 @@
 #define __KVM_RUN_H__
 
 int kvm_cmd_run(int argc, const char **argv, const char *prefix);
+void kvm_run_help(void);
 
 #endif
diff --git a/tools/kvm/kvm-cmd.c b/tools/kvm/kvm-cmd.c
index b63e033..e545d14 100644
--- a/tools/kvm/kvm-cmd.c
+++ b/tools/kvm/kvm-cmd.c
@@ -6,6 +6,14 @@
 
 /* user defined header files */
 #include <kvm/kvm-cmd.h>
+#include <kvm/kvm-help.h>
+#include <kvm/kvm-run.h>
+
+struct cmd_struct kvm_commands[] = {
+	{ "help",  kvm_cmd_help,  NULL,         0 },
+	{ "run",   kvm_cmd_run,   kvm_run_help, 0 },
+	{ NULL,    NULL,          NULL,         0 },
+};
 
 /*
  * kvm_get_command: Searches the command in an array of the commands and
@@ -20,7 +28,7 @@
  * NULL: If the cmd is not matched with any of the command in the command array
  * p: Pointer to cmd_struct of the matching command
  */
-static struct cmd_struct *kvm_get_command(struct cmd_struct *command,
+struct cmd_struct *kvm_get_command(struct cmd_struct *command,
 		const char *cmd)
 {
 	struct cmd_struct *p = command;
diff --git a/tools/kvm/kvm-help.c b/tools/kvm/kvm-help.c
index 5506807..817e4f8 100644
--- a/tools/kvm/kvm-help.c
+++ b/tools/kvm/kvm-help.c
@@ -5,6 +5,7 @@
 #include <common-cmds.h>
 
 #include <kvm/util.h>
+#include <kvm/kvm-cmd.h>
 #include <kvm/kvm-help.h>
 
 
@@ -31,13 +32,30 @@ static void list_common_cmds_help(void)
 	}
 }
 
+static void kvm_help(void)
+{
+	printf("\n usage: %s\n\n", kvm_usage_string);
+	list_common_cmds_help();
+	printf("\n %s\n\n", kvm_more_info_string);
+}
+
+
+static void help_cmd(const char *cmd)
+{
+	struct cmd_struct *p;
+	p = kvm_get_command(kvm_commands, cmd);
+	if (!p)
+		kvm_help();
+	else if (p->help)
+		p->help();
+}
+
 int kvm_cmd_help(int argc, const char **argv, const char *prefix)
 {
 	if (!argv || !*argv) {
-		printf("\n usage: %s\n\n", kvm_usage_string);
-		list_common_cmds_help();
-		printf("\n %s\n\n", kvm_more_info_string);
+		kvm_help();
 		return 0;
 	}
+	help_cmd(argv[0]);
 	return 0;
 }
diff --git a/tools/kvm/kvm-run.c b/tools/kvm/kvm-run.c
index c01517f..f5a1790 100644
--- a/tools/kvm/kvm-run.c
+++ b/tools/kvm/kvm-run.c
@@ -395,6 +395,11 @@ static char *host_image(char *cmd_line, size_t size)
 	return t;
 }
 
+void kvm_run_help(void)
+{
+	usage_with_options(run_usage, options);
+}
+
 int kvm_cmd_run(int argc, const char **argv, const char *prefix)
 {
 	struct virtio_net_parameters net_params;
diff --git a/tools/kvm/main.c b/tools/kvm/main.c
index 4fbb268..2138e7b 100644
--- a/tools/kvm/main.c
+++ b/tools/kvm/main.c
@@ -2,18 +2,10 @@
 
 /* user defined header files */
 #include <kvm/kvm-cmd.h>
-#include <kvm/kvm-help.h>
-#include <kvm/kvm-run.h>
 
 static int handle_kvm_command(int argc, char **argv)
 {
-	struct cmd_struct command[] = {
-		{ "help",  kvm_cmd_help,  0 },
-		{ "run",   kvm_cmd_run,   0 },
-		{ NULL,    NULL,          0 },
-	};
-
-	return handle_command(command, argc, (const char **) &argv[0]);
+	return handle_command(kvm_commands, argc, (const char **) &argv[0]);
 }
 
 int main(int argc, char *argv[])
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux