mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
51 lines
1.1 KiB
C++
51 lines
1.1 KiB
C++
// Copyright 2014 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "mojo/public/cpp/bindings/lib/fixed_buffer.h"
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <algorithm>
|
|
|
|
#include "mojo/public/cpp/bindings/lib/bindings_serialization.h"
|
|
#include "mojo/public/cpp/environment/logging.h"
|
|
|
|
namespace mojo {
|
|
namespace internal {
|
|
|
|
FixedBuffer::FixedBuffer(size_t size)
|
|
: ptr_(nullptr), cursor_(0), size_(internal::Align(size)) {
|
|
// calloc() required to zero memory and thus avoid info leaks.
|
|
ptr_ = static_cast<char*>(calloc(size_, 1));
|
|
}
|
|
|
|
FixedBuffer::~FixedBuffer() {
|
|
free(ptr_);
|
|
}
|
|
|
|
void* FixedBuffer::Allocate(size_t delta) {
|
|
delta = internal::Align(delta);
|
|
|
|
if (delta == 0 || delta > size_ - cursor_) {
|
|
MOJO_DCHECK(false) << "Not reached";
|
|
return nullptr;
|
|
}
|
|
|
|
char* result = ptr_ + cursor_;
|
|
cursor_ += delta;
|
|
|
|
return result;
|
|
}
|
|
|
|
void* FixedBuffer::Leak() {
|
|
char* ptr = ptr_;
|
|
ptr_ = nullptr;
|
|
cursor_ = 0;
|
|
size_ = 0;
|
|
return ptr;
|
|
}
|
|
|
|
} // namespace internal
|
|
} // namespace mojo
|