refactor(shell):减少命令行参数的解析次数到1次(原来为2次)
通过调整获取命令类型的代码位置,达到减少解析次数的目的 经过分析,本修订无明确的副作用。 Signed-off-by: lengqinjie <15390014138@163.com>
This commit is contained in:
parent
b7de7f6085
commit
078bd0c4b1
|
@ -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);
|
||||||
|
|
|
@ -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) &&
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue