aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/os/wstream.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/os/wstream.c')
-rw-r--r--src/nvim/os/wstream.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/nvim/os/wstream.c b/src/nvim/os/wstream.c
index 57afdd0e8f..c2ed05b78f 100644
--- a/src/nvim/os/wstream.c
+++ b/src/nvim/os/wstream.c
@@ -30,8 +30,16 @@ typedef struct {
WBuffer *buffer;
} WriteData;
-static void write_cb(uv_write_t *req, int status);
+#ifdef INCLUDE_GENERATED_DECLARATIONS
+# include "os/wstream.c.generated.h"
+#endif
+
+/// Creates a new WStream instance. A WStream encapsulates all the boilerplate
+/// necessary for writing to a libuv stream.
+///
+/// @param maxmem Maximum amount memory used by this `WStream` instance.
+/// @return The newly-allocated `WStream` instance
WStream * wstream_new(size_t maxmem)
{
WStream *rv = xmalloc(sizeof(WStream));
@@ -44,6 +52,9 @@ WStream * wstream_new(size_t maxmem)
return rv;
}
+/// Frees all memory allocated for a WStream instance
+///
+/// @param wstream The `WStream` instance
void wstream_free(WStream *wstream)
{
if (!wstream->pending_reqs) {
@@ -53,12 +64,23 @@ void wstream_free(WStream *wstream)
}
}
+/// Sets the underlying `uv_stream_t` instance
+///
+/// @param wstream The `WStream` instance
+/// @param stream The new `uv_stream_t` instance
void wstream_set_stream(WStream *wstream, uv_stream_t *stream)
{
handle_set_wstream((uv_handle_t *)stream, wstream);
wstream->stream = stream;
}
+/// Queues data for writing to the backing file descriptor of a `WStream`
+/// instance. This will fail if the write would cause the WStream use more
+/// memory than specified by `maxmem`.
+///
+/// @param wstream The `WStream` instance
+/// @param buffer The buffer which contains data to be written
+/// @return false if the write failed
bool wstream_write(WStream *wstream, WBuffer *buffer)
{
WriteData *data;
@@ -87,6 +109,15 @@ bool wstream_write(WStream *wstream, WBuffer *buffer)
return true;
}
+/// Creates a WBuffer object for holding output data. Instances of this
+/// object can be reused across WStream instances, and the memory is freed
+/// automatically when no longer needed(it tracks the number of references
+/// internally)
+///
+/// @param data Data stored by the WBuffer
+/// @param size The size of the data array
+/// @param copy If true, the data will be copied into the WBuffer
+/// @return The allocated WBuffer instance
WBuffer *wstream_new_buffer(char *data, size_t size, bool copy)
{
WBuffer *rv = xmalloc(sizeof(WBuffer));