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

Merge pull request !408 from 冷钦街/reduce
This commit is contained in:
openharmony_ci 2021-11-22 21:10:48 +00:00 committed by Gitee
commit 05a487dcf6
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))
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);

View File

@ -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) &&

View File

@ -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)