Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "mojo/public/cpp/system/platform_handle.h" | 5 #include "mojo/public/cpp/system/platform_handle.h" |
| 6 | 6 |
| 7 #if defined(OS_MACOSX) && !defined(OS_IOS) | 7 #if defined(OS_MACOSX) && !defined(OS_IOS) |
| 8 #include <mach/mach.h> | 8 #include <mach/mach.h> |
| 9 #include "base/mac/mach_logging.h" | 9 #include "base/mac/mach_logging.h" |
| 10 #endif | 10 #endif |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 59 *file = PlatformFileFromPlatformHandleValue(platform_handle.value); | 59 *file = PlatformFileFromPlatformHandleValue(platform_handle.value); |
| 60 } | 60 } |
| 61 | 61 |
| 62 return MOJO_RESULT_OK; | 62 return MOJO_RESULT_OK; |
| 63 } | 63 } |
| 64 | 64 |
| 65 ScopedSharedBufferHandle WrapSharedMemoryHandle( | 65 ScopedSharedBufferHandle WrapSharedMemoryHandle( |
| 66 const base::SharedMemoryHandle& memory_handle, | 66 const base::SharedMemoryHandle& memory_handle, |
| 67 size_t size, | 67 size_t size, |
| 68 bool read_only) { | 68 bool read_only) { |
| 69 #if defined(OS_POSIX) && !(defined(OS_MACOSX) && !defined(OS_IOS)) | |
| 70 if (memory_handle == base::kInvalidPlatformFile) | |
|
yzshen1
2016/12/15 20:26:43
They are not compatible for comparison?
| |
| 71 return ScopedSharedBufferHandle(); | |
| 72 #else | |
| 73 if (!memory_handle.IsValid()) | |
| 74 return ScopedSharedBufferHandle(); | |
| 75 #endif | |
| 69 MojoPlatformHandle platform_handle; | 76 MojoPlatformHandle platform_handle; |
| 70 platform_handle.struct_size = sizeof(MojoPlatformHandle); | 77 platform_handle.struct_size = sizeof(MojoPlatformHandle); |
| 71 platform_handle.type = kPlatformSharedBufferHandleType; | 78 platform_handle.type = kPlatformSharedBufferHandleType; |
| 72 #if defined(OS_MACOSX) && !defined(OS_IOS) | 79 #if defined(OS_MACOSX) && !defined(OS_IOS) |
| 73 platform_handle.value = | 80 platform_handle.value = |
| 74 static_cast<uint64_t>(memory_handle.GetMemoryObject()); | 81 static_cast<uint64_t>(memory_handle.GetMemoryObject()); |
| 75 #elif defined(OS_POSIX) | 82 #elif defined(OS_POSIX) |
| 76 platform_handle.value = PlatformHandleValueFromPlatformFile(memory_handle.fd); | 83 platform_handle.value = PlatformHandleValueFromPlatformFile(memory_handle.fd); |
| 77 #elif defined(OS_WIN) | 84 #elif defined(OS_WIN) |
| 78 platform_handle.value = | 85 platform_handle.value = |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 89 &platform_handle, size, flags, &mojo_handle); | 96 &platform_handle, size, flags, &mojo_handle); |
| 90 CHECK_EQ(result, MOJO_RESULT_OK); | 97 CHECK_EQ(result, MOJO_RESULT_OK); |
| 91 | 98 |
| 92 return ScopedSharedBufferHandle(SharedBufferHandle(mojo_handle)); | 99 return ScopedSharedBufferHandle(SharedBufferHandle(mojo_handle)); |
| 93 } | 100 } |
| 94 | 101 |
| 95 MojoResult UnwrapSharedMemoryHandle(ScopedSharedBufferHandle handle, | 102 MojoResult UnwrapSharedMemoryHandle(ScopedSharedBufferHandle handle, |
| 96 base::SharedMemoryHandle* memory_handle, | 103 base::SharedMemoryHandle* memory_handle, |
| 97 size_t* size, | 104 size_t* size, |
| 98 bool* read_only) { | 105 bool* read_only) { |
| 106 if (!handle.is_valid()) | |
| 107 return MOJO_RESULT_INVALID_ARGUMENT; | |
| 99 MojoPlatformHandle platform_handle; | 108 MojoPlatformHandle platform_handle; |
| 100 platform_handle.struct_size = sizeof(MojoPlatformHandle); | 109 platform_handle.struct_size = sizeof(MojoPlatformHandle); |
| 101 | 110 |
| 102 MojoPlatformSharedBufferHandleFlags flags; | 111 MojoPlatformSharedBufferHandleFlags flags; |
| 103 size_t num_bytes; | 112 size_t num_bytes; |
| 104 MojoResult result = MojoUnwrapPlatformSharedBufferHandle( | 113 MojoResult result = MojoUnwrapPlatformSharedBufferHandle( |
| 105 handle.release().value(), &platform_handle, &num_bytes, &flags); | 114 handle.release().value(), &platform_handle, &num_bytes, &flags); |
| 106 if (result != MOJO_RESULT_OK) | 115 if (result != MOJO_RESULT_OK) |
| 107 return result; | 116 return result; |
| 108 | 117 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 160 if (result != MOJO_RESULT_OK) | 169 if (result != MOJO_RESULT_OK) |
| 161 return result; | 170 return result; |
| 162 | 171 |
| 163 CHECK_EQ(platform_handle.type, MOJO_PLATFORM_HANDLE_TYPE_MACH_PORT); | 172 CHECK_EQ(platform_handle.type, MOJO_PLATFORM_HANDLE_TYPE_MACH_PORT); |
| 164 *port = static_cast<mach_port_t>(platform_handle.value); | 173 *port = static_cast<mach_port_t>(platform_handle.value); |
| 165 return MOJO_RESULT_OK; | 174 return MOJO_RESULT_OK; |
| 166 } | 175 } |
| 167 #endif // defined(OS_MACOSX) && !defined(OS_IOS) | 176 #endif // defined(OS_MACOSX) && !defined(OS_IOS) |
| 168 | 177 |
| 169 } // namespace mojo | 178 } // namespace mojo |
| OLD | NEW |