blob: 0f5f8457b60d1ec298b2b4ba3adfe7ad4187dfaa [file] [log] [blame]
// Copyright 2018 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/base/shared_memory_utils.h"
#include "base/memory/shared_memory_mapping.h"
#include "mojo/public/cpp/system/buffer.h"
#include "mojo/public/cpp/system/platform_handle.h"
namespace mojo {
base::MappedReadOnlyRegion CreateReadOnlySharedMemoryRegion(size_t size) {
auto writable_region = CreateWritableSharedMemoryRegion(size);
if (!writable_region.IsValid())
return {};
base::WritableSharedMemoryMapping mapping = writable_region.Map();
return {base::WritableSharedMemoryRegion::ConvertToReadOnly(
std::move(writable_region)),
std::move(mapping)};
}
base::UnsafeSharedMemoryRegion CreateUnsafeSharedMemoryRegion(size_t size) {
auto writable_region = CreateWritableSharedMemoryRegion(size);
if (!writable_region.IsValid())
return base::UnsafeSharedMemoryRegion();
return base::WritableSharedMemoryRegion::ConvertToUnsafe(
std::move(writable_region));
}
base::WritableSharedMemoryRegion CreateWritableSharedMemoryRegion(size_t size) {
mojo::ScopedSharedBufferHandle handle =
mojo::SharedBufferHandle::Create(size);
if (!handle.is_valid())
return base::WritableSharedMemoryRegion();
return mojo::UnwrapWritableSharedMemoryRegion(std::move(handle));
}
} // namespace mojo