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:
@ -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;
|
||||||
|
|||||||
@ -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')
|
||||||
|
|||||||
@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user