| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/pickle.h" | 5 #include "base/pickle.h" |
| 6 | 6 |
| 7 #include <stdlib.h> | 7 #include <stdlib.h> |
| 8 | 8 |
| 9 #include <algorithm> // for max() | 9 #include <algorithm> // for max() |
| 10 | 10 |
| (...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 #ifdef ARCH_CPU_64_BITS | 310 #ifdef ARCH_CPU_64_BITS |
| 311 DCHECK_LE(data_len, kuint32max); | 311 DCHECK_LE(data_len, kuint32max); |
| 312 #endif | 312 #endif |
| 313 DCHECK_LE(write_offset_, kuint32max - data_len); | 313 DCHECK_LE(write_offset_, kuint32max - data_len); |
| 314 size_t new_size = write_offset_ + data_len; | 314 size_t new_size = write_offset_ + data_len; |
| 315 if (new_size > capacity_after_header_) | 315 if (new_size > capacity_after_header_) |
| 316 Resize(capacity_after_header_ * 2 + new_size); | 316 Resize(capacity_after_header_ * 2 + new_size); |
| 317 } | 317 } |
| 318 | 318 |
| 319 void Pickle::Resize(size_t new_capacity) { | 319 void Pickle::Resize(size_t new_capacity) { |
| 320 new_capacity = AlignInt(new_capacity, kPayloadUnit); | |
| 321 | |
| 322 CHECK_NE(capacity_after_header_, kCapacityReadOnly); | 320 CHECK_NE(capacity_after_header_, kCapacityReadOnly); |
| 323 void* p = realloc(header_, header_size_ + new_capacity); | 321 capacity_after_header_ = AlignInt(new_capacity, kPayloadUnit); |
| 322 void* p = realloc(header_, GetTotalAllocatedSize()); |
| 324 CHECK(p); | 323 CHECK(p); |
| 325 header_ = reinterpret_cast<Header*>(p); | 324 header_ = reinterpret_cast<Header*>(p); |
| 326 capacity_after_header_ = new_capacity; | 325 } |
| 326 |
| 327 size_t Pickle::GetTotalAllocatedSize() const { |
| 328 if (capacity_after_header_ == kCapacityReadOnly) |
| 329 return 0; |
| 330 return header_size_ + capacity_after_header_; |
| 327 } | 331 } |
| 328 | 332 |
| 329 // static | 333 // static |
| 330 const char* Pickle::FindNext(size_t header_size, | 334 const char* Pickle::FindNext(size_t header_size, |
| 331 const char* start, | 335 const char* start, |
| 332 const char* end) { | 336 const char* end) { |
| 333 DCHECK_EQ(header_size, AlignInt(header_size, sizeof(uint32))); | 337 DCHECK_EQ(header_size, AlignInt(header_size, sizeof(uint32))); |
| 334 DCHECK_LE(header_size, static_cast<size_t>(kPayloadUnit)); | 338 DCHECK_LE(header_size, static_cast<size_t>(kPayloadUnit)); |
| 335 | 339 |
| 336 size_t length = static_cast<size_t>(end - start); | 340 size_t length = static_cast<size_t>(end - start); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 367 } | 371 } |
| 368 | 372 |
| 369 char* write = mutable_payload() + write_offset_; | 373 char* write = mutable_payload() + write_offset_; |
| 370 memcpy(write, data, length); | 374 memcpy(write, data, length); |
| 371 memset(write + length, 0, data_len - length); | 375 memset(write + length, 0, data_len - length); |
| 372 header_->payload_size = static_cast<uint32>(new_size); | 376 header_->payload_size = static_cast<uint32>(new_size); |
| 373 write_offset_ = new_size; | 377 write_offset_ = new_size; |
| 374 } | 378 } |
| 375 | 379 |
| 376 } // namespace base | 380 } // namespace base |
| OLD | NEW |