remoteclient: dont use gcc deprecated auto_ptr

develop
jj 2012-05-31 13:23:00 +02:00
parent 2c7abdbf1f
commit 470c9f60aa
1 changed files with 13 additions and 8 deletions

@ -329,17 +329,19 @@ bool sendRemoteMessage(CSimpleSocket *socket, int16_t id, const MessageLite *msg
int size = size_ready ? msg->GetCachedSize() : msg->ByteSize(); int size = size_ready ? msg->GetCachedSize() : msg->ByteSize();
int fullsz = size + sizeof(RPCMessageHeader); int fullsz = size + sizeof(RPCMessageHeader);
std::auto_ptr<uint8_t> data(new uint8_t[fullsz]); uint8_t *data = new uint8_t[fullsz];
RPCMessageHeader *hdr = (RPCMessageHeader*)data.get(); RPCMessageHeader *hdr = (RPCMessageHeader*)data;
hdr->id = id; hdr->id = id;
hdr->size = size; hdr->size = size;
uint8_t *pstart = data.get() + sizeof(RPCMessageHeader); uint8_t *pstart = data + sizeof(RPCMessageHeader);
uint8_t *pend = msg->SerializeWithCachedSizesToArray(pstart); uint8_t *pend = msg->SerializeWithCachedSizesToArray(pstart);
assert((pend - pstart) == size); 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, command_result RemoteFunctionBase::execute(color_ostream &out,
@ -402,9 +404,9 @@ command_result RemoteFunctionBase::execute(color_ostream &out,
return CR_LINK_FAILURE; 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", 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); this->proto.c_str(), this->name.c_str(), header.size);
@ -413,18 +415,20 @@ command_result RemoteFunctionBase::execute(color_ostream &out,
switch (header.id) { switch (header.id) {
case RPC_REPLY_RESULT: 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", out.printerr("In call to %s::%s: error parsing received result.\n",
this->proto.c_str(), this->name.c_str()); this->proto.c_str(), this->name.c_str());
delete[] buf;
return CR_LINK_FAILURE; return CR_LINK_FAILURE;
} }
delete[] buf;
return CR_OK; return CR_OK;
case RPC_REPLY_TEXT: case RPC_REPLY_TEXT:
text_data.Clear(); text_data.Clear();
if (text_data.ParseFromArray(buf.get(), header.size)) if (text_data.ParseFromArray(buf, header.size))
text_decoder.decode(&text_data); text_decoder.decode(&text_data);
else else
out.printerr("In call to %s::%s: received invalid text data.\n", out.printerr("In call to %s::%s: received invalid text data.\n",
@ -434,5 +438,6 @@ command_result RemoteFunctionBase::execute(color_ostream &out,
default: default:
break; break;
} }
delete[] buf;
} }
} }