aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/quickfix.c
diff options
context:
space:
mode:
authorJames McCoy <jamessan@jamessan.com>2016-12-12 15:05:01 -0500
committerJames McCoy <jamessan@jamessan.com>2016-12-27 14:10:26 -0500
commit9df9cf4ecc4143ce23b5ab85b2ad1ef413a249bd (patch)
tree92c1e8db99c1339cd716241702d1d440362d398d /src/nvim/quickfix.c
parente2b081ed0c9aa43e891e5b33c1f3f077bc579356 (diff)
downloadrneovim-9df9cf4ecc4143ce23b5ab85b2ad1ef413a249bd.tar.gz
rneovim-9df9cf4ecc4143ce23b5ab85b2ad1ef413a249bd.tar.bz2
rneovim-9df9cf4ecc4143ce23b5ab85b2ad1ef413a249bd.zip
vim-patch:7.4.1841
Problem: The code to reallocate the buffer used for quickfix is repeated. Solution: Move the code to a function. (Yegappan Lakshmanan, closes vim/vim#831) https://github.com/vim/vim/commit/2b2b8ae5ab37b04584633c469265d85825166905
Diffstat (limited to 'src/nvim/quickfix.c')
-rw-r--r--src/nvim/quickfix.c52
1 files changed, 19 insertions, 33 deletions
diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c
index 1188ed7fd4..a68c4eca2e 100644
--- a/src/nvim/quickfix.c
+++ b/src/nvim/quickfix.c
@@ -171,6 +171,22 @@ qf_init (
// Maximum number of bytes allowed per line while reading an errorfile.
static const size_t LINE_MAXLEN = 4096;
+static char_u *qf_grow_linebuf(char_u **growbuf, size_t *growbufsiz,
+ size_t newsz, size_t *allocsz)
+{
+ // If the line exceeds LINE_MAXLEN exclude the last
+ // byte since it's not a NL character.
+ *allocsz = newsz > LINE_MAXLEN ? LINE_MAXLEN - 1 : newsz;
+ if (*growbuf == NULL) {
+ *growbuf = xmalloc(*allocsz + 1);
+ *growbufsiz = *allocsz;
+ } else if (*allocsz > *growbufsiz) {
+ *growbuf = xrealloc(*growbuf, *allocsz + 1);
+ *growbufsiz = *allocsz;
+ }
+ return *growbuf;
+}
+
/*
* Read the errorfile "efile" into memory, line by line, building the error
* list.
@@ -488,16 +504,7 @@ qf_init_ext (
len = STRLEN(p_str);
if (len > IOSIZE - 2) {
- // If the line exceeds LINE_MAXLEN exclude the last byte since it's
- // not a NL character.
- linelen = len > LINE_MAXLEN ? LINE_MAXLEN - 1 : len;
- if (growbuf == NULL) {
- growbuf = xmalloc(linelen + 1);
- } else if (linelen > growbufsiz) {
- growbuf = xrealloc(growbuf, linelen + 1);
- }
- growbufsiz = linelen;
- linebuf = growbuf;
+ linebuf = qf_grow_linebuf(&growbuf, &growbufsiz, len, &linelen);
} else {
linebuf = IObuff;
linelen = len;
@@ -520,18 +527,7 @@ qf_init_ext (
len = STRLEN(p_li->li_tv.vval.v_string);
if (len > IOSIZE - 2) {
- linelen = len;
- if (linelen > LINE_MAXLEN) {
- linelen = LINE_MAXLEN - 1;
- }
- if (growbuf == NULL) {
- growbuf = xmalloc(linelen + 1);
- growbufsiz = linelen;
- } else if (linelen > growbufsiz) {
- growbuf = xrealloc(growbuf, linelen + 1);
- growbufsiz = linelen;
- }
- linebuf = growbuf;
+ linebuf = qf_grow_linebuf(&growbuf, &growbufsiz, len, &linelen);
} else {
linebuf = IObuff;
linelen = len;
@@ -548,17 +544,7 @@ qf_init_ext (
p_buf = ml_get_buf(buf, buflnum++, false);
linelen = STRLEN(p_buf);
if (linelen > IOSIZE - 2) {
- if (growbuf == NULL) {
- growbuf = xmalloc(linelen + 1);
- growbufsiz = linelen;
- } else if (linelen > growbufsiz) {
- if (linelen > LINE_MAXLEN) {
- linelen = LINE_MAXLEN - 1;
- }
- growbuf = xrealloc(growbuf, linelen + 1);
- growbufsiz = linelen;
- }
- linebuf = growbuf;
+ linebuf = qf_grow_linebuf(&growbuf, &growbufsiz, len, &linelen);
} else {
linebuf = IObuff;
}