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 #831)
This commit is contained in:
Bram Moolenaar
2016-05-24 19:59:51 +02:00
parent a570244531
commit 2b2b8ae5ab
3 changed files with 50 additions and 50 deletions

View File

@ -179,6 +179,31 @@ qf_init(
*/ */
#define LINE_MAXLEN 4096 #define LINE_MAXLEN 4096
static char_u *
qf_grow_linebuf(char_u **growbuf, int *growbufsiz, int newsz, int *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 = alloc(*allocsz + 1);
if (*growbuf == NULL)
return NULL;
*growbufsiz = *allocsz;
}
else if (*allocsz > *growbufsiz)
{
*growbuf = vim_realloc(*growbuf, *allocsz + 1);
if (*growbuf == NULL)
return NULL;
*growbufsiz = *allocsz;
}
return *growbuf;
}
/* /*
* Read the errorfile "efile" into memory, line by line, building the error * Read the errorfile "efile" into memory, line by line, building the error
* list. * list.
@ -538,24 +563,10 @@ qf_init_ext(
if (len > IOSIZE - 2) if (len > IOSIZE - 2)
{ {
/* linebuf = qf_grow_linebuf(&growbuf, &growbufsiz, len,
* If the line exceeds LINE_MAXLEN exclude the last &linelen);
* byte since it's not a NL character. if (linebuf == NULL)
*/ goto qf_init_end;
linelen = len > LINE_MAXLEN ? LINE_MAXLEN - 1 : len;
if (growbuf == NULL)
{
growbuf = alloc(linelen + 1);
growbufsiz = linelen;
}
else if (linelen > growbufsiz)
{
growbuf = vim_realloc(growbuf, linelen + 1);
if (growbuf == NULL)
goto qf_init_end;
growbufsiz = linelen;
}
linebuf = growbuf;
} }
else else
{ {
@ -584,22 +595,10 @@ qf_init_ext(
len = (int)STRLEN(p_li->li_tv.vval.v_string); len = (int)STRLEN(p_li->li_tv.vval.v_string);
if (len > IOSIZE - 2) if (len > IOSIZE - 2)
{ {
linelen = len; linebuf = qf_grow_linebuf(&growbuf, &growbufsiz, len,
if (linelen > LINE_MAXLEN) &linelen);
linelen = LINE_MAXLEN - 1; if (linebuf == NULL)
if (growbuf == NULL) goto qf_init_end;
{
growbuf = alloc(linelen + 1);
growbufsiz = linelen;
}
else if (linelen > growbufsiz)
{
if ((growbuf = vim_realloc(growbuf,
linelen + 1)) == NULL)
goto qf_init_end;
growbufsiz = linelen;
}
linebuf = growbuf;
} }
else else
{ {
@ -621,20 +620,10 @@ qf_init_ext(
linelen = (int)STRLEN(p_buf); linelen = (int)STRLEN(p_buf);
if (linelen > IOSIZE - 2) if (linelen > IOSIZE - 2)
{ {
if (growbuf == NULL) linebuf = qf_grow_linebuf(&growbuf, &growbufsiz, len,
{ &linelen);
growbuf = alloc(linelen + 1); if (linebuf == NULL)
growbufsiz = linelen; goto qf_init_end;
}
else if (linelen > growbufsiz)
{
if (linelen > LINE_MAXLEN)
linelen = LINE_MAXLEN - 1;
if ((growbuf = vim_realloc(growbuf, linelen + 1)) == NULL)
goto qf_init_end;
growbufsiz = linelen;
}
linebuf = growbuf;
} }
else else
linebuf = IObuff; linebuf = IObuff;

View File

@ -700,14 +700,14 @@ endfunc
" Tests for the setqflist() and setloclist() functions " Tests for the setqflist() and setloclist() functions
function SetXlistTests(cchar, bnum) function SetXlistTests(cchar, bnum)
let Xwindow = a:cchar . 'window'
let Xnext = a:cchar . 'next'
if a:cchar == 'c' if a:cchar == 'c'
let Xsetlist = function('setqflist') let Xsetlist = function('setqflist')
let Xgetlist = function('getqflist') let Xgetlist = function('getqflist')
let Xnext = 'cnext'
else else
let Xsetlist = function('setloclist', [0]) let Xsetlist = function('setloclist', [0])
let Xgetlist = function('getloclist', [0]) let Xgetlist = function('getloclist', [0])
let Xnext = 'lnext'
endif endif
call Xsetlist([{'bufnr': a:bnum, 'lnum': 1}, call Xsetlist([{'bufnr': a:bnum, 'lnum': 1},
@ -723,6 +723,15 @@ function SetXlistTests(cchar, bnum)
exe Xnext exe Xnext
call assert_equal(3, line('.')) call assert_equal(3, line('.'))
" Appending entries to the list should not change the cursor position
" in the quickfix window
exe Xwindow
1
call Xsetlist([{'bufnr': a:bnum, 'lnum': 4},
\ {'bufnr': a:bnum, 'lnum': 5}], 'a')
call assert_equal(1, line('.'))
close
call Xsetlist([{'bufnr': a:bnum, 'lnum': 3}, call Xsetlist([{'bufnr': a:bnum, 'lnum': 3},
\ {'bufnr': a:bnum, 'lnum': 4}, \ {'bufnr': a:bnum, 'lnum': 4},
\ {'bufnr': a:bnum, 'lnum': 5}], 'r') \ {'bufnr': a:bnum, 'lnum': 5}], 'r')

View File

@ -753,6 +753,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1841,
/**/ /**/
1840, 1840,
/**/ /**/