xref: /kvmtool/kvm-cmd.c (revision 0a936c5400d3894e57f9810c42b2b7e679c21fa0)
1*0a936c54SPrasad Joshi #include <stdio.h>
2*0a936c54SPrasad Joshi #include <string.h>
3*0a936c54SPrasad Joshi #include <errno.h>
4*0a936c54SPrasad Joshi 
5*0a936c54SPrasad Joshi #include <assert.h>
6*0a936c54SPrasad Joshi 
7*0a936c54SPrasad Joshi /* user defined header files */
8*0a936c54SPrasad Joshi #include <kvm/kvm-cmd.h>
9*0a936c54SPrasad Joshi 
10*0a936c54SPrasad Joshi /* kvm_get_command: Searches the command in an array of the commands and
11*0a936c54SPrasad Joshi    returns a pointer to cmd_struct if a match is found.
12*0a936c54SPrasad Joshi 
13*0a936c54SPrasad Joshi    Input parameters:
14*0a936c54SPrasad Joshi    command: Array of possible commands. The last entry in the array must be
15*0a936c54SPrasad Joshi             NULL.
16*0a936c54SPrasad Joshi    cmd: A string command to search in the array
17*0a936c54SPrasad Joshi 
18*0a936c54SPrasad Joshi    Return Value:
19*0a936c54SPrasad Joshi    NULL: If the cmd is not matched with any of the command in the command array
20*0a936c54SPrasad Joshi    p: Pointer to cmd_struct of the matching command
21*0a936c54SPrasad Joshi  */
22*0a936c54SPrasad Joshi static struct cmd_struct *kvm_get_command(struct cmd_struct *command,
23*0a936c54SPrasad Joshi 		const char *cmd)
24*0a936c54SPrasad Joshi {
25*0a936c54SPrasad Joshi 	struct cmd_struct *p = command;
26*0a936c54SPrasad Joshi 
27*0a936c54SPrasad Joshi 	while (p->cmd) {
28*0a936c54SPrasad Joshi 		if (!strcmp(p->cmd, cmd))
29*0a936c54SPrasad Joshi 			return p;
30*0a936c54SPrasad Joshi 		p++;
31*0a936c54SPrasad Joshi 	}
32*0a936c54SPrasad Joshi 	return NULL;
33*0a936c54SPrasad Joshi }
34*0a936c54SPrasad Joshi 
35*0a936c54SPrasad Joshi int handle_command(struct cmd_struct *command, int argc, const char **argv)
36*0a936c54SPrasad Joshi {
37*0a936c54SPrasad Joshi 	struct cmd_struct *p;
38*0a936c54SPrasad Joshi 	const char *prefix = NULL;
39*0a936c54SPrasad Joshi 
40*0a936c54SPrasad Joshi 	if (!argv || !*argv) {
41*0a936c54SPrasad Joshi 		p = kvm_get_command(command, "help");
42*0a936c54SPrasad Joshi 		assert(p);
43*0a936c54SPrasad Joshi 		return p->fn(argc, argv, prefix);
44*0a936c54SPrasad Joshi 	}
45*0a936c54SPrasad Joshi 
46*0a936c54SPrasad Joshi 	p = kvm_get_command(command, argv[0]);
47*0a936c54SPrasad Joshi 	if (!p) {
48*0a936c54SPrasad Joshi 		p = kvm_get_command(command, "help");
49*0a936c54SPrasad Joshi 		assert(p);
50*0a936c54SPrasad Joshi 		p->fn(0, NULL, prefix);
51*0a936c54SPrasad Joshi 		return EINVAL;
52*0a936c54SPrasad Joshi 	}
53*0a936c54SPrasad Joshi 
54*0a936c54SPrasad Joshi 	return p->fn(argc - 1, &argv[1], prefix);
55*0a936c54SPrasad Joshi }
56