diff --git a/src/cli/cli.cpp b/src/cli/cli.cpp index 97471af5c..9c3cffa8c 100644 --- a/src/cli/cli.cpp +++ b/src/cli/cli.cpp @@ -1079,22 +1079,30 @@ exit: void Interpreter::ProcessLine(char *aBuf, uint16_t aBufLength, Server &aServer) { char *argv[kMaxArgs]; + int argc = 0; char *cmd; - int argc; - char *last; sServer = &aServer; - VerifyOrExit((cmd = strtok_r(aBuf, " ", &last)) != NULL, ;); + VerifyOrExit(aBuf != NULL, ;); - for (argc = 0; argc < kMaxArgs; argc++) + for (; *aBuf == ' '; aBuf++, aBufLength--); + + for (cmd = aBuf + 1; (cmd < aBuf + aBufLength) && (cmd != NULL); ++cmd) { - if ((argv[argc] = strtok_r(NULL, " ", &last)) == NULL) + if (*cmd == ' ' || *cmd == '\r' || *cmd == '\n') { - break; + *cmd = '\0'; + } + + if (*(cmd - 1) == '\0' && *cmd != ' ') + { + argv[argc++] = cmd; } } + cmd = aBuf; + for (unsigned int i = 0; i < sizeof(sCommands) / sizeof(sCommands[0]); i++) { if (strcmp(cmd, sCommands[i].mName) == 0)