|
|
| version 1.2.2.5, 2010/06/07 09:04:46 | version 1.2.2.6, 2010/06/07 11:32:50 |
|---|---|
| Line 440 cli_BindKey(bindkey_t * __restrict key, linebuffer_t * | Line 440 cli_BindKey(bindkey_t * __restrict key, linebuffer_t * |
| /* | /* |
| * cli_addCommand() Add command to CLI session | |
| * @buffer = CLI buffer | |
| * @csCmd = Command name | |
| * @cliLevel = Level in CLI, -1 unprivi(view from all), 0 main config, 1 sub config ... | |
| * @funcCmd = Callback function when user call command | |
| * @csInfo = Inline information for command | |
| * @csHelp = Help line when call help | |
| * return: RETCODE_ERR error, RETCODE_OK ok | |
| */ | |
| int | |
| cli_addCommand(linebuffer_t * __restrict buffer, const char *csCmd, int cliLevel, cmd_func_t funcCmd, | |
| const char *csInfo, const char *csHelp) | |
| { | |
| struct tagCommand *cmd; | |
| if (!buffer || !csCmd || !funcCmd) { | |
| cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); | |
| return RETCODE_ERR; | |
| } | |
| cmd = malloc(sizeof(struct tagCommand)); | |
| if (!cmd) { | |
| LOGERR; | |
| return RETCODE_ERR; | |
| } else | |
| memset(cmd, 0, sizeof(struct tagCommand)); | |
| cmd->cmd_level = cliLevel; | |
| cmd->cmd_func = funcCmd; | |
| cmd->cmd_len = strlcpy(cmd->cmd_name, csCmd, STRSIZ); | |
| if (csInfo) | |
| strlcpy(cmd->cmd_info, csInfo, STRSIZ); | |
| if (csHelp) | |
| strlcpy(cmd->cmd_help, csHelp, STRSIZ); | |
| SLIST_INSERT_HEAD(&buffer->line_cmds, cmd, cmd_next); | |
| return RETCODE_OK; | |
| } | |
| /* | |
| * cli_delCommand() Delete command from CLI session | |
| * @buffer = CLI buffer | |
| * @csCmd = Command name | |
| * @cliLevel = Level in CLI, -1 unprivi(view from all), 0 main config, 1 sub config ... | |
| * return: RETCODE_ERR error, RETCODE_OK ok | |
| */ | |
| int | |
| cli_delCommand(linebuffer_t * __restrict buffer, const char *csCmd, int cliLevel) | |
| { | |
| struct tagCommand *cmd; | |
| int ret = RETCODE_OK; | |
| if (!buffer || !csCmd) { | |
| cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); | |
| return RETCODE_ERR; | |
| } | |
| SLIST_FOREACH(cmd, &buffer->line_cmds, cmd_next) | |
| if (cmd->cmd_level == cliLevel && !strcmp(cmd->cmd_name, csCmd)) { | |
| ret = 1; | |
| SLIST_REMOVE(&buffer->line_cmds, cmd, tagCommand, cmd_next); | |
| free(cmd); | |
| break; | |
| } | |
| return ret; | |
| } | |
| /* | |
| * cli_updCommand() Update command in CLI session | |
| * @buffer = CLI buffer | |
| * @csCmd = Command name | |
| * @cliLevel = Level in CLI, -1 unprivi(view from all), 0 main config, 1 sub config ... | |
| * @funcCmd = Callback function when user call command | |
| * @csInfo = Inline information for command | |
| * @csHelp = Help line when call help | |
| * return: RETCODE_ERR error, RETCODE_OK ok | |
| */ | |
| int | |
| cli_updCommand(linebuffer_t * __restrict buffer, const char *csCmd, int cliLevel, cmd_func_t funcCmd, | |
| const char *csInfo, const char *csHelp) | |
| { | |
| struct tagCommand *cmd; | |
| int ret = RETCODE_OK; | |
| if (!buffer || !csCmd) { | |
| cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); | |
| return RETCODE_ERR; | |
| } | |
| SLIST_FOREACH(cmd, &buffer->line_cmds, cmd_next) | |
| if (cmd->cmd_level == cliLevel && !strcmp(cmd->cmd_name, csCmd)) { | |
| ret = 1; | |
| if (funcCmd) | |
| cmd->cmd_func = funcCmd; | |
| if (csInfo) | |
| strlcpy(cmd->cmd_info, csInfo, STRSIZ); | |
| if (csHelp) | |
| strlcpy(cmd->cmd_help, csHelp, STRSIZ); | |
| break; | |
| } | |
| return ret; | |
| } | |
| /* | |
| * cli_addHistory() Add line to history | * cli_addHistory() Add line to history |
| * @buffer = CLI buffer | * @buffer = CLI buffer |
| * @str = Add custom text or if NULL use readed line from CLI buffer | * @str = Add custom text or if NULL use readed line from CLI buffer |