1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" 6 7 #include <assert.h> 8 #include <stdlib.h> 9 #include <string.h> 10 11 #include <algorithm> 12 13 #include "mojo/public/cpp/bindings/lib/bindings_serialization.h" 14 15 namespace mojo { 16 namespace internal { 17 18 FixedBuffer::FixedBuffer(size_t size) 19 : ptr_(NULL), 20 cursor_(0), 21 size_(internal::Align(size)) { 22 // calloc() required to zero memory and thus avoid info leaks. 23 ptr_ = static_cast<char*>(calloc(size_, 1)); 24 } 25 26 FixedBuffer::~FixedBuffer() { 27 free(ptr_); 28 } 29 30 void* FixedBuffer::Allocate(size_t delta) { 31 delta = internal::Align(delta); 32 33 if (delta == 0 || delta > size_ - cursor_) { 34 assert(false); 35 return NULL; 36 } 37 38 char* result = ptr_ + cursor_; 39 cursor_ += delta; 40 41 return result; 42 } 43 44 void* FixedBuffer::Leak() { 45 char* ptr = ptr_; 46 ptr_ = NULL; 47 cursor_ = 0; 48 size_ = 0; 49 return ptr; 50 } 51 52 } // namespace internal 53 } // namespace mojo 54