diff options
author | James McCoy <jamessan@jamessan.com> | 2016-12-14 15:23:19 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-14 15:23:19 -0500 |
commit | f089d299e33e9f5d1a52aa6d3b9c1ea43bb2e51c (patch) | |
tree | 916bc83e65537490cb8690c70742d1337894f5a0 /src | |
parent | 8c9cccbcb6bb5ee803f308916d5de1b949e0b13c (diff) | |
parent | 966be42a2be890f1c1398d5a45591b14ba162522 (diff) | |
download | rneovim-f089d299e33e9f5d1a52aa6d3b9c1ea43bb2e51c.tar.gz rneovim-f089d299e33e9f5d1a52aa6d3b9c1ea43bb2e51c.tar.bz2 rneovim-f089d299e33e9f5d1a52aa6d3b9c1ea43bb2e51c.zip |
Merge pull request #5770 from jamessan/shada-lint
shada: Move '%' handling from shada_write to its own function
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/shada.c | 89 |
1 files changed, 51 insertions, 38 deletions
diff --git a/src/nvim/shada.c b/src/nvim/shada.c index 34524580d7..867c697a9a 100644 --- a/src/nvim/shada.c +++ b/src/nvim/shada.c @@ -2318,6 +2318,56 @@ static inline ShaDaWriteResult shada_read_when_writing( return ret; } +/// Get list of buffers to write to the shada file +/// +/// @param[in] removable_bufs Buffers which are ignored +/// +/// @return ShadaEntry List of buffers to save, kSDItemBufferList entry. +static ShadaEntry shada_get_buflist(khash_t(bufset) *const removable_bufs) + FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT +{ + int max_bufs = get_shada_parameter('%'); + size_t buf_count = 0; +#define IGNORE_BUF(buf)\ + (buf->b_ffname == NULL || !buf->b_p_bl || bt_quickfix(buf) \ + || in_bufset(removable_bufs, buf)) // NOLINT(whitespace/indent) + FOR_ALL_BUFFERS(buf) { + if (!IGNORE_BUF(buf) && (max_bufs < 0 || buf_count < (size_t)max_bufs)) { + buf_count++; + } + } + + ShadaEntry buflist_entry = (ShadaEntry) { + .type = kSDItemBufferList, + .timestamp = os_time(), + .data = { + .buffer_list = { + .size = buf_count, + .buffers = xmalloc(buf_count + * sizeof(*buflist_entry.data.buffer_list.buffers)), + }, + }, + }; + size_t i = 0; + FOR_ALL_BUFFERS(buf) { + if (IGNORE_BUF(buf)) { + continue; + } + if (i >= buf_count) { + break; + } + buflist_entry.data.buffer_list.buffers[i] = (struct buffer_list_buffer) { + .pos = buf->b_last_cursor.mark, + .fname = (char *)buf->b_ffname, + .additional_data = buf->additional_data, + }; + i++; + } + +#undef IGNORE_BUF + return buflist_entry; +} + /// Write ShaDa file /// /// @param[in] sd_writer Structure containing file writer definition. @@ -2424,50 +2474,13 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer, // Write buffer list if (find_shada_parameter('%') != NULL) { - int max_bufs = get_shada_parameter('%'); - size_t buf_count = 0; -#define IGNORE_BUF(buf)\ - (buf->b_ffname == NULL || !buf->b_p_bl || bt_quickfix(buf) \ - || in_bufset(&removable_bufs, buf)) - FOR_ALL_BUFFERS(buf) { - if (!IGNORE_BUF(buf) && (max_bufs < 0 || buf_count < (size_t)max_bufs)) { - buf_count++; - } - } - - ShadaEntry buflist_entry = (ShadaEntry) { - .type = kSDItemBufferList, - .timestamp = os_time(), - .data = { - .buffer_list = { - .size = buf_count, - .buffers = xmalloc(buf_count - * sizeof(*buflist_entry.data.buffer_list.buffers)), - }, - }, - }; - size_t i = 0; - FOR_ALL_BUFFERS(buf) { - if (IGNORE_BUF(buf)) { - continue; - } - if (i >= buf_count) { - break; - } - buflist_entry.data.buffer_list.buffers[i] = (struct buffer_list_buffer) { - .pos = buf->b_last_cursor.mark, - .fname = (char *) buf->b_ffname, - .additional_data = buf->additional_data, - }; - i++; - } + ShadaEntry buflist_entry = shada_get_buflist(&removable_bufs); if (shada_pack_entry(packer, buflist_entry, 0) == kSDWriteFailed) { xfree(buflist_entry.data.buffer_list.buffers); ret = kSDWriteFailed; goto shada_write_exit; } xfree(buflist_entry.data.buffer_list.buffers); -#undef IGNORE_BUF } // Write some of the variables |