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