Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(831)

Side by Side Diff: base/pickle.cc

Issue 46056: Change Pickle to double its capacity by default, rather than increasing... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | base/pickle_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 <limits> 9 #include <limits>
10 #include <string> 10 #include <string>
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 return false; 256 return false;
257 257
258 return ReadBytes(iter, data, *length); 258 return ReadBytes(iter, data, *length);
259 } 259 }
260 260
261 char* Pickle::BeginWrite(size_t length) { 261 char* Pickle::BeginWrite(size_t length) {
262 // write at a uint32-aligned offset from the beginning of the header 262 // write at a uint32-aligned offset from the beginning of the header
263 size_t offset = AlignInt(header_->payload_size, sizeof(uint32)); 263 size_t offset = AlignInt(header_->payload_size, sizeof(uint32));
264 264
265 size_t new_size = offset + length; 265 size_t new_size = offset + length;
266 if (header_size_ + new_size > capacity_ && !Resize(header_size_ + new_size)) 266 size_t needed_size = header_size_ + new_size;
267 if (needed_size > capacity_ && !Resize(std::max(capacity_ * 2, needed_size)))
267 return NULL; 268 return NULL;
268 269
269 #ifdef ARCH_CPU_64_BITS 270 #ifdef ARCH_CPU_64_BITS
270 DCHECK_LE(length, std::numeric_limits<uint32>::max()); 271 DCHECK_LE(length, std::numeric_limits<uint32>::max());
271 #endif 272 #endif
272 273
273 header_->payload_size = static_cast<uint32>(new_size); 274 header_->payload_size = static_cast<uint32>(new_size);
274 return payload() + offset; 275 return payload() + offset;
275 } 276 }
276 277
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 DCHECK(header_size <= static_cast<size_t>(kPayloadUnit)); 379 DCHECK(header_size <= static_cast<size_t>(kPayloadUnit));
379 380
380 const Header* hdr = reinterpret_cast<const Header*>(start); 381 const Header* hdr = reinterpret_cast<const Header*>(start);
381 const char* payload_base = start + header_size; 382 const char* payload_base = start + header_size;
382 const char* payload_end = payload_base + hdr->payload_size; 383 const char* payload_end = payload_base + hdr->payload_size;
383 if (payload_end < payload_base) 384 if (payload_end < payload_base)
384 return NULL; 385 return NULL;
385 386
386 return (payload_end > end) ? NULL : payload_end; 387 return (payload_end > end) ? NULL : payload_end;
387 } 388 }
OLDNEW
« no previous file with comments | « no previous file | base/pickle_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698