From: Prasad Joshi <prasadjoshi124@gmail.com>
To: prasadjoshi124@gmail.com
Cc: mingo@elte.hu, kvm@vger.kernel.org, penberg@kernel.org,
asias.hejun@gmail.com, gorcunov@gmail.com,
oswaldo.cadenas@gmail.com
Subject: [PATCH v3 3/4] kvm tool: Provides the basic Gitish framework
Date: Fri, 8 Apr 2011 16:11:14 +0100 [thread overview]
Message-ID: <1302275475-3882-3-git-send-email-prasadjoshi124@gmail.com> (raw)
In-Reply-To: <1302275475-3882-1-git-send-email-prasadjoshi124@gmail.com>
- kvm-cmd.h: Adds a new structure cmd_struct to create a table of commands
and callback function. The structure was copied from tools/perf
- kvm-cmd.c: implements two main functions for command processing.
kvm_get_command(): searches table for specific command.
handle_command(): invokes the callback function for a given command.
- kvm-help.[ch] Implements the kvm help command. The function
list_common_cmds_help() is a copy of similar function in tools/perf.
Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com>
---
tools/kvm/include/kvm/kvm-cmd.h | 12 ++++++++
tools/kvm/include/kvm/kvm-help.h | 6 ++++
tools/kvm/kvm-cmd.c | 55 ++++++++++++++++++++++++++++++++++++++
tools/kvm/kvm-help.c | 43 +++++++++++++++++++++++++++++
4 files changed, 116 insertions(+), 0 deletions(-)
create mode 100644 tools/kvm/include/kvm/kvm-cmd.h
create mode 100644 tools/kvm/include/kvm/kvm-help.h
create mode 100644 tools/kvm/kvm-cmd.c
create mode 100644 tools/kvm/kvm-help.c
diff --git a/tools/kvm/include/kvm/kvm-cmd.h b/tools/kvm/include/kvm/kvm-cmd.h
new file mode 100644
index 0000000..8d5fca5
--- /dev/null
+++ b/tools/kvm/include/kvm/kvm-cmd.h
@@ -0,0 +1,12 @@
+#ifndef __KVM_CMD_H__
+#define __KVM_CMD_H__
+
+struct cmd_struct {
+ const char *cmd;
+ int (*fn)(int, const char **, const char *);
+ int option;
+};
+
+int handle_command(struct cmd_struct *command, int argc, const char **argv);
+
+#endif
diff --git a/tools/kvm/include/kvm/kvm-help.h b/tools/kvm/include/kvm/kvm-help.h
new file mode 100644
index 0000000..2946743
--- /dev/null
+++ b/tools/kvm/include/kvm/kvm-help.h
@@ -0,0 +1,6 @@
+#ifndef __KVM_HELP_H__
+#define __KVM_HELP_H__
+
+int kvm_cmd_help(int argc, const char **argv, const char *prefix);
+
+#endif
diff --git a/tools/kvm/kvm-cmd.c b/tools/kvm/kvm-cmd.c
new file mode 100644
index 0000000..3c15006
--- /dev/null
+++ b/tools/kvm/kvm-cmd.c
@@ -0,0 +1,55 @@
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include <assert.h>
+
+/* user defined header files */
+#include <kvm/kvm-cmd.h>
+
+/* kvm_get_command: Searches the command in an array of the commands and
+ returns a pointer to cmd_struct if a match is found.
+
+ Input parameters:
+ command: Array of possible commands. The last entry in the array must be
+ NULL.
+ cmd: A string command to search in the array
+
+ Return Value:
+ 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,
+ const char *cmd)
+{
+ struct cmd_struct *p = command;
+
+ while (p->cmd) {
+ if (!strcmp(p->cmd, cmd))
+ return p;
+ p++;
+ }
+ return NULL;
+}
+
+int handle_command(struct cmd_struct *command, int argc, const char **argv)
+{
+ struct cmd_struct *p;
+ const char *prefix = NULL;
+
+ if (!argv || !*argv) {
+ p = kvm_get_command(command, "help");
+ assert(p);
+ return p->fn(argc, argv, prefix);
+ }
+
+ p = kvm_get_command(command, argv[0]);
+ if (!p) {
+ p = kvm_get_command(command, "help");
+ assert(p);
+ p->fn(0, NULL, prefix);
+ return EINVAL;
+ }
+
+ return p->fn(argc - 1, &argv[1], prefix);
+}
diff --git a/tools/kvm/kvm-help.c b/tools/kvm/kvm-help.c
new file mode 100644
index 0000000..5506807
--- /dev/null
+++ b/tools/kvm/kvm-help.c
@@ -0,0 +1,43 @@
+#include <stdio.h>
+#include <string.h>
+
+/* user defined headers */
+#include <common-cmds.h>
+
+#include <kvm/util.h>
+#include <kvm/kvm-help.h>
+
+
+const char kvm_usage_string[] =
+ "kvm [--version] [--help] COMMAND [ARGS]";
+
+const char kvm_more_info_string[] =
+ "See 'kvm help COMMAND' for more information on a specific command.";
+
+
+static void list_common_cmds_help(void)
+{
+ unsigned int i, longest = 0;
+
+ for (i = 0; i < ARRAY_SIZE(common_cmds); i++) {
+ if (longest < strlen(common_cmds[i].name))
+ longest = strlen(common_cmds[i].name);
+ }
+
+ puts(" The most commonly used kvm commands are:");
+ for (i = 0; i < ARRAY_SIZE(common_cmds); i++) {
+ printf(" %-*s ", longest, common_cmds[i].name);
+ puts(common_cmds[i].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);
+ return 0;
+ }
+ return 0;
+}
--
1.7.1
next prev parent reply other threads:[~2011-04-08 15:11 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-08 15:11 [PATCH v3 1/4] kvm tool: Generating list of common kvm tool commands Prasad Joshi
2011-04-08 15:11 ` [PATCH v3 2/4] kvm tool: Mostly the copied code from perf for argument processing Prasad Joshi
2011-04-08 15:11 ` Prasad Joshi [this message]
2011-04-08 15:11 ` [PATCH v3 4/4] kvm tool: Using the Gitish freamwork to run the virtual machine Prasad Joshi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1302275475-3882-3-git-send-email-prasadjoshi124@gmail.com \
--to=prasadjoshi124@gmail.com \
--cc=asias.hejun@gmail.com \
--cc=gorcunov@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=oswaldo.cadenas@gmail.com \
--cc=penberg@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox