diff --git a/src/posix/client.cpp b/src/posix/client.cpp index 2cb16b172..0002df2ee 100644 --- a/src/posix/client.cpp +++ b/src/posix/client.cpp @@ -40,6 +40,7 @@ #define OPENTHREAD_USE_READLINE (HAVE_LIBEDIT || HAVE_LIBREADLINE) +#include #include #include #include @@ -295,10 +296,12 @@ int main(int argc, char *argv[]) } else { - size_t lineStart = 0; + ssize_t lineStart = 0; for (ssize_t i = 0; i < rval; i++) { + int prevPromptState = promptState; + if (FindPrompt(promptState, buffer[i])) { doneState = 0; @@ -306,6 +309,10 @@ int main(int argc, char *argv[]) lineStart = i + 1; continue; } + else if (prevPromptState == 1 && i == 0) + { + VerifyOrExit(DoWrite(STDOUT_FILENO, ">", 1), ret = OT_EXIT_FAILURE); + } if (buffer[i] == '\r' || buffer[i] == '\n') { @@ -320,6 +327,12 @@ int main(int argc, char *argv[]) ret = OT_EXIT_SUCCESS; } } + + if (lineStart < rval && promptState != 1) + { + assert(promptState != 0 && promptState != 2); + VerifyOrExit(DoWrite(STDOUT_FILENO, buffer + lineStart, rval - lineStart), ret = OT_EXIT_FAILURE); + } } } }