patch 9.0.0181: textprop test with line2byte() fails on MS-Windows
Problem: Textprop test with line2byte() fails on MS-Windows. Solution: Fix updating chuncks in ml_delete_int().
This commit is contained in:
@ -3313,7 +3313,7 @@ ml_append_int(
|
||||
(long)text_len
|
||||
# else
|
||||
(long)len
|
||||
#endif
|
||||
# endif
|
||||
, ML_CHNK_ADDLINE);
|
||||
#endif
|
||||
|
||||
@ -3667,7 +3667,7 @@ ml_delete_int(buf_T *buf, linenr_T lnum, int flags)
|
||||
int ret = FAIL;
|
||||
#ifdef FEAT_PROP_POPUP
|
||||
char_u *textprop_save = NULL;
|
||||
int textprop_save_len = 0;
|
||||
long textprop_len = 0;
|
||||
#endif
|
||||
|
||||
if (lowest_marked && lowest_marked > lnum)
|
||||
@ -3723,18 +3723,17 @@ ml_delete_int(buf_T *buf, linenr_T lnum, int flags)
|
||||
netbeans_removed(buf, lnum, 0, line_size);
|
||||
#endif
|
||||
#ifdef FEAT_PROP_POPUP
|
||||
// If there are text properties, make a copy, so that we can update
|
||||
// properties in preceding and following lines.
|
||||
if (buf->b_has_textprop && !(flags & (ML_DEL_UNDO | ML_DEL_NOPROP)))
|
||||
// If there are text properties compute their byte length.
|
||||
// if needed make a copy, so that we can update properties in preceding and
|
||||
// following lines.
|
||||
if (buf->b_has_textprop)
|
||||
{
|
||||
size_t textlen = STRLEN((char_u *)dp + line_start) + 1;
|
||||
|
||||
if ((long)textlen < line_size)
|
||||
{
|
||||
textprop_save_len = line_size - (int)textlen;
|
||||
textprop_len = line_size - (long)textlen;
|
||||
if (!(flags & (ML_DEL_UNDO | ML_DEL_NOPROP)) && textprop_len > 0)
|
||||
textprop_save = vim_memsave((char_u *)dp + line_start + textlen,
|
||||
textprop_save_len);
|
||||
}
|
||||
textprop_len);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -3820,9 +3819,9 @@ ml_delete_int(buf_T *buf, linenr_T lnum, int flags)
|
||||
#ifdef FEAT_BYTEOFF
|
||||
ml_updatechunk(buf, lnum, line_size
|
||||
# ifdef FEAT_PROP_POPUP
|
||||
- textprop_save_len
|
||||
- textprop_len
|
||||
# endif
|
||||
, ML_CHNK_DELLINE);
|
||||
, ML_CHNK_DELLINE);
|
||||
#endif
|
||||
ret = OK;
|
||||
|
||||
@ -3833,10 +3832,10 @@ theend:
|
||||
// Adjust text properties in the line above and below.
|
||||
if (lnum > 1)
|
||||
adjust_text_props_for_delete(buf, lnum - 1, textprop_save,
|
||||
textprop_save_len, TRUE);
|
||||
(int)textprop_len, TRUE);
|
||||
if (lnum <= buf->b_ml.ml_line_count)
|
||||
adjust_text_props_for_delete(buf, lnum, textprop_save,
|
||||
textprop_save_len, FALSE);
|
||||
(int)textprop_len, FALSE);
|
||||
}
|
||||
vim_free(textprop_save);
|
||||
#endif
|
||||
@ -5684,7 +5683,8 @@ ml_updatechunk(
|
||||
// the text prop info would also be counted. Go over the
|
||||
// lines.
|
||||
for (i = end_idx; i < idx; ++i)
|
||||
size += (int)STRLEN((char_u *)dp + (dp->db_index[i] & DB_INDEX_MASK)) + 1;
|
||||
size += (int)STRLEN((char_u *)dp
|
||||
+ (dp->db_index[i] & DB_INDEX_MASK)) + 1;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
@ -5693,7 +5693,8 @@ ml_updatechunk(
|
||||
text_end = dp->db_txt_end;
|
||||
else
|
||||
text_end = ((dp->db_index[idx - 1]) & DB_INDEX_MASK);
|
||||
size += text_end - ((dp->db_index[end_idx]) & DB_INDEX_MASK);
|
||||
size += text_end
|
||||
- ((dp->db_index[end_idx]) & DB_INDEX_MASK);
|
||||
}
|
||||
}
|
||||
buf->b_ml.ml_chunksize[curix].mlcs_numlines = linecnt;
|
||||
@ -5749,9 +5750,9 @@ ml_updatechunk(
|
||||
{
|
||||
curchnk->mlcs_numlines--;
|
||||
ml_upd_lastbuf = NULL; // Force recalc of curix & curline
|
||||
if (curix < (buf->b_ml.ml_usedchunks - 1)
|
||||
&& (curchnk->mlcs_numlines + curchnk[1].mlcs_numlines)
|
||||
<= MLCS_MINL)
|
||||
if (curix < buf->b_ml.ml_usedchunks - 1
|
||||
&& curchnk->mlcs_numlines + curchnk[1].mlcs_numlines
|
||||
<= MLCS_MINL)
|
||||
{
|
||||
curix++;
|
||||
curchnk = buf->b_ml.ml_chunksize + curix;
|
||||
@ -5764,8 +5765,8 @@ ml_updatechunk(
|
||||
return;
|
||||
}
|
||||
else if (curix == 0 || (curchnk->mlcs_numlines > 10
|
||||
&& (curchnk->mlcs_numlines + curchnk[-1].mlcs_numlines)
|
||||
> MLCS_MINL))
|
||||
&& curchnk->mlcs_numlines + curchnk[-1].mlcs_numlines
|
||||
> MLCS_MINL))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -5775,12 +5776,10 @@ ml_updatechunk(
|
||||
curchnk[-1].mlcs_totalsize += curchnk->mlcs_totalsize;
|
||||
buf->b_ml.ml_usedchunks--;
|
||||
if (curix < buf->b_ml.ml_usedchunks)
|
||||
{
|
||||
mch_memmove(buf->b_ml.ml_chunksize + curix,
|
||||
buf->b_ml.ml_chunksize + curix + 1,
|
||||
(buf->b_ml.ml_usedchunks - curix) *
|
||||
sizeof(chunksize_T));
|
||||
}
|
||||
return;
|
||||
}
|
||||
ml_upd_lastbuf = buf;
|
||||
|
||||
Reference in New Issue
Block a user