| Index: base/pickle.cc
|
| diff --git a/base/pickle.cc b/base/pickle.cc
|
| index 3f376e3f1cf95dac87007b2432f97ac0dbd8ea29..a05df287f80077c0b4019cd0cbd96e963aaea986 100644
|
| --- a/base/pickle.cc
|
| +++ b/base/pickle.cc
|
| @@ -140,12 +140,6 @@ bool Pickle::ReadLong(void** iter, long* result) const {
|
| return true;
|
| }
|
|
|
| -bool Pickle::ReadLength(void** iter, int* result) const {
|
| - if (!ReadInt(iter, result))
|
| - return false;
|
| - return ((*result) >= 0);
|
| -}
|
| -
|
| bool Pickle::ReadSize(void** iter, size_t* result) const {
|
| DCHECK(iter);
|
| if (!*iter)
|
| @@ -256,22 +250,6 @@ bool Pickle::ReadString16(void** iter, string16* result) const {
|
| return true;
|
| }
|
|
|
| -bool Pickle::ReadBytes(void** iter, const char** data, int length) const {
|
| - DCHECK(iter);
|
| - DCHECK(data);
|
| - *data = 0;
|
| - if (!*iter)
|
| - *iter = const_cast<char*>(payload());
|
| -
|
| - if (!IteratorHasRoomFor(*iter, length))
|
| - return false;
|
| -
|
| - *data = reinterpret_cast<const char*>(*iter);
|
| -
|
| - UpdateIter(iter, length);
|
| - return true;
|
| -}
|
| -
|
| bool Pickle::ReadData(void** iter, const char** data, int* length) const {
|
| DCHECK(iter);
|
| DCHECK(data);
|
| @@ -285,41 +263,26 @@ bool Pickle::ReadData(void** iter, const char** data, int* length) const {
|
| return ReadBytes(iter, data, *length);
|
| }
|
|
|
| -char* Pickle::BeginWrite(size_t length) {
|
| - // write at a uint32-aligned offset from the beginning of the header
|
| - size_t offset = AlignInt(header_->payload_size, sizeof(uint32));
|
| -
|
| - size_t new_size = offset + length;
|
| - size_t needed_size = header_size_ + new_size;
|
| - if (needed_size > capacity_ && !Resize(std::max(capacity_ * 2, needed_size)))
|
| - return NULL;
|
| +bool Pickle::ReadBytes(void** iter, const char** data, int length) const {
|
| + DCHECK(iter);
|
| + DCHECK(data);
|
| + *data = 0;
|
| + if (!*iter)
|
| + *iter = const_cast<char*>(payload());
|
|
|
| -#ifdef ARCH_CPU_64_BITS
|
| - DCHECK_LE(length, std::numeric_limits<uint32>::max());
|
| -#endif
|
| + if (!IteratorHasRoomFor(*iter, length))
|
| + return false;
|
|
|
| - header_->payload_size = static_cast<uint32>(new_size);
|
| - return payload() + offset;
|
| -}
|
| + *data = reinterpret_cast<const char*>(*iter);
|
|
|
| -void Pickle::EndWrite(char* dest, int length) {
|
| - // Zero-pad to keep tools like purify from complaining about uninitialized
|
| - // memory.
|
| - if (length % sizeof(uint32))
|
| - memset(dest + length, 0, sizeof(uint32) - (length % sizeof(uint32)));
|
| + UpdateIter(iter, length);
|
| + return true;
|
| }
|
|
|
| -bool Pickle::WriteBytes(const void* data, int data_len) {
|
| - DCHECK(capacity_ != kCapacityReadOnly) << "oops: pickle is readonly";
|
| -
|
| - char* dest = BeginWrite(data_len);
|
| - if (!dest)
|
| +bool Pickle::ReadLength(void** iter, int* result) const {
|
| + if (!ReadInt(iter, result))
|
| return false;
|
| -
|
| - memcpy(dest, data, data_len);
|
| -
|
| - EndWrite(dest, data_len);
|
| - return true;
|
| + return ((*result) >= 0);
|
| }
|
|
|
| bool Pickle::WriteString(const std::string& value) {
|
| @@ -349,6 +312,19 @@ bool Pickle::WriteData(const char* data, int length) {
|
| return length >= 0 && WriteInt(length) && WriteBytes(data, length);
|
| }
|
|
|
| +bool Pickle::WriteBytes(const void* data, int data_len) {
|
| + DCHECK(capacity_ != kCapacityReadOnly) << "oops: pickle is readonly";
|
| +
|
| + char* dest = BeginWrite(data_len);
|
| + if (!dest)
|
| + return false;
|
| +
|
| + memcpy(dest, data, data_len);
|
| +
|
| + EndWrite(dest, data_len);
|
| + return true;
|
| +}
|
| +
|
| char* Pickle::BeginWriteData(int length) {
|
| DCHECK_EQ(variable_buffer_offset_, 0U) <<
|
| "There can only be one variable buffer in a Pickle";
|
| @@ -386,6 +362,30 @@ void Pickle::TrimWriteData(int new_length) {
|
| *cur_length = new_length;
|
| }
|
|
|
| +char* Pickle::BeginWrite(size_t length) {
|
| + // write at a uint32-aligned offset from the beginning of the header
|
| + size_t offset = AlignInt(header_->payload_size, sizeof(uint32));
|
| +
|
| + size_t new_size = offset + length;
|
| + size_t needed_size = header_size_ + new_size;
|
| + if (needed_size > capacity_ && !Resize(std::max(capacity_ * 2, needed_size)))
|
| + return NULL;
|
| +
|
| +#ifdef ARCH_CPU_64_BITS
|
| + DCHECK_LE(length, std::numeric_limits<uint32>::max());
|
| +#endif
|
| +
|
| + header_->payload_size = static_cast<uint32>(new_size);
|
| + return payload() + offset;
|
| +}
|
| +
|
| +void Pickle::EndWrite(char* dest, int length) {
|
| + // Zero-pad to keep tools like purify from complaining about uninitialized
|
| + // memory.
|
| + if (length % sizeof(uint32))
|
| + memset(dest + length, 0, sizeof(uint32) - (length % sizeof(uint32)));
|
| +}
|
| +
|
| bool Pickle::Resize(size_t new_capacity) {
|
| new_capacity = AlignInt(new_capacity, kPayloadUnit);
|
|
|
|
|