Index: mojo/public/c/system/functions.h |
diff --git a/mojo/public/c/system/functions.h b/mojo/public/c/system/functions.h |
index bd4daedaf7bbcae173861adfa171c6efe677d739..3d4d07c0fa0cb666047f965e5a95bd79b65dd1c9 100644 |
--- a/mojo/public/c/system/functions.h |
+++ b/mojo/public/c/system/functions.h |
@@ -19,6 +19,29 @@ |
extern "C" { |
#endif |
+// |MojoPlatformSharedBufferHandleFlags|: Flags relevant to wrapped platform |
+// shared buffers. |
+// |
+// |MOJO_PLATFORM_SHARED_BUFFER_HANDLE_NONE| - No flags. |
+// |MOJO_PLATFORM_SHARED_BUFFER_HANDLE_READ_ONLY| - Indicates that the wrapped |
+// buffer handle may only be mapped for reading. |
+ |
+typedef uint32_t MojoPlatformSharedBufferHandleFlags; |
+ |
+#ifdef __cplusplus |
+const MojoPlatformSharedBufferHandleFlags |
+MOJO_PLATFORM_SHARED_BUFFER_HANDLE_FLAG_NONE = 0; |
+ |
+const MojoPlatformSharedBufferHandleFlags |
+MOJO_PLATFORM_SHARED_BUFFER_HANDLE_FLAG_READ_ONLY = 1 << 0; |
+#else |
+#define MOJO_PLATFORM_SHARED_BUFFER_HANDLE_FLAG_NONE |
+ ((MojoPlatformSharedBufferHandleFlags)0) |
+ |
+#define MOJO_PLATFORM_SHARED_BUFFER_HANDLE_FLAG_READ_ONLY \ |
+ ((MojoPlatformSharedBufferHandleFlags)1 << 0) |
+#endif |
+ |
// A callback used to notify watchers registered via |MojoWatch()|. Called when |
// some watched signals are satisfied or become unsatisfiable. See the |
// documentation for |MojoWatch()| for more details. |
@@ -206,6 +229,89 @@ MojoWatch(MojoHandle handle, |
MOJO_SYSTEM_EXPORT MojoResult |
MojoCancelWatch(MojoHandle handle, uintptr_t context); |
+// Wraps a generic platform handle as a Mojo handle which can be transferred |
+// over a message pipe. Takes ownership of the platform handle. |
+// |
+// |platform_handle|: The platform handle to wrap. |
+// |
+// Returns: |
+// |MOJO_RESULT_OK| if the handle was successfully wrapped. In this case |
+// |*mojo_handle| contains the Mojo handle of the wrapped object. |
+// |MOJO_RESULT_RESOURCE_EXHAUSTED| if the system is out of handles. |
+// |MOJO_RESULT_INVALID_ARGUMENT| if |platform_handle| was not a valid |
+// platform handle. |
+// |
+// NOTE: It is not alwawys possible to detect if |platform_handle| is valid, so |
+// this call may succeed even when |handle| invalid (e.g. a valid file |
+// descriptor value for a file descriptor that isn't actually open.) |
+MOJO_SYSTEM_EXPORT MojoResult |
+MojoWrapPlatformHandle(MojoPlatformHandle platform_handle, |
+ MojoHandle* mojo_handle); // Out |
+ |
+// Unwraps a generic platform handle from a Mojo handle. If this call succeeds, |
+// the Mojo handle is closed. If this call succeeds, ownership of the underlying |
+// platform object is bound to the returned platform handle and becomes the |
+// caller's responsibility. |
+// |
+// |mojo_handle|: The Mojo handle from which to unwrap the platform handle. |
+// |
+// Returns: |
+// |MOJO_RESULT_OK| if the handle was successfully unwrapped. In this case |
+// |*platform_handle| contains the unwrapped platform handle. |
+// |MOJO_RESULT_INVALID_ARGUMENT| if |mojo_handle| was not a valid Mojo |
+// handle wrapping a platform handle. |
+MOJO_SYSTEM_EXPORT MojoResult |
+MojoUnwrapPlatformHandle(MojoHandle mojo_handle, |
+ MojoPlatformHandle* platform_handle); // Out |
+ |
+// Wraps a platform shared buffer handle as a Mojo shared buffer handle which |
+// can be transferred over a message pipe. Takes ownership of the platform |
+// shared buffer handle. |
+// |
+// |platform_handle|: The platform handle to wrap. Must be a handle to a |
+// shared buffer object. |
+// |num_bytes|: The size of the shared buffer in bytes. |
+// |
+// NOTE: Set |MOJO_PLATFORM_SHARED_BUFFER_HANDLE_FLAG_READ_ONLY| in |flags| if |
+// the buffer to be wrapped is already read-only. This flag does NOT change the |
+// access control of the buffer in any way. |
+// |
+// Returns: |
+// |MOJO_RESULT_OK| if the handle was successfully wrapped. In this case |
+// |*mojo_handle| contains a Mojo shared buffer handle. |
+// |MOJO_RESULT_INVALID_ARGUMENT| if |platform_handle| was not a valid |
+// platform shared buffer handle. |
+MOJO_SYSTEM_EXPORT MojoResult |
+MojoWrapPlatformSharedBufferHandle(MojoPlatformHandle platform_handle, |
+ size_t num_bytes, |
+ MojoPlatformSharedBufferHandleFlags flags, |
+ MojoHandle* mojo_handle); // Out |
+ |
+// Unwraps a platform shared buffer handle from a Mojo shared buffer handle. |
+// If this call succeeds, ownership of the underlying shared buffer object is |
+// bound to the returned platform handle and becomes the caller's |
+// responsibility. |
+// |
+// |mojo_handle|: The Mojo shared buffer handle to unwrap. |
+// |
+// Returns: |
+// |MOJO_RESULT_OK| if the handle was successfully unwrapped. In this case |
+// |*platform_handle| contains a platform shared buffer handle, |
+// |*num_bytes| contains the size of the shared buffer object, and |
+// |*flags| indicates flags relevant to the wrapped buffer (see below). |
+// |MOJO_RESULT_INVALID_ARGUMENT| if |mojo_handle| is not a valid Mojo |
+// shared buffer handle. |
+// |
+// Flags which may be set in |*flags| upon success: |
+// |MOJO_PLATFORM_SHARED_BUFFER_FLAG_READ_ONLY| is set iff the unwrapped |
+// shared buffer handle may only be used for read-only mapping. |
+MOJO_SYSTEM_EXPORT MojoResult |
+MojoUnwrapPlatformSharedBufferHandle( |
+ MojoHandle mojo_handle, |
+ MojoPlatformHandle* platform_handle, |
+ size_t* num_bytes, |
+ MojoPlatformSharedBufferHandleFlags* flags); |
+ |
#ifdef __cplusplus |
} // extern "C" |
#endif |