diff options
author | Thiago de Arruda <tpadilha84@gmail.com> | 2014-10-20 07:31:32 -0300 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-10-20 07:31:32 -0300 |
commit | 77e918bc1f0067e0d15de8db13bfbc64bf2cf82b (patch) | |
tree | 72706d435b971ace7531e85a361d18ef5ce7d695 | |
parent | fb34028c1e2274d668eb7d7912ada2b163898520 (diff) | |
parent | 72ae4e8a9331f71a2d59e8f793f0d77dbc1f51de (diff) | |
download | rneovim-77e918bc1f0067e0d15de8db13bfbc64bf2cf82b.tar.gz rneovim-77e918bc1f0067e0d15de8db13bfbc64bf2cf82b.tar.bz2 rneovim-77e918bc1f0067e0d15de8db13bfbc64bf2cf82b.zip |
Merge PR #1306 'RBuffer fixes'
-rw-r--r-- | src/nvim/os/input.c | 6 | ||||
-rw-r--r-- | src/nvim/os/rstream.c | 25 |
2 files changed, 20 insertions, 11 deletions
diff --git a/src/nvim/os/input.c b/src/nvim/os/input.c index 71b590ceaa..a18d735ce6 100644 --- a/src/nvim/os/input.c +++ b/src/nvim/os/input.c @@ -152,7 +152,7 @@ String input_buffer_save(void) { size_t inbuf_size = rbuffer_pending(input_buffer); String rv = { - .data = xmemdup(rbuffer_data(input_buffer), inbuf_size), + .data = xmemdup(rbuffer_read_ptr(input_buffer), inbuf_size), .size = inbuf_size }; rbuffer_consumed(input_buffer, inbuf_size); @@ -242,7 +242,7 @@ static void convert_input(void) bool convert = input_conv.vc_type != CONV_NONE; // Set unconverted data/length - char *data = rbuffer_data(read_buffer); + char *data = rbuffer_read_ptr(read_buffer); size_t data_length = rbuffer_pending(read_buffer); size_t converted_length = data_length; @@ -270,7 +270,7 @@ static void convert_input(void) return; } - char *inbuf = rbuffer_data(input_buffer); + char *inbuf = rbuffer_read_ptr(input_buffer); size_t count = rbuffer_pending(input_buffer), consume_count = 0; for (int i = count - 1; i >= 0; i--) { diff --git a/src/nvim/os/rstream.c b/src/nvim/os/rstream.c index 3e5a99acd1..8f1c30de50 100644 --- a/src/nvim/os/rstream.c +++ b/src/nvim/os/rstream.c @@ -47,14 +47,16 @@ RBuffer *rbuffer_new(size_t capacity) rv->data = xmalloc(capacity); rv->capacity = capacity; rv->rpos = rv->wpos = 0; + rv->rstream = NULL; return rv; } /// Advances `rbuffer` read pointers to consume data. If the associated /// RStream had stopped because the buffer was full, this will restart it. /// -/// This is called automatically by rbuffer_read, but when using `rbuffer_data` -/// directly, this needs to called after the data was consumed. +/// This is called automatically by rbuffer_read, but when using +/// `rbuffer_read_ptr` directly, this needs to called after the data was +/// consumed. void rbuffer_consumed(RBuffer *rbuffer, size_t count) { rbuffer->rpos += count; @@ -104,7 +106,7 @@ size_t rbuffer_read(RBuffer *rbuffer, char *buffer, size_t count) } if (read_count > 0) { - memcpy(buffer, rbuffer_data(rbuffer), read_count); + memcpy(buffer, rbuffer_read_ptr(rbuffer), read_count); rbuffer_consumed(rbuffer, read_count); } @@ -126,7 +128,7 @@ size_t rbuffer_write(RBuffer *rbuffer, char *buffer, size_t count) } if (write_count > 0) { - memcpy(rbuffer_data(rbuffer), buffer, write_count); + memcpy(rbuffer_write_ptr(rbuffer), buffer, write_count); rbuffer_produced(rbuffer, write_count); } @@ -135,11 +137,18 @@ size_t rbuffer_write(RBuffer *rbuffer, char *buffer, size_t count) /// Returns a pointer to a raw buffer containing the first byte available for /// reading. -char *rbuffer_data(RBuffer *rbuffer) +char *rbuffer_read_ptr(RBuffer *rbuffer) { return rbuffer->data + rbuffer->rpos; } +/// Returns a pointer to a raw buffer containing the first byte available for +/// write. +char *rbuffer_write_ptr(RBuffer *rbuffer) +{ + return rbuffer->data + rbuffer->wpos; +} + /// Returns the number of bytes ready for consumption in `rbuffer` /// /// @param rbuffer The `RBuffer` instance @@ -336,7 +345,7 @@ static void alloc_cb(uv_handle_t *handle, size_t suggested, uv_buf_t *buf) RStream *rstream = handle_get_rstream(handle); buf->len = rbuffer_available(rstream->buffer); - buf->base = rbuffer_data(rstream->buffer); + buf->base = rbuffer_write_ptr(rstream->buffer); } // Callback invoked by libuv after it copies the data into the buffer provided @@ -374,8 +383,8 @@ static void fread_idle_cb(uv_idle_t *handle) uv_fs_t req; RStream *rstream = handle_get_rstream((uv_handle_t *)handle); - rstream->uvbuf.len = rstream->buffer->capacity - rstream->buffer->wpos; - rstream->uvbuf.base = rstream->buffer->data + rstream->buffer->wpos; + rstream->uvbuf.len = rbuffer_available(rstream->buffer); + rstream->uvbuf.base = rbuffer_write_ptr(rstream->buffer); // the offset argument to uv_fs_read is int64_t, could someone really try // to read more than 9 quintillion (9e18) bytes? |