/* ipmi_cmd_run - run a command from list based on parameters * called from main() * * 1. iterate through ipmi_cmd_list matching on name * 2. call func() for that command * * @intf: ipmi interface * @name: command name * @argc: command argument count * @argv: command argument list * * returns value from func() of that commnad if found * returns -1 if command is not found */ int ipmi_cmd_run(struct ipmi_intf * intf, char * name, int argc, char ** argv) { struct ipmi_cmd * cmd = intf->cmdlist; /* hook to run a default command if nothing specified */ if (name == NULL) { if (cmd->func == NULL || cmd->name == NULL) return -1; else if (strncmp(cmd->name, "default", 7) == 0) return cmd->func(intf, 0, NULL); else { lprintf(LOG_ERR, "No command provided!"); ipmi_cmd_print(intf->cmdlist); return -1; } } for (cmd=intf->cmdlist; cmd->func != NULL; cmd++) { if (strncmp(name, cmd->name, __maxlen(cmd->name, name)) == 0) break; } if (cmd->func == NULL) { cmd = intf->cmdlist; if (strncmp(cmd->name, "default", 7) == 0) return cmd->func(intf, argc+1, argv-1); lprintf(LOG_ERR, "Invalid command: %s", name); ipmi_cmd_print(intf->cmdlist); return -1; } return cmd->func(intf, argc, argv); }
uint16_t str2val(const char *str, const struct valstr *vs) { int i; for (i = 0; vs[i].str != NULL; i++) { if (strncasecmp(vs[i].str, str, __maxlen(str, vs[i].str)) == 0) return vs[i].val; } return vs[i].val; }