diff --git a/lldb/source/Interpreter/CommandInterpreter.cpp b/lldb/source/Interpreter/CommandInterpreter.cpp --- a/lldb/source/Interpreter/CommandInterpreter.cpp +++ b/lldb/source/Interpreter/CommandInterpreter.cpp @@ -2982,24 +2982,18 @@ lldb::StreamFileSP stream = is_stdout ? io_handler.GetOutputStreamFileSP() : io_handler.GetErrorStreamFileSP(); // Split the output into lines and poll for interrupt requests - const char *data = str.data(); size_t size = str.size(); while (size > 0 && !WasInterrupted()) { - size_t chunk_size = 0; - for (; chunk_size < size; ++chunk_size) { - lldbassert(data[chunk_size] != '\0'); - if (data[chunk_size] == '\n') { - ++chunk_size; - break; - } - } + llvm::StringRef line; + size_t written = 0; + std::tie(line, str) = str.split('\n'); { std::lock_guard guard(io_handler.GetOutputMutex()); - chunk_size = stream->Write(data, chunk_size); + written += stream->Write(line.data(), line.size()); + written += stream->Write("\n", 1); } - lldbassert(size >= chunk_size); - data += chunk_size; - size -= chunk_size; + lldbassert(size >= written); + size -= written; } std::lock_guard guard(io_handler.GetOutputMutex());