• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 <stddef.h>
8 #include <stdlib.h>
9 
10 #include <algorithm>
11 
12 #include "base/logging.h"
13 #include "mojo/public/cpp/bindings/lib/serialization_util.h"
14 
15 namespace mojo {
16 namespace internal {
17 
FixedBuffer()18 FixedBuffer::FixedBuffer() : ptr_(nullptr), cursor_(0), size_(0) {}
19 
Initialize(void * memory,size_t size)20 void FixedBuffer::Initialize(void* memory, size_t size) {
21   DCHECK(size == internal::Align(size));
22 
23   ptr_ = static_cast<char*>(memory);
24   cursor_ = 0;
25   size_ = size;
26 }
27 
Allocate(size_t delta)28 void* FixedBuffer::Allocate(size_t delta) {
29   delta = internal::Align(delta);
30 
31   if (delta == 0 || delta > size_ - cursor_) {
32     NOTREACHED();
33     return nullptr;
34   }
35 
36   char* result = ptr_ + cursor_;
37   cursor_ += delta;
38 
39   return result;
40 }
41 
FixedBufferForTesting(size_t size)42 FixedBufferForTesting::FixedBufferForTesting(size_t size) {
43   size_ = internal::Align(size);
44   // Use calloc here to ensure all message memory is zero'd out.
45   ptr_ = static_cast<char*>(calloc(size_, 1));
46 }
47 
~FixedBufferForTesting()48 FixedBufferForTesting::~FixedBufferForTesting() {
49   free(ptr_);
50 }
51 
Leak()52 void* FixedBufferForTesting::Leak() {
53   char* ptr = ptr_;
54   ptr_ = nullptr;
55   cursor_ = 0;
56   size_ = 0;
57   return ptr;
58 }
59 
60 }  // namespace internal
61 }  // namespace mojo
62