mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	vim-patch:9.1.0168: too many STRLEN() calls (#27823)
Problem:  too many STRLEN() calls
Solution: Make use of ml_get_len() calls instead
          (John Marriott)
closes: vim/vim#14123
bfcc895482
Co-authored-by: John Marriott <basilisk@internode.on.net>
			
			
This commit is contained in:
		@@ -714,7 +714,7 @@ void ins_char_bytes(char *buf, size_t charlen)
 | 
				
			|||||||
  size_t col = (size_t)curwin->w_cursor.col;
 | 
					  size_t col = (size_t)curwin->w_cursor.col;
 | 
				
			||||||
  linenr_T lnum = curwin->w_cursor.lnum;
 | 
					  linenr_T lnum = curwin->w_cursor.lnum;
 | 
				
			||||||
  char *oldp = ml_get(lnum);
 | 
					  char *oldp = ml_get(lnum);
 | 
				
			||||||
  size_t linelen = strlen(oldp) + 1;  // length of old line including NUL
 | 
					  size_t linelen = (size_t)ml_get_len(lnum) + 1;  // length of old line including NUL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // The lengths default to the values for when not replacing.
 | 
					  // The lengths default to the values for when not replacing.
 | 
				
			||||||
  size_t oldlen = 0;        // nr of bytes inserted
 | 
					  size_t oldlen = 0;        // nr of bytes inserted
 | 
				
			||||||
@@ -821,7 +821,7 @@ void ins_str(char *s)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  colnr_T col = curwin->w_cursor.col;
 | 
					  colnr_T col = curwin->w_cursor.col;
 | 
				
			||||||
  char *oldp = ml_get(lnum);
 | 
					  char *oldp = ml_get(lnum);
 | 
				
			||||||
  int oldlen = (int)strlen(oldp);
 | 
					  int oldlen = ml_get_len(lnum);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  char *newp = xmalloc((size_t)oldlen + (size_t)newlen + 1);
 | 
					  char *newp = xmalloc((size_t)oldlen + (size_t)newlen + 1);
 | 
				
			||||||
  if (col > 0) {
 | 
					  if (col > 0) {
 | 
				
			||||||
@@ -879,7 +879,7 @@ int del_bytes(colnr_T count, bool fixpos_arg, bool use_delcombine)
 | 
				
			|||||||
  colnr_T col = curwin->w_cursor.col;
 | 
					  colnr_T col = curwin->w_cursor.col;
 | 
				
			||||||
  bool fixpos = fixpos_arg;
 | 
					  bool fixpos = fixpos_arg;
 | 
				
			||||||
  char *oldp = ml_get(lnum);
 | 
					  char *oldp = ml_get(lnum);
 | 
				
			||||||
  colnr_T oldlen = (colnr_T)strlen(oldp);
 | 
					  colnr_T oldlen = ml_get_len(lnum);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Can't do anything when the cursor is on the NUL after the line.
 | 
					  // Can't do anything when the cursor is on the NUL after the line.
 | 
				
			||||||
  if (col >= oldlen) {
 | 
					  if (col >= oldlen) {
 | 
				
			||||||
@@ -1117,7 +1117,7 @@ bool open_line(int dir, int flags, int second_line_indent, bool *did_do_comment)
 | 
				
			|||||||
  colnr_T mincol = curwin->w_cursor.col + 1;
 | 
					  colnr_T mincol = curwin->w_cursor.col + 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // make a copy of the current line so we can mess with it
 | 
					  // make a copy of the current line so we can mess with it
 | 
				
			||||||
  char *saved_line = xstrdup(get_cursor_line_ptr());
 | 
					  char *saved_line = xstrnsave(get_cursor_line_ptr(), (size_t)get_cursor_line_len());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (State & VREPLACE_FLAG) {
 | 
					  if (State & VREPLACE_FLAG) {
 | 
				
			||||||
    // With MODE_VREPLACE we make a copy of the next line, which we will be
 | 
					    // With MODE_VREPLACE we make a copy of the next line, which we will be
 | 
				
			||||||
@@ -1128,7 +1128,8 @@ bool open_line(int dir, int flags, int second_line_indent, bool *did_do_comment)
 | 
				
			|||||||
    // the line, replacing what was there before and pushing the right
 | 
					    // the line, replacing what was there before and pushing the right
 | 
				
			||||||
    // stuff onto the replace stack.  -- webb.
 | 
					    // stuff onto the replace stack.  -- webb.
 | 
				
			||||||
    if (curwin->w_cursor.lnum < orig_line_count) {
 | 
					    if (curwin->w_cursor.lnum < orig_line_count) {
 | 
				
			||||||
      next_line = xstrdup(ml_get(curwin->w_cursor.lnum + 1));
 | 
					      next_line = xstrnsave(ml_get(curwin->w_cursor.lnum + 1),
 | 
				
			||||||
 | 
					                            (size_t)ml_get_len(curwin->w_cursor.lnum + 1));
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      next_line = xstrdup("");
 | 
					      next_line = xstrdup("");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -1908,7 +1909,7 @@ bool open_line(int dir, int flags, int second_line_indent, bool *did_do_comment)
 | 
				
			|||||||
  // stuff onto the replace stack (via ins_char()).
 | 
					  // stuff onto the replace stack (via ins_char()).
 | 
				
			||||||
  if (State & VREPLACE_FLAG) {
 | 
					  if (State & VREPLACE_FLAG) {
 | 
				
			||||||
    // Put new line in p_extra
 | 
					    // Put new line in p_extra
 | 
				
			||||||
    p_extra = xstrdup(get_cursor_line_ptr());
 | 
					    p_extra = xstrnsave(get_cursor_line_ptr(), (size_t)get_cursor_line_len());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Put back original line
 | 
					    // Put back original line
 | 
				
			||||||
    ml_replace(curwin->w_cursor.lnum, next_line, false);
 | 
					    ml_replace(curwin->w_cursor.lnum, next_line, false);
 | 
				
			||||||
@@ -1939,7 +1940,7 @@ void truncate_line(int fixpos)
 | 
				
			|||||||
  colnr_T col = curwin->w_cursor.col;
 | 
					  colnr_T col = curwin->w_cursor.col;
 | 
				
			||||||
  char *old_line = ml_get(lnum);
 | 
					  char *old_line = ml_get(lnum);
 | 
				
			||||||
  char *newp = col == 0 ? xstrdup("") : xstrnsave(old_line, (size_t)col);
 | 
					  char *newp = col == 0 ? xstrdup("") : xstrnsave(old_line, (size_t)col);
 | 
				
			||||||
  int deleted = (int)strlen(old_line) - col;
 | 
					  int deleted = ml_get_len(lnum) - col;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ml_replace(lnum, newp, false);
 | 
					  ml_replace(lnum, newp, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4331,7 +4331,7 @@ static bool ins_tab(void)
 | 
				
			|||||||
    if (State & VREPLACE_FLAG) {
 | 
					    if (State & VREPLACE_FLAG) {
 | 
				
			||||||
      pos = curwin->w_cursor;
 | 
					      pos = curwin->w_cursor;
 | 
				
			||||||
      cursor = &pos;
 | 
					      cursor = &pos;
 | 
				
			||||||
      saved_line = xstrdup(get_cursor_line_ptr());
 | 
					      saved_line = xstrnsave(get_cursor_line_ptr(), (size_t)get_cursor_line_len());
 | 
				
			||||||
      ptr = saved_line + pos.col;
 | 
					      ptr = saved_line + pos.col;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      ptr = get_cursor_pos_ptr();
 | 
					      ptr = get_cursor_pos_ptr();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6699,7 +6699,7 @@ pos_T *var2fpos(const typval_T *const tv, const bool dollar_lnum, int *const ret
 | 
				
			|||||||
    if (charcol) {
 | 
					    if (charcol) {
 | 
				
			||||||
      len = mb_charlen(ml_get(pos.lnum));
 | 
					      len = mb_charlen(ml_get(pos.lnum));
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      len = (int)strlen(ml_get(pos.lnum));
 | 
					      len = ml_get_len(pos.lnum);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // We accept "$" for the column number: last column.
 | 
					    // We accept "$" for the column number: last column.
 | 
				
			||||||
@@ -6789,7 +6789,7 @@ pos_T *var2fpos(const typval_T *const tv, const bool dollar_lnum, int *const ret
 | 
				
			|||||||
      if (charcol) {
 | 
					      if (charcol) {
 | 
				
			||||||
        pos.col = (colnr_T)mb_charlen(get_cursor_line_ptr());
 | 
					        pos.col = (colnr_T)mb_charlen(get_cursor_line_ptr());
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        pos.col = (colnr_T)strlen(get_cursor_line_ptr());
 | 
					        pos.col = get_cursor_line_len();
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return &pos;
 | 
					    return &pos;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -738,7 +738,7 @@ static void get_col(typval_T *argvars, typval_T *rettv, bool charcol)
 | 
				
			|||||||
    if (fp->col == MAXCOL) {
 | 
					    if (fp->col == MAXCOL) {
 | 
				
			||||||
      // '> can be MAXCOL, get the length of the line then
 | 
					      // '> can be MAXCOL, get the length of the line then
 | 
				
			||||||
      if (fp->lnum <= curbuf->b_ml.ml_line_count) {
 | 
					      if (fp->lnum <= curbuf->b_ml.ml_line_count) {
 | 
				
			||||||
        col = (colnr_T)strlen(ml_get(fp->lnum)) + 1;
 | 
					        col = ml_get_len(fp->lnum) + 1;
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        col = MAXCOL;
 | 
					        col = MAXCOL;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@@ -8688,7 +8688,7 @@ static void f_synID(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  int id = 0;
 | 
					  int id = 0;
 | 
				
			||||||
  if (!transerr && lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count
 | 
					  if (!transerr && lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count
 | 
				
			||||||
      && col >= 0 && (size_t)col < strlen(ml_get(lnum))) {
 | 
					      && col >= 0 && col < ml_get_len(lnum)) {
 | 
				
			||||||
    id = syn_get_id(curwin, lnum, col, trans, NULL, false);
 | 
					    id = syn_get_id(curwin, lnum, col, trans, NULL, false);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -8811,8 +8811,8 @@ static void f_synconcealed(typval_T *argvars, typval_T *rettv, EvalFuncData fptr
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  CLEAR_FIELD(str);
 | 
					  CLEAR_FIELD(str);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count && col >= 0
 | 
					  if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count
 | 
				
			||||||
      && (size_t)col <= strlen(ml_get(lnum)) && curwin->w_p_cole > 0) {
 | 
					      && col >= 0 && col <= ml_get_len(lnum) && curwin->w_p_cole > 0) {
 | 
				
			||||||
    syn_get_id(curwin, lnum, col, false, NULL, false);
 | 
					    syn_get_id(curwin, lnum, col, false, NULL, false);
 | 
				
			||||||
    syntax_flags = get_syntax_info(&matchid);
 | 
					    syntax_flags = get_syntax_info(&matchid);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -8845,10 +8845,8 @@ static void f_synstack(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
 | 
				
			|||||||
  const linenr_T lnum = tv_get_lnum(argvars);
 | 
					  const linenr_T lnum = tv_get_lnum(argvars);
 | 
				
			||||||
  const colnr_T col = (colnr_T)tv_get_number(&argvars[1]) - 1;
 | 
					  const colnr_T col = (colnr_T)tv_get_number(&argvars[1]) - 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (lnum >= 1
 | 
					  if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count
 | 
				
			||||||
      && lnum <= curbuf->b_ml.ml_line_count
 | 
					      && col >= 0 && col <= ml_get_len(lnum)) {
 | 
				
			||||||
      && col >= 0
 | 
					 | 
				
			||||||
      && (size_t)col <= strlen(ml_get(lnum))) {
 | 
					 | 
				
			||||||
    tv_list_alloc_ret(rettv, kListLenMayKnow);
 | 
					    tv_list_alloc_ret(rettv, kListLenMayKnow);
 | 
				
			||||||
    syn_get_id(curwin, lnum, col, false, NULL, true);
 | 
					    syn_get_id(curwin, lnum, col, false, NULL, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -9218,9 +9216,9 @@ static void f_virtcol(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
 | 
				
			|||||||
    if (fp->col < 0) {
 | 
					    if (fp->col < 0) {
 | 
				
			||||||
      fp->col = 0;
 | 
					      fp->col = 0;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      const size_t len = strlen(ml_get(fp->lnum));
 | 
					      const colnr_T len = ml_get_len(fp->lnum);
 | 
				
			||||||
      if (fp->col > (colnr_T)len) {
 | 
					      if (fp->col > len) {
 | 
				
			||||||
        fp->col = (colnr_T)len;
 | 
					        fp->col = len;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    getvvcol(curwin, fp, &vcol_start, NULL, &vcol_end);
 | 
					    getvvcol(curwin, fp, &vcol_start, NULL, &vcol_end);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user