diff options
author | James McCoy <jamessan@jamessan.com> | 2016-12-12 15:05:01 -0500 |
---|---|---|
committer | James McCoy <jamessan@jamessan.com> | 2016-12-27 14:10:26 -0500 |
commit | 9df9cf4ecc4143ce23b5ab85b2ad1ef413a249bd (patch) | |
tree | 92c1e8db99c1339cd716241702d1d440362d398d /src/nvim/quickfix.c | |
parent | e2b081ed0c9aa43e891e5b33c1f3f077bc579356 (diff) | |
download | rneovim-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.c | 52 |
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; } |