refactor(shell):减少命令行参数的解析次数到1次(原来为2次)

通过调整获取命令类型的代码位置,达到减少解析次数的目的
经过分析,本修订无明确的副作用。

Signed-off-by: lengqinjie <15390014138@163.com>
This commit is contained in:
lengqinjie 2021-11-22 09:32:17 +08:00
parent b7de7f6085
commit 078bd0c4b1
3 changed files with 9 additions and 40 deletions

View File

@ -85,7 +85,7 @@ typedef struct {
#define SCREEN_IS_FULL(timesPrint, lineCap) ((timesPrint) >= ((lineCap) * DEFAULT_SCREEN_HEIGNT)) #define SCREEN_IS_FULL(timesPrint, lineCap) ((timesPrint) >= ((lineCap) * DEFAULT_SCREEN_HEIGNT))
extern CmdModInfo *OsCmdInfoGet(VOID); extern CmdModInfo *OsCmdInfoGet(VOID);
extern UINT32 OsCmdExec(CmdParsed *cmdParsed, CHAR *cmdStr); extern UINT32 OsCmdExec(CmdParsed *cmdParsed);
extern UINT32 OsCmdKeyShift(const CHAR *cmdKey, CHAR *cmdOut, UINT32 size); extern UINT32 OsCmdKeyShift(const CHAR *cmdKey, CHAR *cmdOut, UINT32 size);
extern UINT32 OsShellKeyInit(ShellCB *shellCB); extern UINT32 OsShellKeyInit(ShellCB *shellCB);
extern VOID OsShellKeyDeInit(CmdKeyLink *cmdKeyLink); extern VOID OsShellKeyDeInit(CmdKeyLink *cmdKeyLink);

View File

@ -282,7 +282,7 @@ LITE_OS_SEC_TEXT_MINOR UINT32 OsShellSysCmdRegister(VOID)
return LOS_OK; return LOS_OK;
} }
LITE_OS_SEC_TEXT_MINOR UINT32 OsCmdExec(CmdParsed *cmdParsed, CHAR *cmdStr) LITE_OS_SEC_TEXT_MINOR UINT32 OsCmdExec(CmdParsed *cmdParsed)
{ {
UINT32 ret; UINT32 ret;
CmdCallBackFunc cmdHook = NULL; CmdCallBackFunc cmdHook = NULL;
@ -290,15 +290,10 @@ LITE_OS_SEC_TEXT_MINOR UINT32 OsCmdExec(CmdParsed *cmdParsed, CHAR *cmdStr)
UINT32 i; UINT32 i;
const CHAR *cmdKey = NULL; const CHAR *cmdKey = NULL;
if ((cmdParsed == NULL) || (cmdStr == NULL) || (strlen(cmdStr) == 0)) { if (cmdParsed == NULL) {
return (UINT32)OS_ERROR; return (UINT32)OS_ERROR;
} }
ret = OsCmdParse(cmdStr, cmdParsed);
if (ret != LOS_OK) {
goto OUT;
}
LOS_DL_LIST_FOR_EACH_ENTRY(curCmdItem, &(cmdInfo.cmdList.list), CmdItemNode, list) { LOS_DL_LIST_FOR_EACH_ENTRY(curCmdItem, &(cmdInfo.cmdList.list), CmdItemNode, list) {
cmdKey = curCmdItem->cmd->cmdKey; cmdKey = curCmdItem->cmd->cmdKey;
if ((cmdParsed->cmdType == curCmdItem->cmd->cmdType) && if ((cmdParsed->cmdType == curCmdItem->cmd->cmdType) &&

View File

@ -108,29 +108,6 @@ CHAR *GetCmdName(const CHAR *cmdline, UINT32 len)
return cmdName; return cmdName;
} }
INT32 ShellCmdExec(const CHAR *msgName, const CHAR *cmdString)
{
UINT32 uintRet;
errno_t err;
CmdParsed cmdParsed;
if (msgName == NULL || cmdString == NULL) {
return -EFAULT;
}
err = memset_s(&cmdParsed, sizeof(CmdParsed), 0, sizeof(CmdParsed));
if (err != EOK) {
return -EFAULT;
}
uintRet = ShellMsgTypeGet(&cmdParsed, msgName);
if (uintRet != LOS_OK) {
PRINTK("%s:command not found\n", msgName);
return -EFAULT;
} else {
(VOID)OsCmdExec(&cmdParsed, (CHAR *)cmdString);
}
return 0;
}
UINT32 PreHandleCmdline(const CHAR *input, CHAR **output, UINT32 *outputlen) UINT32 PreHandleCmdline(const CHAR *input, CHAR **output, UINT32 *outputlen)
{ {
@ -169,19 +146,17 @@ STATIC VOID ParseAndExecCmdline(CmdParsed *cmdParsed, const CHAR *cmdline, UINT3
{ {
INT32 i; INT32 i;
UINT32 ret; UINT32 ret;
CHAR *cmdlineOrigin = NULL;
CHAR *cmdName = NULL; CHAR *cmdName = NULL;
cmdlineOrigin = strdup(cmdline); cmdName = GetCmdName(cmdline, len);
if (cmdlineOrigin == NULL) { if (cmdName == NULL) {
PRINTK("malloc failure in %s[%d]\n", __FUNCTION__, __LINE__); PRINTK("malloc failure in %s[%d]\n", __FUNCTION__, __LINE__);
return; return;
} }
cmdName = GetCmdName(cmdline, len); ret = ShellMsgTypeGet(cmdParsed, cmdName);
if (cmdName == NULL) { if (ret != LOS_OK) {
free(cmdlineOrigin); PRINTK("%s:command not found\n", cmdName);
PRINTK("malloc failure in %s[%d]\n", __FUNCTION__, __LINE__);
return; return;
} }
@ -191,7 +166,7 @@ STATIC VOID ParseAndExecCmdline(CmdParsed *cmdParsed, const CHAR *cmdline, UINT3
goto OUT; goto OUT;
} }
(VOID)ShellCmdExec(cmdName, cmdlineOrigin); (VOID)OsCmdExec(cmdParsed);
OUT: OUT:
for (i = 0; i < cmdParsed->paramCnt; i++) { for (i = 0; i < cmdParsed->paramCnt; i++) {
@ -201,7 +176,6 @@ OUT:
} }
} }
free(cmdName); free(cmdName);
free(cmdlineOrigin);
} }
LITE_OS_SEC_TEXT_MINOR VOID ExecCmdline(const CHAR *cmdline) LITE_OS_SEC_TEXT_MINOR VOID ExecCmdline(const CHAR *cmdline)