summaryrefslogtreecommitdiff
path: root/library/RemoteClient.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'library/RemoteClient.cpp')
-rw-r--r--library/RemoteClient.cpp21
1 files changed, 13 insertions, 8 deletions
diff --git a/library/RemoteClient.cpp b/library/RemoteClient.cpp
index a1ac2ec9..4d30988c 100644
--- a/library/RemoteClient.cpp
+++ b/library/RemoteClient.cpp
@@ -329,17 +329,19 @@ bool sendRemoteMessage(CSimpleSocket *socket, int16_t id, const MessageLite *msg
int size = size_ready ? msg->GetCachedSize() : msg->ByteSize();
int fullsz = size + sizeof(RPCMessageHeader);
- std::auto_ptr<uint8_t> data(new uint8_t[fullsz]);
- RPCMessageHeader *hdr = (RPCMessageHeader*)data.get();
+ uint8_t *data = new uint8_t[fullsz];
+ RPCMessageHeader *hdr = (RPCMessageHeader*)data;
hdr->id = id;
hdr->size = size;
- uint8_t *pstart = data.get() + sizeof(RPCMessageHeader);
+ uint8_t *pstart = data + sizeof(RPCMessageHeader);
uint8_t *pend = msg->SerializeWithCachedSizesToArray(pstart);
assert((pend - pstart) == size);
- return (socket->Send(data.get(), fullsz) == fullsz);
+ int got = socket->Send(data, fullsz);
+ delete[] data;
+ return (got == fullsz);
}
command_result RemoteFunctionBase::execute(color_ostream &out,
@@ -402,9 +404,9 @@ command_result RemoteFunctionBase::execute(color_ostream &out,
return CR_LINK_FAILURE;
}
- std::auto_ptr<uint8_t> buf(new uint8_t[header.size]);
+ uint8_t *buf = new uint8_t[header.size];
- if (!readFullBuffer(p_client->socket, buf.get(), header.size))
+ if (!readFullBuffer(p_client->socket, buf, header.size))
{
out.printerr("In call to %s::%s: I/O error in receive %d bytes of data.\n",
this->proto.c_str(), this->name.c_str(), header.size);
@@ -413,18 +415,20 @@ command_result RemoteFunctionBase::execute(color_ostream &out,
switch (header.id) {
case RPC_REPLY_RESULT:
- if (!output->ParseFromArray(buf.get(), header.size))
+ if (!output->ParseFromArray(buf, header.size))
{
out.printerr("In call to %s::%s: error parsing received result.\n",
this->proto.c_str(), this->name.c_str());
+ delete[] buf;
return CR_LINK_FAILURE;
}
+ delete[] buf;
return CR_OK;
case RPC_REPLY_TEXT:
text_data.Clear();
- if (text_data.ParseFromArray(buf.get(), header.size))
+ if (text_data.ParseFromArray(buf, header.size))
text_decoder.decode(&text_data);
else
out.printerr("In call to %s::%s: received invalid text data.\n",
@@ -434,5 +438,6 @@ command_result RemoteFunctionBase::execute(color_ostream &out,
default:
break;
}
+ delete[] buf;
}
}