diff options
-rw-r--r-- | src/nvim/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/nvim/edit.c | 20 | ||||
-rw-r--r-- | src/nvim/eval.c | 67 | ||||
-rw-r--r-- | src/nvim/ex_docmd.c | 98 | ||||
-rw-r--r-- | src/nvim/file_search.c | 14 | ||||
-rw-r--r-- | src/nvim/globals.h | 2 | ||||
-rw-r--r-- | src/nvim/if_cscope.c | 8 | ||||
-rw-r--r-- | src/nvim/misc2.c | 4 | ||||
-rw-r--r-- | src/nvim/normal.c | 162 | ||||
-rw-r--r-- | src/nvim/ops.c | 7 | ||||
-rw-r--r-- | src/nvim/os/env.c | 13 | ||||
-rw-r--r-- | src/nvim/path.c | 24 | ||||
-rw-r--r-- | src/nvim/screen.c | 10 | ||||
-rw-r--r-- | src/nvim/search.c | 14 | ||||
-rw-r--r-- | src/nvim/spell.c | 51 | ||||
-rw-r--r-- | src/nvim/strings.c | 4 | ||||
-rw-r--r-- | src/nvim/window.c | 21 |
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; |