1 // Copyright 2016 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/system/buffer.h" 6 7 namespace mojo { 8 9 // static 10 ScopedSharedBufferHandle SharedBufferHandle::Create(uint64_t num_bytes) { 11 MojoCreateSharedBufferOptions options = { 12 sizeof(options), MOJO_CREATE_SHARED_BUFFER_OPTIONS_FLAG_NONE}; 13 SharedBufferHandle handle; 14 MojoCreateSharedBuffer(&options, num_bytes, handle.mutable_value()); 15 return MakeScopedHandle(handle); 16 } 17 18 ScopedSharedBufferHandle SharedBufferHandle::Clone( 19 SharedBufferHandle::AccessMode access_mode) const { 20 ScopedSharedBufferHandle result; 21 if (!is_valid()) 22 return result; 23 24 MojoDuplicateBufferHandleOptions options = { 25 sizeof(options), MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_NONE}; 26 if (access_mode == AccessMode::READ_ONLY) 27 options.flags |= MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_READ_ONLY; 28 SharedBufferHandle result_handle; 29 MojoDuplicateBufferHandle(value(), &options, result_handle.mutable_value()); 30 result.reset(result_handle); 31 return result; 32 } 33 34 ScopedSharedBufferMapping SharedBufferHandle::Map(uint64_t size) const { 35 return MapAtOffset(size, 0); 36 } 37 38 ScopedSharedBufferMapping SharedBufferHandle::MapAtOffset( 39 uint64_t size, 40 uint64_t offset) const { 41 void* buffer = nullptr; 42 MojoMapBuffer(value(), offset, size, &buffer, MOJO_MAP_BUFFER_FLAG_NONE); 43 return ScopedSharedBufferMapping(buffer); 44 } 45 46 } // namespace mojo 47