diff options
| author | Eliseo Martínez <eliseomarmol@gmail.com> | 2014-05-12 02:25:17 +0200 |
|---|---|---|
| committer | Eliseo Martínez <eliseomarmol@gmail.com> | 2014-05-15 20:46:01 +0200 |
| commit | da51dc9cf202772f60bd2da975dbef257bd9237c (patch) | |
| tree | 5c16b93238a153f55634e9323077f30c8133970c /src/os/wstream.c | |
| parent | ffe61e5ba1721340ca51d56bae3ddaca415fb5bc (diff) | |
| download | rneovim-da51dc9cf202772f60bd2da975dbef257bd9237c.tar.gz rneovim-da51dc9cf202772f60bd2da975dbef257bd9237c.tar.bz2 rneovim-da51dc9cf202772f60bd2da975dbef257bd9237c.zip | |
Introduce nvim namespace: Move files.
Move files from src/ to src/nvim/.
- src/nvim/ becomes the new root dir for nvim executable sources.
- src/libnvim/ is planned to become root dir of the neovim library.
Diffstat (limited to 'src/os/wstream.c')
| -rw-r--r-- | src/os/wstream.c | 117 |
1 files changed, 0 insertions, 117 deletions
diff --git a/src/os/wstream.c b/src/os/wstream.c deleted file mode 100644 index 0b289e80f5..0000000000 --- a/src/os/wstream.c +++ /dev/null @@ -1,117 +0,0 @@ -#include <stdint.h> -#include <stdbool.h> - -#include <uv.h> - -#include "os/uv_helpers.h" -#include "os/wstream.h" -#include "os/wstream_defs.h" -#include "vim.h" -#include "memory.h" - -struct wstream { - uv_stream_t *stream; - // Memory currently used by pending buffers - uint32_t curmem; - // Maximum memory used by this instance - uint32_t maxmem; - // Number of pending requests - uint32_t pending_reqs; - bool freed; -}; - -typedef struct { - WStream *wstream; - // Buffer containing data to be written - char *buffer; - // Size of the buffer - uint32_t length; - // If it's our responsibility to free the buffer - bool free; -} WriteData; - -static void write_cb(uv_write_t *req, int status); - -WStream * wstream_new(uint32_t maxmem) -{ - WStream *rv = xmalloc(sizeof(WStream)); - rv->maxmem = maxmem; - rv->stream = NULL; - rv->curmem = 0; - rv->pending_reqs = 0; - rv->freed = false; - - return rv; -} - -void wstream_free(WStream *wstream) -{ - if (!wstream->pending_reqs) { - free(wstream); - } else { - wstream->freed = true; - } -} - -void wstream_set_stream(WStream *wstream, uv_stream_t *stream) -{ - handle_set_wstream((uv_handle_t *)stream, wstream); - wstream->stream = stream; -} - -bool wstream_write(WStream *wstream, char *buffer, uint32_t length, bool free) -{ - WriteData *data; - uv_buf_t uvbuf; - uv_write_t *req; - - if (wstream->freed) { - // Don't accept write requests after the WStream instance was freed - return false; - } - - if (wstream->curmem + length > wstream->maxmem) { - return false; - } - - if (free) { - // We should only account for buffers that are ours to free - wstream->curmem += length; - } - - data = xmalloc(sizeof(WriteData)); - data->wstream = wstream; - data->buffer = buffer; - data->length = length; - data->free = free; - req = xmalloc(sizeof(uv_write_t)); - req->data = data; - uvbuf.base = buffer; - uvbuf.len = length; - wstream->pending_reqs++; - uv_write(req, wstream->stream, &uvbuf, 1, write_cb); - - return true; -} - -static void write_cb(uv_write_t *req, int status) -{ - WriteData *data = req->data; - - free(req); - - if (data->free) { - // Free the data written to the stream - free(data->buffer); - data->wstream->curmem -= data->length; - } - - data->wstream->pending_reqs--; - if (data->wstream->freed && data->wstream->pending_reqs == 0) { - // Last pending write, free the wstream; - free(data->wstream); - } - - free(data); -} - |