From 078bd0c4b1bc5bc0827b4562d07c26e0da5ac644 Mon Sep 17 00:00:00 2001 From: lengqinjie <15390014138@163.com> Date: Mon, 22 Nov 2021 09:32:17 +0800 Subject: [PATCH] =?UTF-8?q?refactor(shell):=E5=87=8F=E5=B0=91=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E8=A1=8C=E5=8F=82=E6=95=B0=E7=9A=84=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=E6=AC=A1=E6=95=B0=E5=88=B01=E6=AC=A1(=E5=8E=9F=E6=9D=A5?= =?UTF-8?q?=E4=B8=BA2=E6=AC=A1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 通过调整获取命令类型的代码位置,达到减少解析次数的目的 经过分析,本修订无明确的副作用。 Signed-off-by: lengqinjie <15390014138@163.com> --- components/shell/include/shcmd.h | 2 +- components/shell/src/base/shcmd.c | 9 ++------ components/shell/src/base/shmsg.c | 38 +++++-------------------------- 3 files changed, 9 insertions(+), 40 deletions(-) diff --git a/components/shell/include/shcmd.h b/components/shell/include/shcmd.h index f3a3f974..4c7cd9cc 100644 --- a/components/shell/include/shcmd.h +++ b/components/shell/include/shcmd.h @@ -85,7 +85,7 @@ typedef struct { #define SCREEN_IS_FULL(timesPrint, lineCap) ((timesPrint) >= ((lineCap) * DEFAULT_SCREEN_HEIGNT)) 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 OsShellKeyInit(ShellCB *shellCB); extern VOID OsShellKeyDeInit(CmdKeyLink *cmdKeyLink); diff --git a/components/shell/src/base/shcmd.c b/components/shell/src/base/shcmd.c index 8f7d0556..9d2720f3 100755 --- a/components/shell/src/base/shcmd.c +++ b/components/shell/src/base/shcmd.c @@ -282,7 +282,7 @@ LITE_OS_SEC_TEXT_MINOR UINT32 OsShellSysCmdRegister(VOID) 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; CmdCallBackFunc cmdHook = NULL; @@ -290,15 +290,10 @@ LITE_OS_SEC_TEXT_MINOR UINT32 OsCmdExec(CmdParsed *cmdParsed, CHAR *cmdStr) UINT32 i; const CHAR *cmdKey = NULL; - if ((cmdParsed == NULL) || (cmdStr == NULL) || (strlen(cmdStr) == 0)) { + if (cmdParsed == NULL) { 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) { cmdKey = curCmdItem->cmd->cmdKey; if ((cmdParsed->cmdType == curCmdItem->cmd->cmdType) && diff --git a/components/shell/src/base/shmsg.c b/components/shell/src/base/shmsg.c index 26e515ac..c8ece50c 100755 --- a/components/shell/src/base/shmsg.c +++ b/components/shell/src/base/shmsg.c @@ -108,29 +108,6 @@ CHAR *GetCmdName(const CHAR *cmdline, UINT32 len) 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) { @@ -169,19 +146,17 @@ STATIC VOID ParseAndExecCmdline(CmdParsed *cmdParsed, const CHAR *cmdline, UINT3 { INT32 i; UINT32 ret; - CHAR *cmdlineOrigin = NULL; CHAR *cmdName = NULL; - cmdlineOrigin = strdup(cmdline); - if (cmdlineOrigin == NULL) { + cmdName = GetCmdName(cmdline, len); + if (cmdName == NULL) { PRINTK("malloc failure in %s[%d]\n", __FUNCTION__, __LINE__); return; } - cmdName = GetCmdName(cmdline, len); - if (cmdName == NULL) { - free(cmdlineOrigin); - PRINTK("malloc failure in %s[%d]\n", __FUNCTION__, __LINE__); + ret = ShellMsgTypeGet(cmdParsed, cmdName); + if (ret != LOS_OK) { + PRINTK("%s:command not found\n", cmdName); return; } @@ -191,7 +166,7 @@ STATIC VOID ParseAndExecCmdline(CmdParsed *cmdParsed, const CHAR *cmdline, UINT3 goto OUT; } - (VOID)ShellCmdExec(cmdName, cmdlineOrigin); + (VOID)OsCmdExec(cmdParsed); OUT: for (i = 0; i < cmdParsed->paramCnt; i++) { @@ -201,7 +176,6 @@ OUT: } } free(cmdName); - free(cmdlineOrigin); } LITE_OS_SEC_TEXT_MINOR VOID ExecCmdline(const CHAR *cmdline)