Index: mojo/public/system/core.h |
diff --git a/mojo/public/system/core.h b/mojo/public/system/core.h |
index aa978fd1f8ff9021e56028003ee0b64bfaab7f48..4908d4587c42e0bc97f6f9f74355925fd8c64823 100644 |
--- a/mojo/public/system/core.h |
+++ b/mojo/public/system/core.h |
@@ -438,17 +438,75 @@ MOJO_SYSTEM_EXPORT MojoResult MojoReadMessage(MojoHandle message_pipe_handle, |
// Data pipe: |
// TODO(vtl): Moar docs. |
+// Creates a data pipe, which is a unidirectional communication channel for |
+// unframed data, with the given options. Data is unframed, but must come as |
+// (multiples of) discrete elements, of the size given in |options|. See |
+// |MojoCreateDataPipeOptions| for a description of the different options |
+// available for data pipes. |
+// |
+// |options| may be set to null for a data pipe with the default options (which |
+// will have an element size of one byte and have some system-dependent |
+// capacity). |
+// |
+// On success, |*data_pipe_producer_handle| will be set to the handle for the |
+// producer and |*data_pipe_consumer_handle| will be set to the handle for the |
+// consumer. (On failure, they are not modified.) |
+// |
+// Returns: |
+// |MOJO_RESULT_OK| on success. |
+// |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g., if |
+// |*options| is invalid or one of the pointer handles looks invalid). |
+// |MOJO_RESULT_RESOURCE_EXHAUSTED| if a process/system/quota/etc. limit has |
+// been reached (e.g., if the requested capacity was too large, or if the |
+// maximum number of handles was exceeded). |
MOJO_SYSTEM_EXPORT MojoResult MojoCreateDataPipe( |
const struct MojoCreateDataPipeOptions* options, |
MojoHandle* data_pipe_producer_handle, |
MojoHandle* data_pipe_consumer_handle); |
+// Writes the given data to the data pipe producer given by |
+// |data_pipe_producer_handle|. |elements| points to data of size |*num_bytes|; |
+// |*num_bytes| should be a multiple of the data pipe's element size. If |
+// |MOJO_WRITE_DATA_FLAG_ALL_OR_NONE| is set in |flags|, either all the data |
+// will be written or none is. |
+// |
+// On success, |*num_bytes| is set to the amount of data that was actually |
+// written. |
+// |
+// Note: If the data pipe has the "may discard" option flag (specified on |
+// creation), this will discard as much data as required to write the given |
+// data, starting with the earliest written data that has not been consumed. |
+// However, even with "may discard", if |*num_bytes| is greater than the data |
+// pipe's capacity (and |MOJO_WRITE_DATA_FLAG_ALL_OR_NONE| is not set), this |
+// will write the maximum amount possible (namely, the data pipe's capacity) and |
+// set |*num_bytes| to that amount. It will *not* discard data from |elements|. |
+// |
+// Returns: |
+// |MOJO_RESULT_OK| on success. |
+// |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g., if |
+// |data_pipe_producer_dispatcher| is not a handle to a data pipe |
+// producer, |elements| does not look like a valid pointer, or |
+// |*num_bytes| is not a multiple of the data pipe's element size). |
+// |MOJO_RESULT_FAILED_PRECONDITION| if the data pipe consumer handle has been |
+// closed. |
+// |MOJO_RESULT_OUT_OF_RANGE| if |flags| has |
+// |MOJO_WRITE_DATA_FLAG_ALL_OR_NONE| set and the required amount of data |
+// (specified by |*num_bytes|) could not be written. |
+// |MOJO_RESULT_BUSY| if there is a two-phase write ongoing with |
+// |data_pipe_producer_handle| (i.e., |MojoBeginWriteData()| has been |
+// called, but not yet the matching |MojoEndWriteData()|). |
+// |MOJO_RESULT_SHOULD_WAIT| if no data can currently be written (and the |
+// consumer is still open) and |flags| does *not* have |
+// |MOJO_WRITE_DATA_FLAG_ALL_OR_NONE| set. |
+// |
+// TODO(vtl): Should there be a way of querying how much data can be written? |
MOJO_SYSTEM_EXPORT MojoResult MojoWriteData( |
MojoHandle data_pipe_producer_handle, |
const void* elements, |
uint32_t* num_bytes, |
MojoWriteDataFlags flags); |
+// TODO(vtl): Document me. |
// TODO(vtl): Note to self: |buffer_num_bytes| is an "in-out" parameter: on the |
// "in" side, |*buffer_num_bytes| is the number requested; on success, on the |
// "out" side, it's the number available (which may be GREATER or LESS than the |
@@ -460,10 +518,54 @@ MOJO_SYSTEM_EXPORT MojoResult MojoBeginWriteData( |
uint32_t* buffer_num_bytes, |
MojoWriteDataFlags flags); |
+// TODO(vtl): Document me. |
MOJO_SYSTEM_EXPORT MojoResult MojoEndWriteData( |
MojoHandle data_pipe_producer_handle, |
uint32_t num_bytes_written); |
+// Reads data from the data pipe consumer given by |data_pipe_consumer_handle|. |
+// May also be used to discard data or query the amount of data available. |
+// |
+// If |flags| has neither |MOJO_READ_DATA_FLAG_DISCARD| nor |
+// |MOJO_READ_DATA_FLAG_QUERY| set, this tries to read up to |*num_bytes| (which |
+// must be a multiple of the data pipe's element size) bytes of data to |
+// |elements| and set |*num_bytes| to the amount actually read. If flags has |
+// |MOJO_READ_DATA_FLAG_ALL_OR_NONE| set, it will either read exactly |
+// |*num_bytes| bytes of data or none. |
+// |
+// If flags has |MOJO_READ_DATA_FLAG_DISCARD| set, it discards up to |
+// |*num_bytes| (which again be a multiple of the element size) bytes of data, |
+// setting |*num_bytes| to the amount actually discarded. If flags has |
+// |MOJO_READ_DATA_FLAG_ALL_OR_NONE|, it will either discard exactly |
+// |*num_bytes| bytes of data or none. In this case, |MOJO_READ_DATA_FLAG_QUERY| |
+// must not be set, and |elements| is ignored (and should typically be set to |
+// null). |
+// |
+// If flags has |MOJO_READ_DATA_FLAG_QUERY| set, it queries the amount of data |
+// available, setting |*num_bytes| to the number of bytes available. In this |
+// case, |MOJO_READ_DATA_FLAG_DISCARD| must not be set, and |
+// |MOJO_READ_DATA_FLAG_ALL_OR_NONE| is ignored, as are |elements| and the input |
+// value of |*num_bytes|. |
+// |
+// Returns: |
+// |MOJO_RESULT_OK| on success (see above for a description of the different |
+// operations). |
+// |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g., |
+// |data_pipe_consumer_handle| is invalid, the combination of flags in |
+// |flags| is invalid, etc.). |
+// |MOJO_RESULT_FAILED_PRECONDITION| if the data pipe producer handle has been |
+// closed and data (or the required amount of data) was not available to |
+// be read or discarded. |
+// |MOJO_RESULT_OUT_OF_RANGE| if |flags| has |MOJO_READ_DATA_FLAG_ALL_OR_NONE| |
+// set and the required amount of data is not available to be read or |
+// discarded (and the producer is still open). |
+// |MOJO_RESULT_BUSY| if there is a two-phase read ongoing with |
+// |data_pipe_consumer_handle| (i.e., |MojoBeginReadData()| has been |
+// called, but not yet the matching |MojoEndReadData()|). |
+// |MOJO_RESULT_SHOULD_WAIT| if there is no data to be read or discarded (and |
+// the producer is still open) and |flags| does *not* have |
+// |MOJO_READ_DATA_FLAG_ALL_OR_NONE| set. |
+// |
// TODO(vtl): Note to self: If |MOJO_READ_DATA_FLAG_QUERY| is set, then |
// |elements| must be null (and nothing will be read). |
MOJO_SYSTEM_EXPORT MojoResult MojoReadData( |
@@ -472,12 +574,14 @@ MOJO_SYSTEM_EXPORT MojoResult MojoReadData( |
uint32_t* num_bytes, |
MojoReadDataFlags flags); |
+// TODO(vtl): Document me. |
MOJO_SYSTEM_EXPORT MojoResult MojoBeginReadData( |
MojoHandle data_pipe_consumer_handle, |
const void** buffer, |
uint32_t* buffer_num_bytes, |
MojoReadDataFlags flags); |
+// TODO(vtl): Document me. |
MOJO_SYSTEM_EXPORT MojoResult MojoEndReadData( |
MojoHandle data_pipe_consumer_handle, |
uint32_t num_bytes_read); |