aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/CMakeLists.txt1
-rw-r--r--src/nvim/edit.c20
-rw-r--r--src/nvim/eval.c67
-rw-r--r--src/nvim/ex_docmd.c98
-rw-r--r--src/nvim/file_search.c14
-rw-r--r--src/nvim/globals.h2
-rw-r--r--src/nvim/if_cscope.c8
-rw-r--r--src/nvim/misc2.c4
-rw-r--r--src/nvim/normal.c162
-rw-r--r--src/nvim/ops.c7
-rw-r--r--src/nvim/os/env.c13
-rw-r--r--src/nvim/path.c24
-rw-r--r--src/nvim/screen.c10
-rw-r--r--src/nvim/search.c14
-rw-r--r--src/nvim/spell.c51
-rw-r--r--src/nvim/strings.c4
-rw-r--r--src/nvim/window.c21
17 files changed, 271 insertions, 249 deletions
diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt
index dc44c9135d..31612c7f47 100644
--- a/src/nvim/CMakeLists.txt
+++ b/src/nvim/CMakeLists.txt
@@ -60,7 +60,6 @@ set(CONV_SOURCES
menu.c
message.c
misc1.c
- normal.c
ops.c
path.c
quickfix.c
diff --git a/src/nvim/edit.c b/src/nvim/edit.c
index d19f10f47f..413df3c036 100644
--- a/src/nvim/edit.c
+++ b/src/nvim/edit.c
@@ -192,7 +192,7 @@ static int compl_opt_refresh_always = FALSE;
#define BACKSPACE_WORD_NOT_SPACE 3
#define BACKSPACE_LINE 4
-static int spell_bad_len = 0; /* length of located bad word */
+static size_t spell_bad_len = 0; /* length of located bad word */
static colnr_T Insstart_textlen; /* length of line when insert started */
static colnr_T Insstart_blank_vcol; /* vcol for first inserted blank */
@@ -3539,11 +3539,12 @@ static int ins_compl_get_exp(pos_T *ini)
case CTRL_X_PATH_PATTERNS:
case CTRL_X_PATH_DEFINES:
find_pattern_in_path(compl_pattern, compl_direction,
- (int)STRLEN(compl_pattern), FALSE, FALSE,
- (type == CTRL_X_PATH_DEFINES
- && !(compl_cont_status & CONT_SOL))
- ? FIND_DEFINE : FIND_ANY, 1L, ACTION_EXPAND,
- (linenr_T)1, (linenr_T)MAXLNUM);
+ STRLEN(compl_pattern), FALSE, FALSE,
+ ((type == CTRL_X_PATH_DEFINES
+ && !(compl_cont_status & CONT_SOL))
+ ? FIND_DEFINE
+ : FIND_ANY),
+ 1L, ACTION_EXPAND, 1, MAXLNUM);
break;
case CTRL_X_DICTIONARY:
@@ -4401,8 +4402,10 @@ static int ins_complete(int c)
compl_length = curs_col - compl_col;
compl_pattern = vim_strnsave(line + compl_col, compl_length);
} else if (ctrl_x_mode == CTRL_X_SPELL) {
- if (spell_bad_len > 0)
- compl_col = curs_col - spell_bad_len;
+ if (spell_bad_len > 0) {
+ assert(spell_bad_len <= INT_MAX);
+ compl_col = curs_col - (int)spell_bad_len;
+ }
else
compl_col = spell_word_start(startcol);
if (compl_col >= (colnr_T)startcol) {
@@ -5590,7 +5593,6 @@ static void check_spell_redraw(void)
static void spell_back_to_badword(void)
{
pos_T tpos = curwin->w_cursor;
-
spell_bad_len = spell_move_to(curwin, BACKWARD, TRUE, TRUE, NULL);
if (curwin->w_cursor.col != tpos.col)
start_arrow(&tpos);
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 7d9dc9ab51..3a8974bca1 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -8262,7 +8262,7 @@ static void f_exp(typval_T *argvars, typval_T *rettv)
static void f_expand(typval_T *argvars, typval_T *rettv)
{
char_u *s;
- int len;
+ size_t len;
char_u *errormsg;
int options = WILD_SILENT|WILD_USE_NL|WILD_LIST_NOTFOUND;
expand_T xpc;
@@ -8531,12 +8531,12 @@ static void findfilendir(typval_T *argvars, typval_T *rettv, int find_what)
if (rettv->v_type == VAR_STRING || rettv->v_type == VAR_LIST)
xfree(fresult);
fresult = find_file_in_path_option(first ? fname : NULL,
- first ? (int)STRLEN(fname) : 0,
- 0, first, path,
- find_what,
- curbuf->b_ffname,
- find_what == FINDFILE_DIR
- ? (char_u *)"" : curbuf->b_p_sua);
+ first ? STRLEN(fname) : 0,
+ 0, first, path,
+ find_what, curbuf->b_ffname,
+ (find_what == FINDFILE_DIR
+ ? (char_u *)""
+ : curbuf->b_p_sua));
first = FALSE;
if (fresult != NULL && rettv->v_type == VAR_LIST)
@@ -8773,8 +8773,8 @@ static void f_fnamemodify(typval_T *argvars, typval_T *rettv)
{
char_u *fname;
char_u *mods;
- int usedlen = 0;
- int len;
+ size_t usedlen = 0;
+ size_t len;
char_u *fbuf = NULL;
char_u buf[NUMBUFLEN];
@@ -8783,7 +8783,7 @@ static void f_fnamemodify(typval_T *argvars, typval_T *rettv)
if (fname == NULL || mods == NULL)
fname = NULL;
else {
- len = (int)STRLEN(fname);
+ len = STRLEN(fname);
(void)modify_fname(mods, &usedlen, &fname, &fbuf, &len);
}
@@ -13017,19 +13017,18 @@ static void f_searchdecl(typval_T *argvars, typval_T *rettv)
int locally = 1;
int thisblock = 0;
int error = FALSE;
- char_u *name;
rettv->vval.v_number = 1; /* default: FAIL */
- name = get_tv_string_chk(&argvars[0]);
+ char_u *name = get_tv_string_chk(&argvars[0]);
if (argvars[1].v_type != VAR_UNKNOWN) {
locally = get_tv_number_chk(&argvars[1], &error) == 0;
if (!error && argvars[2].v_type != VAR_UNKNOWN)
thisblock = get_tv_number_chk(&argvars[2], &error) != 0;
}
if (!error && name != NULL)
- rettv->vval.v_number = find_decl(name, (int)STRLEN(name),
- locally, thisblock, SEARCH_KEEP) == FAIL;
+ rettv->vval.v_number = find_decl(name, STRLEN(name), locally,
+ thisblock, SEARCH_KEEP) == FAIL;
}
/*
@@ -14201,7 +14200,7 @@ static void f_spellbadword(typval_T *argvars, typval_T *rettv)
{
char_u *word = (char_u *)"";
hlf_T attr = HLF_COUNT;
- int len = 0;
+ size_t len = 0;
rettv_list_alloc(rettv);
@@ -14227,13 +14226,15 @@ static void f_spellbadword(typval_T *argvars, typval_T *rettv)
}
}
- list_append_string(rettv->vval.v_list, word, len);
- list_append_string(rettv->vval.v_list, (char_u *)(
- attr == HLF_SPB ? "bad" :
- attr == HLF_SPR ? "rare" :
- attr == HLF_SPL ? "local" :
- attr == HLF_SPC ? "caps" :
- ""), -1);
+ assert(len <= INT_MAX);
+ list_append_string(rettv->vval.v_list, word, (int)len);
+ list_append_string(rettv->vval.v_list,
+ (char_u *)(attr == HLF_SPB ? "bad" :
+ attr == HLF_SPR ? "rare" :
+ attr == HLF_SPL ? "local" :
+ attr == HLF_SPC ? "caps" :
+ ""),
+ -1);
}
/*
@@ -19803,10 +19804,10 @@ void ex_oldfiles(exarg_T *eap)
int
modify_fname (
char_u *src, /* string with modifiers */
- int *usedlen, /* characters after src that are used */
+ size_t *usedlen, /* characters after src that are used */
char_u **fnamep, /* file name so far */
char_u **bufp, /* buffer for allocated file name or NULL */
- int *fnamelen /* length of fnamep */
+ size_t *fnamelen /* length of fnamep */
)
{
int valid = 0;
@@ -19865,7 +19866,7 @@ repeat:
/* Append a path separator to a directory. */
if (os_isdir(*fnamep)) {
/* Make room for one or two extra characters. */
- *fnamep = vim_strnsave(*fnamep, (int)STRLEN(*fnamep) + 2);
+ *fnamep = vim_strnsave(*fnamep, STRLEN(*fnamep) + 2);
xfree(*bufp); /* free any allocated file name */
*bufp = *fnamep;
if (*fnamep == NULL)
@@ -19922,7 +19923,7 @@ repeat:
}
tail = path_tail(*fnamep);
- *fnamelen = (int)STRLEN(*fnamep);
+ *fnamelen = STRLEN(*fnamep);
/* ":h" - head, remove "/file_name", can be repeated */
/* Don't remove the first "/" or "c:\" */
@@ -19932,7 +19933,7 @@ repeat:
s = get_past_head(*fnamep);
while (tail > s && after_pathsep((char *)s, (char *)tail))
mb_ptr_back(*fnamep, tail);
- *fnamelen = (int)(tail - *fnamep);
+ *fnamelen = (size_t)(tail - *fnamep);
if (*fnamelen == 0) {
/* Result is empty. Turn it into "." to make ":cd %:h" work. */
xfree(*bufp);
@@ -19953,7 +19954,7 @@ repeat:
/* ":t" - tail, just the basename */
if (src[*usedlen] == ':' && src[*usedlen + 1] == 't') {
*usedlen += 2;
- *fnamelen -= (int)(tail - *fnamep);
+ *fnamelen -= (size_t)(tail - *fnamep);
*fnamep = tail;
}
@@ -19974,13 +19975,13 @@ repeat:
break;
if (src[*usedlen + 1] == 'e') { /* :e */
if (s > tail) {
- *fnamelen += (int)(*fnamep - (s + 1));
+ *fnamelen += (size_t)(*fnamep - (s + 1));
*fnamep = s + 1;
} else if (*fnamep <= tail)
*fnamelen = 0;
} else { /* :r */
if (s > tail) /* remove one extension */
- *fnamelen = (int)(s - *fnamep);
+ *fnamelen = (size_t)(s - *fnamep);
}
*usedlen += 2;
}
@@ -20016,10 +20017,10 @@ repeat:
if (p != NULL) {
sub = vim_strnsave(s, (int)(p - s));
str = vim_strnsave(*fnamep, *fnamelen);
- *usedlen = (int)(p + 1 - src);
+ *usedlen = (size_t)(p + 1 - src);
s = do_string_sub(str, pat, sub, flags);
*fnamep = s;
- *fnamelen = (int)STRLEN(s);
+ *fnamelen = STRLEN(s);
xfree(*bufp);
*bufp = s;
didit = TRUE;
@@ -20038,7 +20039,7 @@ repeat:
p = vim_strsave_shellescape(*fnamep, false, false);
xfree(*bufp);
*bufp = *fnamep = p;
- *fnamelen = (int)STRLEN(p);
+ *fnamelen = STRLEN(p);
*usedlen += 2;
}
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c
index f659538611..51010983bb 100644
--- a/src/nvim/ex_docmd.c
+++ b/src/nvim/ex_docmd.c
@@ -10,6 +10,7 @@
* ex_docmd.c: functions for executing an Ex command line.
*/
+#include <assert.h>
#include <string.h>
#include <stdbool.h>
#include <stdint.h>
@@ -3415,7 +3416,7 @@ int expand_filename(exarg_T *eap, char_u **cmdlinep, char_u **errormsgp)
{
int has_wildcards; /* need to expand wildcards */
char_u *repl;
- int srclen;
+ size_t srclen;
char_u *p;
int escaped;
@@ -3543,8 +3544,7 @@ int expand_filename(exarg_T *eap, char_u **cmdlinep, char_u **errormsgp)
} else
p = NULL;
if (p != NULL) {
- (void)repl_cmdline(eap, eap->arg, (int)STRLEN(eap->arg),
- p, cmdlinep);
+ (void)repl_cmdline(eap, eap->arg, STRLEN(eap->arg), p, cmdlinep);
}
}
@@ -3593,8 +3593,7 @@ int expand_filename(exarg_T *eap, char_u **cmdlinep, char_u **errormsgp)
if (p == NULL)
return FAIL;
if (p != NULL) {
- (void)repl_cmdline(eap, eap->arg, (int)STRLEN(eap->arg),
- p, cmdlinep);
+ (void)repl_cmdline(eap, eap->arg, STRLEN(eap->arg), p, cmdlinep);
xfree(p);
}
}
@@ -3609,22 +3608,19 @@ int expand_filename(exarg_T *eap, char_u **cmdlinep, char_u **errormsgp)
* "repl" is the replacement string.
* Returns a pointer to the character after the replaced string.
*/
-static char_u *repl_cmdline(exarg_T *eap, char_u *src, int srclen, char_u *repl, char_u **cmdlinep)
+static char_u *repl_cmdline(exarg_T *eap, char_u *src, size_t srclen,
+ char_u *repl, char_u **cmdlinep)
{
- int len;
- int i;
- char_u *new_cmdline;
-
/*
* The new command line is build in new_cmdline[].
* First allocate it.
* Careful: a "+cmd" argument may have been NUL terminated.
*/
- len = (int)STRLEN(repl);
- i = (int)(src - *cmdlinep) + (int)STRLEN(src + srclen) + len + 3;
+ size_t len = STRLEN(repl);
+ size_t i = (size_t)(src - *cmdlinep) + STRLEN(src + srclen) + len + 3;
if (eap->nextcmd != NULL)
- i += (int)STRLEN(eap->nextcmd); /* add space for next command */
- new_cmdline = xmalloc(i);
+ i += STRLEN(eap->nextcmd); /* add space for next command */
+ char_u *new_cmdline = xmalloc(i);
/*
* Copy the stuff before the expanded part.
@@ -3632,16 +3628,16 @@ static char_u *repl_cmdline(exarg_T *eap, char_u *src, int srclen, char_u *repl,
* Copy what came after the expanded part.
* Copy the next commands, if there are any.
*/
- i = (int)(src - *cmdlinep); /* length of part before match */
- memmove(new_cmdline, *cmdlinep, (size_t)i);
+ i = (size_t)(src - *cmdlinep); /* length of part before match */
+ memmove(new_cmdline, *cmdlinep, i);
- memmove(new_cmdline + i, repl, (size_t)len);
+ memmove(new_cmdline + i, repl, len);
i += len; /* remember the end of the string */
STRCPY(new_cmdline + i, src + srclen);
src = new_cmdline + i; /* remember where to continue */
if (eap->nextcmd != NULL) { /* append next command */
- i = (int)STRLEN(new_cmdline) + 1;
+ i = STRLEN(new_cmdline) + 1;
STRCPY(new_cmdline + i, eap->nextcmd);
eap->nextcmd = new_cmdline + i;
}
@@ -5688,8 +5684,8 @@ void ex_splitview(exarg_T *eap)
}
if (eap->cmdidx == CMD_sfind || eap->cmdidx == CMD_tabfind) {
- fname = find_file_in_path(eap->arg, (int)STRLEN(eap->arg),
- FNAME_MESS, TRUE, curbuf->b_ffname);
+ fname = find_file_in_path(eap->arg, STRLEN(eap->arg),
+ FNAME_MESS, TRUE, curbuf->b_ffname);
if (fname == NULL)
goto theend;
eap->arg = fname;
@@ -5901,16 +5897,15 @@ static void ex_find(exarg_T *eap)
char_u *fname;
int count;
- fname = find_file_in_path(eap->arg, (int)STRLEN(eap->arg), FNAME_MESS,
- TRUE, curbuf->b_ffname);
+ fname = find_file_in_path(eap->arg, STRLEN(eap->arg),
+ FNAME_MESS, TRUE, curbuf->b_ffname);
if (eap->addr_count > 0) {
/* Repeat finding the file "count" times. This matters when it
* appears several times in the path. */
count = eap->line2;
while (fname != NULL && --count > 0) {
xfree(fname);
- fname = find_file_in_path(NULL, 0, FNAME_MESS,
- FALSE, curbuf->b_ffname);
+ fname = find_file_in_path(NULL, 0, FNAME_MESS, FALSE, curbuf->b_ffname);
}
}
@@ -7090,7 +7085,7 @@ static void ex_normal(exarg_T *eap)
tasave_T tabuf;
int save_insertmode = p_im;
int save_finish_op = finish_op;
- int save_opcount = opcount;
+ long save_opcount = opcount;
char_u *arg = NULL;
int l;
char_u *p;
@@ -7252,8 +7247,8 @@ void exec_normal_cmd(char_u *cmd, int remap, int silent)
static void ex_checkpath(exarg_T *eap)
{
find_pattern_in_path(NULL, 0, 0, FALSE, FALSE, CHECK_PATH, 1L,
- eap->forceit ? ACTION_SHOW_ALL : ACTION_SHOW,
- (linenr_T)1, (linenr_T)MAXLNUM);
+ eap->forceit ? ACTION_SHOW_ALL : ACTION_SHOW,
+ (linenr_T)1, (linenr_T)MAXLNUM);
}
/*
@@ -7312,10 +7307,9 @@ static void ex_findpat(exarg_T *eap)
}
}
if (!eap->skip)
- find_pattern_in_path(eap->arg, 0, (int)STRLEN(eap->arg),
- whole, !eap->forceit,
- *eap->cmd == 'd' ? FIND_DEFINE : FIND_ANY,
- n, action, eap->line1, eap->line2);
+ find_pattern_in_path(eap->arg, 0, STRLEN(eap->arg), whole, !eap->forceit,
+ *eap->cmd == 'd' ? FIND_DEFINE : FIND_ANY,
+ n, action, eap->line1, eap->line2);
}
@@ -7414,10 +7408,10 @@ static void ex_tag_cmd(exarg_T *eap, char_u *name)
* If found return one of the SPEC_ values and set "*usedlen" to the length of
* the variable. Otherwise return -1 and "*usedlen" is unchanged.
*/
-int find_cmdline_var(const char_u *src, int *usedlen) FUNC_ATTR_NONNULL_ALL
+ssize_t find_cmdline_var(const char_u *src, size_t *usedlen)
+ FUNC_ATTR_NONNULL_ALL
{
- int len;
- int i;
+ size_t len;
static char *(spec_str[]) = {
"%",
#define SPEC_PERC 0
@@ -7441,11 +7435,12 @@ int find_cmdline_var(const char_u *src, int *usedlen) FUNC_ATTR_NONNULL_ALL
# define SPEC_AMATCH 9
};
- for (i = 0; i < (int)ARRAY_SIZE(spec_str); ++i) {
- len = (int)STRLEN(spec_str[i]);
+ for (size_t i = 0; i < ARRAY_SIZE(spec_str); ++i) {
+ len = STRLEN(spec_str[i]);
if (STRNCMP(src, spec_str[i], len) == 0) {
*usedlen = len;
- return i;
+ assert(i <= SSIZE_MAX);
+ return (ssize_t)i;
}
}
return -1;
@@ -7475,7 +7470,7 @@ char_u *
eval_vars (
char_u *src, /* pointer into commandline */
char_u *srcstart, /* beginning of valid memory for src */
- int *usedlen, /* characters after src that are used */
+ size_t *usedlen, /* characters after src that are used */
linenr_T *lnump, /* line number for :e command, or NULL */
char_u **errormsg, /* pointer to error message */
int *escaped /* return value has escaped white space (can
@@ -7486,10 +7481,9 @@ eval_vars (
char_u *s;
char_u *result;
char_u *resultbuf = NULL;
- int resultlen;
+ size_t resultlen;
buf_T *buf;
int valid = VALID_HEAD + VALID_PATH; /* assume valid result */
- int spec_idx;
int skip_mod = FALSE;
char_u strbuf[30];
@@ -7500,7 +7494,7 @@ eval_vars (
/*
* Check if there is something to do.
*/
- spec_idx = find_cmdline_var(src, usedlen);
+ ssize_t spec_idx = find_cmdline_var(src, usedlen);
if (spec_idx < 0) { /* no match */
*usedlen = 1;
return NULL;
@@ -7520,8 +7514,9 @@ eval_vars (
* word or WORD under cursor
*/
if (spec_idx == SPEC_CWORD || spec_idx == SPEC_CCWORD) {
- resultlen = find_ident_under_cursor(&result, spec_idx == SPEC_CWORD ?
- (FIND_IDENT|FIND_STRING) : FIND_STRING);
+ resultlen = find_ident_under_cursor(&result, (spec_idx == SPEC_CWORD
+ ? (FIND_IDENT|FIND_STRING)
+ : FIND_STRING));
if (resultlen == 0) {
*errormsg = (char_u *)"";
return NULL;
@@ -7558,7 +7553,7 @@ eval_vars (
if (*s == '<') /* "#<99" uses v:oldfiles */
++s;
i = getdigits_int(&s);
- *usedlen = (int)(s - src); /* length of what we expand */
+ *usedlen = (size_t)(s - src); /* length of what we expand */
if (src[1] == '<') {
if (*usedlen < 2) {
@@ -7657,14 +7652,13 @@ eval_vars (
return NULL;
}
- resultlen = (int)STRLEN(result); /* length of new string */
+ resultlen = STRLEN(result); /* length of new string */
if (src[*usedlen] == '<') { /* remove the file name extension */
++*usedlen;
if ((s = vim_strrchr(result, '.')) != NULL && s >= path_tail(result))
- resultlen = (int)(s - result);
+ resultlen = (size_t)(s - result);
} else if (!skip_mod) {
- valid |= modify_fname(src, usedlen, &result, &resultbuf,
- &resultlen);
+ valid |= modify_fname(src, usedlen, &result, &resultbuf, &resultlen);
if (result == NULL) {
*errormsg = (char_u *)"";
return NULL;
@@ -7750,11 +7744,11 @@ static char_u *arg_all(void)
char_u *expand_sfile(char_u *arg)
{
char_u *errormsg;
- int len;
+ size_t len;
char_u *result;
char_u *newres;
char_u *repl;
- int srclen;
+ size_t srclen;
char_u *p;
result = vim_strsave(arg);
@@ -7775,11 +7769,11 @@ char_u *expand_sfile(char_u *arg)
p += srclen;
continue;
}
- len = (int)STRLEN(result) - srclen + (int)STRLEN(repl) + 1;
+ len = STRLEN(result) - srclen + STRLEN(repl) + 1;
newres = xmalloc(len);
memmove(newres, result, (size_t)(p - result));
STRCPY(newres + (p - result), repl);
- len = (int)STRLEN(newres);
+ len = STRLEN(newres);
STRCAT(newres, p + srclen);
xfree(repl);
xfree(result);
diff --git a/src/nvim/file_search.c b/src/nvim/file_search.c
index 42779d6b71..2777271377 100644
--- a/src/nvim/file_search.c
+++ b/src/nvim/file_search.c
@@ -1310,15 +1310,17 @@ static int ff_path_in_stoplist(char_u *path, int path_len, char_u **stopdirs_v)
char_u *
find_file_in_path (
char_u *ptr, /* file name */
- int len, /* length of file name */
+ size_t len, /* length of file name */
int options,
int first, /* use count'th matching file name */
char_u *rel_fname /* file name searching relative to */
)
{
return find_file_in_path_option(ptr, len, options, first,
- *curbuf->b_p_path == NUL ? p_path : curbuf->b_p_path,
- FINDFILE_BOTH, rel_fname, curbuf->b_p_sua);
+ (*curbuf->b_p_path == NUL
+ ? p_path
+ : curbuf->b_p_path),
+ FINDFILE_BOTH, rel_fname, curbuf->b_p_sua);
}
static char_u *ff_file_to_find = NULL;
@@ -1347,19 +1349,19 @@ void free_findfile(void)
char_u *
find_directory_in_path (
char_u *ptr, /* file name */
- int len, /* length of file name */
+ size_t len, /* length of file name */
int options,
char_u *rel_fname /* file name searching relative to */
)
{
return find_file_in_path_option(ptr, len, options, TRUE, p_cdpath,
- FINDFILE_DIR, rel_fname, (char_u *)"");
+ FINDFILE_DIR, rel_fname, (char_u *)"");
}
char_u *
find_file_in_path_option (
char_u *ptr, /* file name */
- int len, /* length of file name */
+ size_t len, /* length of file name */
int options,
int first, /* use count'th matching file name */
char_u *path_option, /* p_path or p_cdpath */
diff --git a/src/nvim/globals.h b/src/nvim/globals.h
index 832377f488..7d1666f866 100644
--- a/src/nvim/globals.h
+++ b/src/nvim/globals.h
@@ -802,7 +802,7 @@ EXTERN int State INIT(= NORMAL); /* This is the current state of the
* command interpreter. */
EXTERN int finish_op INIT(= FALSE); /* TRUE while an operator is pending */
-EXTERN int opcount INIT(= 0); /* count for pending operator */
+EXTERN long opcount INIT(= 0); /* count for pending operator */
/*
* ex mode (Q) state
diff --git a/src/nvim/if_cscope.c b/src/nvim/if_cscope.c
index bdaf88e574..a7052149e0 100644
--- a/src/nvim/if_cscope.c
+++ b/src/nvim/if_cscope.c
@@ -455,18 +455,16 @@ cs_add_common (
char *fname2 = NULL;
char *ppath = NULL;
int i;
- int len;
- int usedlen = 0;
+ size_t usedlen = 0;
char_u *fbuf = NULL;
/* get the filename (arg1), expand it, and try to stat it */
fname = xmalloc(MAXPATHL + 1);
expand_env((char_u *)arg1, (char_u *)fname, MAXPATHL);
- len = (int)STRLEN(fname);
+ size_t len = STRLEN(fname);
fbuf = (char_u *)fname;
- (void)modify_fname((char_u *)":p", &usedlen,
- (char_u **)&fname, &fbuf, &len);
+ (void)modify_fname((char_u *)":p", &usedlen, (char_u **)&fname, &fbuf, &len);
if (fname == NULL)
goto add_err;
fname = (char *)vim_strnsave((char_u *)fname, len);
diff --git a/src/nvim/misc2.c b/src/nvim/misc2.c
index 7a584d4ea1..87a9556202 100644
--- a/src/nvim/misc2.c
+++ b/src/nvim/misc2.c
@@ -382,8 +382,8 @@ int vim_chdir(char_u *new_dir)
char_u *dir_name;
int r;
- dir_name = find_directory_in_path(new_dir, (int)STRLEN(new_dir),
- FNAME_MESS, curbuf->b_ffname);
+ dir_name = find_directory_in_path(new_dir, STRLEN(new_dir),
+ FNAME_MESS, curbuf->b_ffname);
if (dir_name == NULL)
return -1;
r = os_chdir((char *)dir_name);
diff --git a/src/nvim/normal.c b/src/nvim/normal.c
index b7f2666968..9462a2186e 100644
--- a/src/nvim/normal.c
+++ b/src/nvim/normal.c
@@ -350,19 +350,23 @@ static int nv_compare(const void *s1, const void *s2)
*/
void init_normal_cmds(void)
{
- int i;
+ assert(NV_CMDS_SIZE <= SHRT_MAX);
/* Fill the index table with a one to one relation. */
- for (i = 0; i < (int)NV_CMDS_SIZE; ++i)
+ for (short int i = 0; i < (short int)NV_CMDS_SIZE; ++i) {
nv_cmd_idx[i] = i;
+ }
/* Sort the commands by the command character. */
- qsort((void *)&nv_cmd_idx, (size_t)NV_CMDS_SIZE, sizeof(short), nv_compare);
+ qsort(&nv_cmd_idx, NV_CMDS_SIZE, sizeof(short), nv_compare);
/* Find the first entry that can't be indexed by the command character. */
- for (i = 0; i < (int)NV_CMDS_SIZE; ++i)
- if (i != nv_cmds[nv_cmd_idx[i]].cmd_char)
+ short int i;
+ for (i = 0; i < (short int)NV_CMDS_SIZE; ++i) {
+ if (i != nv_cmds[nv_cmd_idx[i]].cmd_char) {
break;
+ }
+ }
nv_max_linear = i - 1;
}
@@ -1846,7 +1850,7 @@ do_mouse (
static pos_T orig_cursor;
colnr_T leftcol, rightcol;
pos_T end_visual;
- int diff;
+ long diff;
int old_active = VIsual_active;
int old_mode = VIsual_mode;
int regname;
@@ -2589,7 +2593,7 @@ void reset_VIsual(void)
* If a string is found, a pointer to the string is put in "*string". This
* string is not always NUL terminated.
*/
-int find_ident_under_cursor(char_u **string, int find_type)
+size_t find_ident_under_cursor(char_u **string, int find_type)
{
return find_ident_at_pos(curwin, curwin->w_cursor.lnum,
curwin->w_cursor.col, string, find_type);
@@ -2599,7 +2603,8 @@ int find_ident_under_cursor(char_u **string, int find_type)
* Like find_ident_under_cursor(), but for any window and any position.
* However: Uses 'iskeyword' from the current window!.
*/
-int find_ident_at_pos(win_T *wp, linenr_T lnum, colnr_T startcol, char_u **string, int find_type)
+size_t find_ident_at_pos(win_T *wp, linenr_T lnum, colnr_T startcol,
+ char_u **string, int find_type)
{
char_u *ptr;
int col = 0; /* init to shut up GCC */
@@ -2707,7 +2712,8 @@ int find_ident_at_pos(win_T *wp, linenr_T lnum, colnr_T startcol, char_u **strin
++col;
}
- return col;
+ assert(col >= 0);
+ return (size_t)col;
}
/*
@@ -2899,9 +2905,6 @@ void clear_showcmd(void)
bool add_to_showcmd(int c)
{
char_u *p;
- int old_len;
- int extra_len;
- int overflow;
int i;
static int ignore[] =
{
@@ -2932,12 +2935,12 @@ bool add_to_showcmd(int c)
p = transchar(c);
if (*p == ' ')
STRCPY(p, "<20>");
- old_len = (int)STRLEN(showcmd_buf);
- extra_len = (int)STRLEN(p);
- overflow = old_len + extra_len - SHOWCMD_COLS;
- if (overflow > 0)
- memmove(showcmd_buf, showcmd_buf + overflow,
- old_len - overflow + 1);
+ size_t old_len = STRLEN(showcmd_buf);
+ size_t extra_len = STRLEN(p);
+ if (old_len + extra_len > SHOWCMD_COLS) {
+ size_t overflow = old_len + extra_len - SHOWCMD_COLS;
+ memmove(showcmd_buf, showcmd_buf + overflow, old_len - overflow + 1);
+ }
STRCAT(showcmd_buf, p);
if (char_avail())
@@ -3220,11 +3223,10 @@ nv_gd (
int thisblock /* 1 for "1gd" and "1gD" */
)
{
- int len;
- char_u *ptr;
-
+ size_t len;
+ char_u *ptr;
if ((len = find_ident_under_cursor(&ptr, FIND_IDENT)) == 0
- || find_decl(ptr, len, nchar == 'd', thisblock, 0) == false)
+ || !find_decl(ptr, len, nchar == 'd', thisblock, 0))
clearopbeep(oap);
else if ((fdo_flags & FDO_SEARCH) && KeyTyped && oap->op_type == OP_NOP)
foldOpenCursor();
@@ -3240,7 +3242,7 @@ nv_gd (
bool
find_decl (
char_u *ptr,
- int len,
+ size_t len,
bool locally,
bool thisblock,
int searchflags /* flags passed to searchit() */
@@ -3260,8 +3262,9 @@ find_decl (
/* Put "\V" before the pattern to avoid that the special meaning of "."
* and "~" causes trouble. */
+ assert(len <= INT_MAX);
sprintf((char *)pat, vim_iswordp(ptr) ? "\\V\\<%.*s\\>" : "\\V%.*s",
- len, ptr);
+ (int)len, ptr);
old_pos = curwin->w_cursor;
save_p_ws = p_ws;
save_p_scs = p_scs;
@@ -3586,13 +3589,16 @@ void scroll_redraw(int up, long count)
*/
static void nv_zet(cmdarg_T *cap)
{
- long n;
+ int n;
colnr_T col;
int nchar = cap->nchar;
long old_fdl = curwin->w_p_fdl;
int old_fen = curwin->w_p_fen;
bool undo = false;
+ assert(p_siso <= INT_MAX);
+ int l_p_siso = (int)p_siso;
+
if (ascii_isdigit(nchar)) {
/*
* "z123{nchar}": edit the count before obtaining {nchar}
@@ -3613,7 +3619,7 @@ static void nv_zet(cmdarg_T *cap)
else if (ascii_isdigit(nchar))
n = n * 10 + (nchar - '0');
else if (nchar == CAR) {
- win_setheight((int)n);
+ win_setheight(n);
break;
} else if (nchar == 'l'
|| nchar == 'h'
@@ -3744,8 +3750,8 @@ dozet:
col = 0; /* like the cursor is in col 0 */
else
getvcol(curwin, &curwin->w_cursor, &col, NULL, NULL);
- if ((long)col > p_siso)
- col -= p_siso;
+ if (col > l_p_siso)
+ col -= l_p_siso;
else
col = 0;
if (curwin->w_leftcol != col) {
@@ -3762,10 +3768,10 @@ dozet:
else
getvcol(curwin, &curwin->w_cursor, NULL, NULL, &col);
n = curwin->w_width - curwin_col_off();
- if ((long)col + p_siso < n)
+ if (col + l_p_siso < n)
col = 0;
else
- col = col + p_siso - n + 1;
+ col = col + l_p_siso - n + 1;
if (curwin->w_leftcol != col) {
curwin->w_leftcol = col;
redraw_later(NOT_VALID);
@@ -3941,12 +3947,11 @@ dozet:
case 'W': /* "zW": add wrong word to temp word list */
{
char_u *ptr = NULL;
- int len;
+ size_t len;
if (checkclearop(cap->oap))
break;
- if (VIsual_active && get_visual_text(cap, &ptr, &len)
- == false)
+ if (VIsual_active && !get_visual_text(cap, &ptr, &len))
return;
if (ptr == NULL) {
pos_T pos = curwin->w_cursor;
@@ -3962,13 +3967,12 @@ dozet:
curwin->w_cursor = pos;
}
- if (ptr == NULL && (len = find_ident_under_cursor(&ptr,
- FIND_IDENT)) == 0)
+ if (ptr == NULL && (len = find_ident_under_cursor(&ptr, FIND_IDENT)) == 0)
return;
- spell_add_word(ptr, len, nchar == 'w' || nchar == 'W',
- (nchar == 'G' || nchar == 'W')
- ? 0 : (int)cap->count1,
- undo);
+ assert(len <= INT_MAX);
+ spell_add_word(ptr, (int)len, nchar == 'w' || nchar == 'W',
+ (nchar == 'G' || nchar == 'W') ? 0 : (int)cap->count1,
+ undo);
}
break;
@@ -4187,7 +4191,7 @@ static void nv_ident(cmdarg_T *cap)
char_u *p;
char_u *kp; /* value of 'keywordprg' */
bool kp_help; /* 'keywordprg' is ":help" */
- int n = 0; /* init for GCC */
+ size_t n = 0; /* init for GCC */
int cmdchar;
bool g_cmd; /* "g" command */
bool tag_cmd = false;
@@ -4217,8 +4221,10 @@ static void nv_ident(cmdarg_T *cap)
}
if (ptr == NULL && (n = find_ident_under_cursor(&ptr,
- (cmdchar == '*' || cmdchar == '#')
- ? FIND_IDENT|FIND_STRING : FIND_IDENT)) == 0) {
+ ((cmdchar == '*'
+ || cmdchar == '#')
+ ? FIND_IDENT|FIND_STRING
+ : FIND_IDENT))) == 0) {
clearop(cap->oap);
return;
}
@@ -4339,10 +4345,8 @@ static void nv_ident(cmdarg_T *cap)
/* When current byte is a part of multibyte character, copy all
* bytes of that character. */
if (has_mbyte) {
- int i;
- int len = (*mb_ptr2len)(ptr) - 1;
-
- for (i = 0; i < len && n >= 1; ++i, --n)
+ size_t len = (size_t)((*mb_ptr2len)(ptr) - 1);
+ for (size_t i = 0; i < len && n > 0; ++i, --n)
*p++ = *ptr++;
}
*p++ = *ptr++;
@@ -4376,7 +4380,7 @@ bool
get_visual_text (
cmdarg_T *cap,
char_u **pp, /* return: start of selected text */
- int *lenp /* return: length of selected text */
+ size_t *lenp /* return: length of selected text */
)
{
if (VIsual_mode != 'V')
@@ -4388,18 +4392,18 @@ get_visual_text (
}
if (VIsual_mode == 'V') {
*pp = get_cursor_line_ptr();
- *lenp = (int)STRLEN(*pp);
+ *lenp = STRLEN(*pp);
} else {
if (lt(curwin->w_cursor, VIsual)) {
*pp = ml_get_pos(&curwin->w_cursor);
- *lenp = VIsual.col - curwin->w_cursor.col + 1;
+ *lenp = (size_t)(VIsual.col - curwin->w_cursor.col + 1);
} else {
*pp = ml_get_pos(&VIsual);
- *lenp = curwin->w_cursor.col - VIsual.col + 1;
+ *lenp = (size_t)(curwin->w_cursor.col - VIsual.col + 1);
}
if (has_mbyte)
/* Correct the length to include the whole last character. */
- *lenp += (*mb_ptr2len)(*pp + (*lenp - 1)) - 1;
+ *lenp += (size_t)((*mb_ptr2len)(*pp + (*lenp - 1)) - 1);
}
reset_VIsual_and_resel();
return true;
@@ -4919,19 +4923,24 @@ static void nv_brackets(cmdarg_T *cap)
"iI\011dD\004",
cap->nchar) != NULL) {
char_u *ptr;
- int len;
+ size_t len;
if ((len = find_ident_under_cursor(&ptr, FIND_IDENT)) == 0)
clearop(cap->oap);
else {
find_pattern_in_path(ptr, 0, len, true,
- cap->count0 == 0 ? !isupper(cap->nchar) : false,
- ((cap->nchar & 0xf) == ('d' & 0xf)) ? FIND_DEFINE : FIND_ANY,
- cap->count1,
- isupper(cap->nchar) ? ACTION_SHOW_ALL :
- islower(cap->nchar) ? ACTION_SHOW : ACTION_GOTO,
- cap->cmdchar == ']' ? curwin->w_cursor.lnum + 1 : (linenr_T)1,
- (linenr_T)MAXLNUM);
+ cap->count0 == 0 ? !isupper(cap->nchar) : false,
+ (((cap->nchar & 0xf) == ('d' & 0xf))
+ ? FIND_DEFINE
+ : FIND_ANY),
+ cap->count1,
+ (isupper(cap->nchar) ? ACTION_SHOW_ALL :
+ islower(cap->nchar) ? ACTION_SHOW :
+ ACTION_GOTO),
+ (cap->cmdchar == ']'
+ ? curwin->w_cursor.lnum + 1
+ : (linenr_T)1),
+ MAXLNUM);
curwin->w_set_curswant = true;
}
} else
@@ -5076,7 +5085,7 @@ static void nv_brackets(cmdarg_T *cap)
int dir = (cap->cmdchar == ']' && cap->nchar == 'p') ? FORWARD : BACKWARD;
int regname = cap->oap->regname;
int was_visual = VIsual_active;
- int line_count = curbuf->b_ml.ml_line_count;
+ linenr_T line_count = curbuf->b_ml.ml_line_count;
pos_T start, end;
if (VIsual_active) {
@@ -5159,7 +5168,7 @@ static void nv_brackets(cmdarg_T *cap)
setpcmark();
for (n = 0; n < cap->count1; ++n)
if (spell_move_to(curwin, cap->cmdchar == ']' ? FORWARD : BACKWARD,
- cap->nchar == 's' ? true : false, false, NULL) == 0) {
+ cap->nchar == 's', false, NULL) == 0) {
clearopbeep(cap->oap);
break;
}
@@ -5347,7 +5356,8 @@ static void nv_replace(cmdarg_T *cap)
if (gchar_cursor() == NUL) {
/* Add extra space and put the cursor on the first one. */
coladvance_force((colnr_T)(getviscol() + cap->count1));
- curwin->w_cursor.col -= cap->count1;
+ assert(cap->count1 <= INT_MAX);
+ curwin->w_cursor.col -= (colnr_T)cap->count1;
} else if (gchar_cursor() == TAB)
coladvance_force(getviscol());
}
@@ -5442,11 +5452,13 @@ static void nv_replace(cmdarg_T *cap)
ptr = ml_get_buf(curbuf, curwin->w_cursor.lnum, true);
if (cap->nchar == Ctrl_E || cap->nchar == Ctrl_Y) {
int c = ins_copychar(curwin->w_cursor.lnum
- + (cap->nchar == Ctrl_Y ? -1 : 1));
+ + (cap->nchar == Ctrl_Y ? -1 : 1));
if (c != NUL)
- ptr[curwin->w_cursor.col] = c;
+ assert(c >= 0 && c <= UCHAR_MAX);
+ ptr[curwin->w_cursor.col] = (char_u)c;
} else
- ptr[curwin->w_cursor.col] = cap->nchar;
+ assert(cap->nchar >= 0 && cap->nchar <= UCHAR_MAX);
+ ptr[curwin->w_cursor.col] = (char_u)cap->nchar;
if (p_sm && msg_silent == 0)
showmatch(cap->nchar);
++curwin->w_cursor.col;
@@ -5867,8 +5879,9 @@ static void nv_visual(cmdarg_T *cap)
if (VIsual_mode == 'v') {
if (resel_VIsual_line_count <= 1) {
validate_virtcol();
- curwin->w_curswant = curwin->w_virtcol
- + resel_VIsual_vcol * cap->count0 - 1;
+ assert(cap->count0 >= INT_MIN && cap->count0 <= INT_MAX);
+ curwin->w_curswant = (curwin->w_virtcol
+ + resel_VIsual_vcol * (int)cap->count0 - 1);
} else
curwin->w_curswant = resel_VIsual_vcol;
coladvance(curwin->w_curswant);
@@ -5878,8 +5891,9 @@ static void nv_visual(cmdarg_T *cap)
coladvance((colnr_T)MAXCOL);
} else if (VIsual_mode == Ctrl_V) {
validate_virtcol();
- curwin->w_curswant = curwin->w_virtcol
- + resel_VIsual_vcol * cap->count0 - 1;
+ assert(cap->count0 >= INT_MIN && cap->count0 <= INT_MAX);
+ curwin->w_curswant = (curwin->w_virtcol
+ + resel_VIsual_vcol * (int)cap->count0 - 1);
coladvance(curwin->w_curswant);
} else
curwin->w_set_curswant = true;
@@ -6609,8 +6623,14 @@ static void set_op_var(int optype)
if (optype == OP_NOP)
set_vim_var_string(VV_OP, NULL, 0);
else {
- opchars[0] = get_op_char(optype);
- opchars[1] = get_extra_op_char(optype);
+ int opchar0 = get_op_char(optype);
+ assert(opchar0 >= 0 && opchar0 <= UCHAR_MAX);
+ opchars[0] = (char_u)opchar0;
+
+ int opchar1 = get_extra_op_char(optype);
+ assert(opchar1 >= 0 && opchar1 <= UCHAR_MAX);
+ opchars[1] = (char_u)opchar1;
+
opchars[2] = NUL;
set_vim_var_string(VV_OP, opchars, -1);
}
diff --git a/src/nvim/ops.c b/src/nvim/ops.c
index 9ee2edc814..268f2ac94f 100644
--- a/src/nvim/ops.c
+++ b/src/nvim/ops.c
@@ -1189,7 +1189,7 @@ get_spec_reg (
int errmsg /* give error message when failing */
)
{
- int cnt;
+ size_t cnt;
*argp = NULL;
*allocated = FALSE;
@@ -1241,8 +1241,9 @@ get_spec_reg (
case Ctrl_A: /* WORD (mnemonic All) under cursor */
if (!errmsg)
return FALSE;
- cnt = find_ident_under_cursor(argp, regname == Ctrl_W
- ? (FIND_IDENT|FIND_STRING) : FIND_STRING);
+ cnt = find_ident_under_cursor(argp, (regname == Ctrl_W
+ ? (FIND_IDENT|FIND_STRING)
+ : FIND_STRING));
*argp = cnt ? vim_strnsave(*argp, cnt) : NULL;
*allocated = TRUE;
return TRUE;
diff --git a/src/nvim/os/env.c b/src/nvim/os/env.c
index 4da3e312c9..2cf56f0201 100644
--- a/src/nvim/os/env.c
+++ b/src/nvim/os/env.c
@@ -561,14 +561,11 @@ void home_replace(buf_T *buf, char_u *src, char_u *dst, int dstlen, bool one)
homedir_env = NULL;
if (homedir_env != NULL && vim_strchr(homedir_env, '~') != NULL) {
- int usedlen = 0;
- int flen;
- char_u *fbuf = NULL;
-
- flen = (int)STRLEN(homedir_env);
- (void)modify_fname((char_u *)":p", &usedlen,
- &homedir_env, &fbuf, &flen);
- flen = (int)STRLEN(homedir_env);
+ size_t usedlen = 0;
+ size_t flen = STRLEN(homedir_env);
+ char_u *fbuf = NULL;
+ (void)modify_fname((char_u *)":p", &usedlen, &homedir_env, &fbuf, &flen);
+ flen = STRLEN(homedir_env);
if (flen > 0 && vim_ispathsep(homedir_env[flen - 1]))
/* Remove the trailing / that is added to a directory. */
homedir_env[flen - 1] = NUL;
diff --git a/src/nvim/path.c b/src/nvim/path.c
index 3e2ed53ca9..d1dd94c190 100644
--- a/src/nvim/path.c
+++ b/src/nvim/path.c
@@ -1445,13 +1445,13 @@ void simplify_filename(char_u *filename)
} while (*p != NUL);
}
-static char_u *eval_includeexpr(char_u *ptr, int len)
+static char_u *eval_includeexpr(char_u *ptr, size_t len)
{
- char_u *res;
-
- set_vim_var_string(VV_FNAME, ptr, len);
- res = eval_to_string_safe(curbuf->b_p_inex, NULL,
- was_set_insecurely((char_u *)"includeexpr", OPT_LOCAL));
+ assert(len <= INT_MAX);
+ set_vim_var_string(VV_FNAME, ptr, (int)len);
+ char_u *res = eval_to_string_safe(curbuf->b_p_inex, NULL,
+ was_set_insecurely((char_u *)"includeexpr",
+ OPT_LOCAL));
set_vim_var_string(VV_FNAME, NULL, 0);
return res;
}
@@ -1463,7 +1463,7 @@ static char_u *eval_includeexpr(char_u *ptr, int len)
char_u *
find_file_name_in_path (
char_u *ptr,
- int len,
+ size_t len,
int options,
long count,
char_u *rel_fname /* file we are searching relative to */
@@ -1477,13 +1477,13 @@ find_file_name_in_path (
tofree = eval_includeexpr(ptr, len);
if (tofree != NULL) {
ptr = tofree;
- len = (int)STRLEN(ptr);
+ len = STRLEN(ptr);
}
}
if (options & FNAME_EXP) {
file_name = find_file_in_path(ptr, len, options & ~FNAME_MESS,
- TRUE, rel_fname);
+ TRUE, rel_fname);
/*
* If the file could not be found in a normal way, try applying
@@ -1494,9 +1494,9 @@ find_file_name_in_path (
tofree = eval_includeexpr(ptr, len);
if (tofree != NULL) {
ptr = tofree;
- len = (int)STRLEN(ptr);
+ len = STRLEN(ptr);
file_name = find_file_in_path(ptr, len, options & ~FNAME_MESS,
- TRUE, rel_fname);
+ TRUE, rel_fname);
}
}
if (file_name == NULL && (options & FNAME_MESS)) {
@@ -1839,7 +1839,7 @@ int expand_wildcards_eval(char_u **pat, int *num_file, char_u ***file,
char_u *eval_pat = NULL;
char_u *exp_pat = *pat;
char_u *ignored_msg;
- int usedlen;
+ size_t usedlen;
if (*exp_pat == '%' || *exp_pat == '#' || *exp_pat == '<') {
++emsg_off;
diff --git a/src/nvim/screen.c b/src/nvim/screen.c
index a680599f9b..dc94f331fd 100644
--- a/src/nvim/screen.c
+++ b/src/nvim/screen.c
@@ -2465,7 +2465,7 @@ win_line (
/* When spell checking a word we need to figure out the start of the
* word and if it's badly spelled or not. */
if (has_spell) {
- int len;
+ size_t len;
colnr_T linecol = (colnr_T)(ptr - line);
hlf_T spell_hlf = HLF_COUNT;
@@ -2485,7 +2485,8 @@ win_line (
word_end = (int)(spell_to_word_end(ptr, wp) - line + 1);
} else {
/* bad word found, use attributes until end of word */
- word_end = wp->w_cursor.col + len + 1;
+ assert(len <= INT_MAX);
+ word_end = wp->w_cursor.col + (int)len + 1;
/* Turn index into actual attributes. */
if (spell_hlf != HLF_COUNT)
@@ -3252,8 +3253,9 @@ win_line (
else
p = prev_ptr;
cap_col -= (int)(prev_ptr - line);
- len = spell_check(wp, p, &spell_hlf, &cap_col,
- nochange);
+ size_t tmplen = spell_check(wp, p, &spell_hlf, &cap_col, nochange);
+ assert(tmplen <= INT_MAX);
+ len = (int)tmplen;
word_end = v + len;
/* In Insert mode only highlight a word that
diff --git a/src/nvim/search.c b/src/nvim/search.c
index 59d6cf4427..3542d1f711 100644
--- a/src/nvim/search.c
+++ b/src/nvim/search.c
@@ -3947,7 +3947,7 @@ void
find_pattern_in_path (
char_u *ptr, /* pointer to search pattern */
int dir, /* direction of expansion */
- int len, /* length of search pattern */
+ size_t len, /* length of search pattern */
int whole, /* match whole words only */
int skip_comments, /* don't match inside comments */
int type, /* Type of search; are we looking for a type?
@@ -4002,7 +4002,8 @@ find_pattern_in_path (
&& !(compl_cont_status & CONT_SOL)
) {
pat = xmalloc(len + 5);
- sprintf((char *)pat, whole ? "\\<%.*s\\>" : "%.*s", len, ptr);
+ assert(len <= INT_MAX);
+ sprintf((char *)pat, whole ? "\\<%.*s\\>" : "%.*s", (int)len, ptr);
/* ignore case according to p_ic, p_scs and pat */
regmatch.rm_ic = ignorecase(pat);
regmatch.regprog = vim_regcomp(pat, p_magic ? RE_MAGIC : 0);
@@ -4044,8 +4045,10 @@ find_pattern_in_path (
if (inc_opt != NULL && strstr((char *)inc_opt, "\\zs") != NULL)
/* Use text from '\zs' to '\ze' (or end) of 'include'. */
new_fname = find_file_name_in_path(incl_regmatch.startp[0],
- (int)(incl_regmatch.endp[0] - incl_regmatch.startp[0]),
- FNAME_EXP|FNAME_INCL|FNAME_REL, 1L, p_fname);
+ (size_t)(incl_regmatch.endp[0]
+ - incl_regmatch.startp[0]),
+ FNAME_EXP|FNAME_INCL|FNAME_REL,
+ 1L, p_fname);
else
/* Use text after match with 'include'. */
new_fname = file_name_in_line(incl_regmatch.endp[0], 0,
@@ -4235,8 +4238,7 @@ search_line:
/* compare the first "len" chars from "ptr" */
startp = skipwhite(p);
if (p_ic) {
- assert(len >= 0);
- matched = !mb_strnicmp(startp, ptr, (size_t)len);
+ matched = !mb_strnicmp(startp, ptr, len);
}
else
matched = !STRNCMP(startp, ptr, len);
diff --git a/src/nvim/spell.c b/src/nvim/spell.c
index faddfedb89..6c6c4eb72a 100644
--- a/src/nvim/spell.c
+++ b/src/nvim/spell.c
@@ -1070,7 +1070,7 @@ static char_u *repl_to = NULL;
//
// Returns the length of the word in bytes, also when it's OK, so that the
// caller can skip over the word.
-int
+size_t
spell_check (
win_T *wp, // current window
char_u *ptr,
@@ -1081,9 +1081,9 @@ spell_check (
{
matchinf_T mi; // Most things are put in "mi" so that it can
// be passed to functions quickly.
- int nrlen = 0; // found a number first
+ size_t nrlen = 0; // found a number first
int c;
- int wrongcaplen = 0;
+ size_t wrongcaplen = 0;
int lpi;
bool count_word = docount;
@@ -1106,7 +1106,7 @@ spell_check (
mi.mi_end = skiphex(ptr + 2);
else
mi.mi_end = skipdigits(ptr);
- nrlen = (int)(mi.mi_end - ptr);
+ nrlen = (size_t)(mi.mi_end - ptr);
}
// Find the normal end of the word (until the next non-word character).
@@ -1121,7 +1121,7 @@ spell_check (
// Check word starting with capital letter.
c = PTR2CHAR(ptr);
if (!SPELL_ISUPPER(c))
- wrongcaplen = (int)(mi.mi_fend - ptr);
+ wrongcaplen = (size_t)(mi.mi_fend - ptr);
}
}
if (capcol != NULL)
@@ -1141,8 +1141,7 @@ spell_check (
if (*mi.mi_fend != NUL)
mb_ptr_adv(mi.mi_fend);
- (void)spell_casefold(ptr, (int)(mi.mi_fend - ptr), mi.mi_fword,
- MAXWLEN + 1);
+ (void)spell_casefold(ptr, (int)(mi.mi_fend - ptr), mi.mi_fword, MAXWLEN + 1);
mi.mi_fwordlen = (int)STRLEN(mi.mi_fword);
// The word is bad unless we recognize it.
@@ -1209,7 +1208,7 @@ spell_check (
}
if (has_mbyte) {
- return (*mb_ptr2len)(ptr);
+ return (size_t)(*mb_ptr2len)(ptr);
}
return 1;
} else if (mi.mi_end == ptr)
@@ -1257,7 +1256,7 @@ spell_check (
return wrongcaplen;
}
- return (int)(mi.mi_end - ptr);
+ return (size_t)(mi.mi_end - ptr);
}
// Check if the word at "mip->mi_word" is in the tree.
@@ -2046,7 +2045,7 @@ static bool no_spell_checking(win_T *wp)
// For Insert mode completion "dir" is BACKWARD and "curline" is true: move
// to after badly spelled word before the cursor.
// Return 0 if not found, length of the badly spelled word otherwise.
-int
+size_t
spell_move_to (
win_T *wp,
int dir, // FORWARD or BACKWARD
@@ -2058,17 +2057,17 @@ spell_move_to (
{
linenr_T lnum;
pos_T found_pos;
- int found_len = 0;
+ size_t found_len = 0;
char_u *line;
char_u *p;
char_u *endp;
hlf_T attr = HLF_COUNT;
- int len;
+ size_t len;
int has_syntax = syntax_present(wp);
int col;
bool can_spell;
char_u *buf = NULL;
- int buflen = 0;
+ size_t buflen = 0;
int skip = 0;
int capcol = -1;
bool found_one = false;
@@ -2092,7 +2091,7 @@ spell_move_to (
while (!got_int) {
line = ml_get_buf(wp->w_buffer, lnum, FALSE);
- len = (int)STRLEN(line);
+ len = STRLEN(line);
if (buflen < len + MAXWLEN + 2) {
xfree(buf);
buflen = len + MAXWLEN + 2;
@@ -2123,8 +2122,8 @@ spell_move_to (
STRCPY(buf, line);
if (lnum < wp->w_buffer->b_ml.ml_line_count)
spell_cat_line(buf + STRLEN(buf),
- ml_get_buf(wp->w_buffer, lnum + 1, FALSE), MAXWLEN);
-
+ ml_get_buf(wp->w_buffer, lnum + 1, FALSE),
+ MAXWLEN);
p = buf + skip;
endp = buf + len;
while (p < endp) {
@@ -2149,9 +2148,10 @@ spell_move_to (
|| lnum != wp->w_cursor.lnum
|| (lnum == wp->w_cursor.lnum
&& (wrapped
- || (colnr_T)(curline ? p - buf + len
- : p - buf)
- > wp->w_cursor.col))) {
+ || ((colnr_T)(curline
+ ? p - buf + (ptrdiff_t)len
+ : p - buf)
+ > wp->w_cursor.col)))) {
if (has_syntax) {
col = (int)(p - buf);
(void)syn_get_id(wp, lnum, (colnr_T)col,
@@ -2176,7 +2176,8 @@ spell_move_to (
} else if (curline)
// Insert mode completion: put cursor after
// the bad word.
- found_pos.col += len;
+ assert(len <= INT_MAX);
+ found_pos.col += (int)len;
found_len = len;
}
} else
@@ -2186,7 +2187,8 @@ spell_move_to (
// advance to character after the word
p += len;
- capcol -= len;
+ assert(len <= INT_MAX);
+ capcol -= (int)len;
}
if (dir == BACKWARD && found_pos.lnum != 0) {
@@ -8770,8 +8772,11 @@ spell_find_suggest (
su->su_badptr = badptr;
if (badlen != 0)
su->su_badlen = badlen;
- else
- su->su_badlen = spell_check(curwin, su->su_badptr, &attr, NULL, false);
+ else {
+ size_t tmplen = spell_check(curwin, su->su_badptr, &attr, NULL, false);
+ assert(tmplen <= INT_MAX);
+ su->su_badlen = (int)tmplen;
+ }
su->su_maxcount = maxcount;
su->su_maxscore = SCORE_MAXINIT;
diff --git a/src/nvim/strings.c b/src/nvim/strings.c
index de70397c30..b876753d57 100644
--- a/src/nvim/strings.c
+++ b/src/nvim/strings.c
@@ -137,7 +137,7 @@ char_u *vim_strsave_shellescape(const char_u *string,
{
char_u *d;
char_u *escaped_string;
- int l;
+ size_t l;
int csh_like;
/* Only csh and similar shells expand '!' within single quotes. For sh and
@@ -189,7 +189,7 @@ char_u *vim_strsave_shellescape(const char_u *string,
}
if (do_special && find_cmdline_var(p, &l) >= 0) {
*d++ = '\\'; /* insert backslash */
- while (--l >= 0) /* copy the var */
+ while (--l != SIZE_MAX) /* copy the var */
*d++ = *p++;
continue;
}
diff --git a/src/nvim/window.c b/src/nvim/window.c
index caa7ecc041..4f31c09eeb 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -86,7 +86,7 @@ do_window (
char_u *ptr;
linenr_T lnum = -1;
int type = FIND_DEFINE;
- int len;
+ size_t len;
char_u cbuf[40];
if (Prenum == 0)
@@ -418,8 +418,8 @@ wingotofile:
if ((len = find_ident_under_cursor(&ptr, FIND_IDENT)) == 0)
break;
find_pattern_in_path(ptr, 0, len, TRUE,
- Prenum == 0 ? TRUE : FALSE, type,
- Prenum1, ACTION_SPLIT, (linenr_T)1, (linenr_T)MAXLNUM);
+ Prenum == 0 ? TRUE : FALSE,
+ type, Prenum1, ACTION_SPLIT, 1, MAXLNUM);
curwin->w_set_curswant = TRUE;
break;
@@ -4830,17 +4830,16 @@ static void frame_add_height(frame_T *frp, int n)
char_u *grab_file_name(long count, linenr_T *file_lnum)
{
if (VIsual_active) {
- int len;
+ size_t len;
char_u *ptr;
-
if (get_visual_text(NULL, &ptr, &len) == FAIL)
return NULL;
return find_file_name_in_path(ptr, len,
- FNAME_MESS|FNAME_EXP|FNAME_REL, count, curbuf->b_ffname);
+ FNAME_MESS|FNAME_EXP|FNAME_REL,
+ count, curbuf->b_ffname);
}
return file_name_at_cursor(FNAME_MESS|FNAME_HYP|FNAME_EXP|FNAME_REL, count,
- file_lnum);
-
+ file_lnum);
}
/*
@@ -4878,7 +4877,7 @@ file_name_in_line (
)
{
char_u *ptr;
- int len;
+ size_t len;
/*
* search forward for what could be the start of a file name
@@ -4897,7 +4896,7 @@ file_name_in_line (
* Go one char back to ":" before "//" even when ':' is not in 'isfname'.
*/
while (ptr > line) {
- if (has_mbyte && (len = (*mb_head_off)(line, ptr - 1)) > 0)
+ if (has_mbyte && (len = (size_t)((*mb_head_off)(line, ptr - 1))) > 0)
ptr -= len + 1;
else if (vim_isfilec(ptr[-1])
|| ((options & FNAME_HYP) && path_is_url(ptr - 1)))
@@ -4914,7 +4913,7 @@ file_name_in_line (
while (vim_isfilec(ptr[len])
|| ((options & FNAME_HYP) && path_is_url(ptr + len)))
if (has_mbyte)
- len += (*mb_ptr2len)(ptr + len);
+ len += (size_t)(*mb_ptr2len)(ptr + len);
else
++len;