[lldb] [gdb-remote] Use Communication::WriteAll() over Write()

Replace the uses of Communication::Write() with WriteAll() to avoid
partial writes.  None of the call sites actually accounted for that
possibility and even if it is unlikely to actually happen, there doesn't
seem to be any real harm from using WriteAll() instead.

Ideally, we'd remove Write() from the public API.  However, that would
change the API of SBCommunication.  The alternative would be to alias it
to WriteAll().

Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.llvm.org/D132395
This commit is contained in:
Michał Górny 2022-08-22 18:59:08 +02:00
parent 0c9b32e7dd
commit 03b8f79048
3 changed files with 3 additions and 3 deletions

View File

@ -2441,7 +2441,7 @@ GDBRemoteCommunicationServerLLGS::Handle_I(StringExtractorGDBRemote &packet) {
// remote host
ConnectionStatus status;
Status error;
m_stdio_communication.Write(tmp, read, status, &error);
m_stdio_communication.WriteAll(tmp, read, status, &error);
if (error.Fail()) {
return SendErrorResponse(0x15);
}

View File

@ -2880,7 +2880,7 @@ size_t ProcessGDBRemote::PutSTDIN(const char *src, size_t src_len,
Status &error) {
if (m_stdio_communication.IsConnected()) {
ConnectionStatus status;
m_stdio_communication.Write(src, src_len, status, nullptr);
m_stdio_communication.WriteAll(src, src_len, status, nullptr);
} else if (m_stdin_forward) {
m_gdb_comm.SendStdinNotification(src, src_len);
}

View File

@ -39,7 +39,7 @@ protected:
bool Write(llvm::StringRef packet) {
ConnectionStatus status;
return server.Write(packet.data(), packet.size(), status, nullptr) ==
return server.WriteAll(packet.data(), packet.size(), status, nullptr) ==
packet.size();
}
};