Merge pull request #19077 from dundargoc/refactor/conversion

refactor: enable -Wconversion warning for ex_cmds.c
This commit is contained in:
bfredl 2022-06-27 10:09:33 +02:00 committed by GitHub
commit f10489d9c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 106 additions and 115 deletions

View File

@ -161,7 +161,6 @@ list(REMOVE_ITEM NVIM_SOURCES ${to_remove})
# Legacy files that do not yet pass -Wconversion. # Legacy files that do not yet pass -Wconversion.
set(CONV_SOURCES set(CONV_SOURCES
ex_cmds.c
fileio.c fileio.c
lua/treesitter.c lua/treesitter.c
mbyte.c mbyte.c

View File

@ -144,17 +144,15 @@ void do_ascii(const exarg_T *const eap)
dig = (char *)get_digraph_for_char(cval); dig = (char *)get_digraph_for_char(cval);
if (dig != NULL) { if (dig != NULL) {
iobuff_len += ( iobuff_len += (size_t)vim_snprintf((char *)IObuff + iobuff_len,
vim_snprintf((char *)IObuff + iobuff_len, sizeof(IObuff) - iobuff_len,
sizeof(IObuff) - iobuff_len, _("<%s>%s%s %d, Hex %02x, Oct %03o, Digr %s"),
_("<%s>%s%s %d, Hex %02x, Oct %03o, Digr %s"), transchar(c), buf1, buf2, cval, cval, cval, dig);
transchar(c), buf1, buf2, cval, cval, cval, dig));
} else { } else {
iobuff_len += ( iobuff_len += (size_t)vim_snprintf((char *)IObuff + iobuff_len,
vim_snprintf((char *)IObuff + iobuff_len, sizeof(IObuff) - iobuff_len,
sizeof(IObuff) - iobuff_len, _("<%s>%s%s %d, Hex %02x, Octal %03o"),
_("<%s>%s%s %d, Hex %02x, Octal %03o"), transchar(c), buf1, buf2, cval, cval, cval);
transchar(c), buf1, buf2, cval, cval, cval));
} }
c = cc[ci++]; c = cc[ci++];
@ -190,25 +188,23 @@ void do_ascii(const exarg_T *const eap)
if (utf_iscomposing(c)) { if (utf_iscomposing(c)) {
IObuff[iobuff_len++] = ' '; // Draw composing char on top of a space. IObuff[iobuff_len++] = ' '; // Draw composing char on top of a space.
} }
iobuff_len += utf_char2bytes(c, (char *)IObuff + iobuff_len); iobuff_len += (size_t)utf_char2bytes(c, (char *)IObuff + iobuff_len);
dig = (char *)get_digraph_for_char(c); dig = (char *)get_digraph_for_char(c);
if (dig != NULL) { if (dig != NULL) {
iobuff_len += ( iobuff_len += (size_t)vim_snprintf((char *)IObuff + iobuff_len,
vim_snprintf((char *)IObuff + iobuff_len, sizeof(IObuff) - iobuff_len,
sizeof(IObuff) - iobuff_len, (c < 0x10000
(c < 0x10000 ? _("> %d, Hex %04x, Oct %o, Digr %s")
? _("> %d, Hex %04x, Oct %o, Digr %s") : _("> %d, Hex %08x, Oct %o, Digr %s")),
: _("> %d, Hex %08x, Oct %o, Digr %s")), c, c, c, dig);
c, c, c, dig));
} else { } else {
iobuff_len += ( iobuff_len += (size_t)vim_snprintf((char *)IObuff + iobuff_len,
vim_snprintf((char *)IObuff + iobuff_len, sizeof(IObuff) - iobuff_len,
sizeof(IObuff) - iobuff_len, (c < 0x10000
(c < 0x10000 ? _("> %d, Hex %04x, Octal %o")
? _("> %d, Hex %04x, Octal %o") : _("> %d, Hex %08x, Octal %o")),
: _("> %d, Hex %08x, Octal %o")), c, c, c);
c, c, c));
} }
if (ci == MAX_MCO) { if (ci == MAX_MCO) {
break; break;
@ -254,10 +250,10 @@ void ex_align(exarg_T *eap)
* if invalid value, use 80 * if invalid value, use 80
*/ */
if (width <= 0) { if (width <= 0) {
width = curbuf->b_p_tw; width = (int)curbuf->b_p_tw;
} }
if (width == 0 && curbuf->b_p_wm > 0) { if (width == 0 && curbuf->b_p_wm > 0) {
width = curwin->w_width_inner - curbuf->b_p_wm; width = curwin->w_width_inner - (int)curbuf->b_p_wm;
} }
if (width <= 0) { if (width <= 0) {
width = 80; width = 80;
@ -325,7 +321,6 @@ static int linelen(int *has_tab)
char *line; char *line;
char *first; char *first;
char *last; char *last;
int save;
int len; int len;
// Get the line. If it's empty bail out early (could be the empty string // Get the line. If it's empty bail out early (could be the empty string
@ -340,7 +335,7 @@ static int linelen(int *has_tab)
// find the character after the last non-blank character // find the character after the last non-blank character
for (last = first + STRLEN(first); for (last = first + STRLEN(first);
last > first && ascii_iswhite(last[-1]); last--) {} last > first && ascii_iswhite(last[-1]); last--) {}
save = (char_u)(*last); char save = *last;
*last = NUL; *last = NUL;
// Get line length. // Get line length.
len = linetabsize((char_u *)line); len = linetabsize((char_u *)line);
@ -428,10 +423,10 @@ static int sort_compare(const void *s1, const void *s2)
// guarantee that the first pointer becomes invalid when obtaining the // guarantee that the first pointer becomes invalid when obtaining the
// second one. // second one.
memcpy(sortbuf1, ml_get(l1.lnum) + l1.st_u.line.start_col_nr, memcpy(sortbuf1, ml_get(l1.lnum) + l1.st_u.line.start_col_nr,
l1.st_u.line.end_col_nr - l1.st_u.line.start_col_nr + 1); (size_t)(l1.st_u.line.end_col_nr - l1.st_u.line.start_col_nr + 1));
sortbuf1[l1.st_u.line.end_col_nr - l1.st_u.line.start_col_nr] = NUL; sortbuf1[l1.st_u.line.end_col_nr - l1.st_u.line.start_col_nr] = NUL;
memcpy(sortbuf2, ml_get(l2.lnum) + l2.st_u.line.start_col_nr, memcpy(sortbuf2, ml_get(l2.lnum) + l2.st_u.line.start_col_nr,
l2.st_u.line.end_col_nr - l2.st_u.line.start_col_nr + 1); (size_t)(l2.st_u.line.end_col_nr - l2.st_u.line.start_col_nr + 1));
sortbuf2[l2.st_u.line.end_col_nr - l2.st_u.line.start_col_nr] = NUL; sortbuf2[l2.st_u.line.end_col_nr - l2.st_u.line.start_col_nr] = NUL;
result = string_compare(sortbuf1, sortbuf2); result = string_compare(sortbuf1, sortbuf2);
@ -451,7 +446,7 @@ void ex_sort(exarg_T *eap)
int len; int len;
linenr_T lnum; linenr_T lnum;
long maxlen = 0; long maxlen = 0;
size_t count = eap->line2 - eap->line1 + 1; size_t count = (size_t)(eap->line2 - eap->line1) + 1;
size_t i; size_t i;
char *p; char *p;
char *s; char *s;
@ -635,8 +630,8 @@ void ex_sort(exarg_T *eap)
} }
// Allocate a buffer that can hold the longest line. // Allocate a buffer that can hold the longest line.
sortbuf1 = xmalloc(maxlen + 1); sortbuf1 = xmalloc((size_t)maxlen + 1);
sortbuf2 = xmalloc(maxlen + 1); sortbuf2 = xmalloc((size_t)maxlen + 1);
// Sort the array of line numbers. Note: can't be interrupted! // Sort the array of line numbers. Note: can't be interrupted!
qsort((void *)nrs, count, sizeof(sorti_T), sort_compare); qsort((void *)nrs, count, sizeof(sorti_T), sort_compare);
@ -660,7 +655,7 @@ void ex_sort(exarg_T *eap)
s = (char *)ml_get(get_lnum); s = (char *)ml_get(get_lnum);
size_t bytelen = STRLEN(s) + 1; // include EOL in bytelen size_t bytelen = STRLEN(s) + 1; // include EOL in bytelen
old_count += bytelen; old_count += (bcount_t)bytelen;
if (!unique || i == 0 || string_compare(s, sortbuf1) != 0) { if (!unique || i == 0 || string_compare(s, sortbuf1) != 0) {
// Copy the line into a buffer, it may become invalid in // Copy the line into a buffer, it may become invalid in
// ml_append(). And it's needed for "unique". // ml_append(). And it's needed for "unique".
@ -668,7 +663,7 @@ void ex_sort(exarg_T *eap)
if (ml_append(lnum++, sortbuf1, (colnr_T)0, false) == FAIL) { if (ml_append(lnum++, sortbuf1, (colnr_T)0, false) == FAIL) {
break; break;
} }
new_count += bytelen; new_count += (bcount_t)bytelen;
} }
fast_breakcheck(); fast_breakcheck();
if (got_int) { if (got_int) {
@ -686,21 +681,21 @@ void ex_sort(exarg_T *eap)
} }
// Adjust marks for deleted (or added) lines and prepare for displaying. // Adjust marks for deleted (or added) lines and prepare for displaying.
deleted = (long)(count - (lnum - eap->line2)); deleted = (long)count - (lnum - eap->line2);
if (deleted > 0) { if (deleted > 0) {
mark_adjust(eap->line2 - deleted, eap->line2, (long)MAXLNUM, -deleted, mark_adjust(eap->line2 - (linenr_T)deleted, eap->line2, (long)MAXLNUM, (linenr_T)(-deleted),
kExtmarkNOOP); kExtmarkNOOP);
msgmore(-deleted); msgmore(-deleted);
} else if (deleted < 0) { } else if (deleted < 0) {
mark_adjust(eap->line2, MAXLNUM, -deleted, 0L, kExtmarkNOOP); mark_adjust(eap->line2, MAXLNUM, (linenr_T)(-deleted), 0L, kExtmarkNOOP);
} }
if (change_occurred || deleted != 0) { if (change_occurred || deleted != 0) {
extmark_splice(curbuf, eap->line1 - 1, 0, extmark_splice(curbuf, eap->line1 - 1, 0,
count, 0, old_count, (int)count, 0, old_count,
lnum - eap->line2, 0, new_count, kExtmarkUndo); lnum - eap->line2, 0, new_count, kExtmarkUndo);
changed_lines(eap->line1, 0, eap->line2 + 1, -deleted, true); changed_lines(eap->line1, 0, eap->line2 + 1, (linenr_T)(-deleted), true);
} }
curwin->w_cursor.lnum = eap->line1; curwin->w_cursor.lnum = eap->line1;
@ -757,7 +752,7 @@ void ex_retab(exarg_T *eap)
new_vts_array = curbuf->b_p_vts_array; new_vts_array = curbuf->b_p_vts_array;
new_ts_str = NULL; new_ts_str = NULL;
} else { } else {
new_ts_str = xstrnsave(new_ts_str, eap->arg - new_ts_str); new_ts_str = xstrnsave(new_ts_str, (size_t)(eap->arg - new_ts_str));
} }
for (lnum = eap->line1; !got_int && lnum <= eap->line2; lnum++) { for (lnum = eap->line1; !got_int && lnum <= eap->line2; lnum++) {
ptr = (char *)ml_get(lnum); ptr = (char *)ml_get(lnum);
@ -786,7 +781,7 @@ void ex_retab(exarg_T *eap)
if (!curbuf->b_p_et) { if (!curbuf->b_p_et) {
int t, s; int t, s;
tabstop_fromto(start_vcol, vcol, tabstop_fromto((colnr_T)start_vcol, (colnr_T)vcol,
curbuf->b_p_ts, new_vts_array, &t, &s); curbuf->b_p_ts, new_vts_array, &t, &s);
num_tabs = t; num_tabs = t;
num_spaces = s; num_spaces = s;
@ -810,7 +805,7 @@ void ex_retab(exarg_T *eap)
emsg(_(e_resulting_text_too_long)); emsg(_(e_resulting_text_too_long));
break; break;
} }
new_line = xmalloc(new_len); new_line = xmalloc((size_t)new_len);
if (start_col > 0) { if (start_col > 0) {
memmove(new_line, ptr, (size_t)start_col); memmove(new_line, ptr, (size_t)start_col);
@ -1139,7 +1134,7 @@ void do_bang(int addr_count, exarg_T *eap, bool forceit, bool do_in, bool do_out
char *t; char *t;
char *p; char *p;
char *trailarg; char *trailarg;
int len; size_t len;
int scroll_save = msg_scroll; int scroll_save = msg_scroll;
// //
@ -1163,9 +1158,9 @@ void do_bang(int addr_count, exarg_T *eap, bool forceit, bool do_in, bool do_out
bool ins_prevcmd = forceit; bool ins_prevcmd = forceit;
trailarg = arg; trailarg = arg;
do { do {
len = (int)STRLEN(trailarg) + 1; len = STRLEN(trailarg) + 1;
if (newcmd != NULL) { if (newcmd != NULL) {
len += (int)STRLEN(newcmd); len += STRLEN(newcmd);
} }
if (ins_prevcmd) { if (ins_prevcmd) {
if (prevcmd == NULL) { if (prevcmd == NULL) {
@ -1173,7 +1168,7 @@ void do_bang(int addr_count, exarg_T *eap, bool forceit, bool do_in, bool do_out
xfree(newcmd); xfree(newcmd);
return; return;
} }
len += (int)STRLEN(prevcmd); len += STRLEN(prevcmd);
} }
t = xmalloc(len); t = xmalloc(len);
*t = NUL; *t = NUL;
@ -1374,7 +1369,7 @@ static void do_filter(linenr_T line1, linenr_T line2, exarg_T *eap, char *cmd, b
read_linecount = curbuf->b_ml.ml_line_count; read_linecount = curbuf->b_ml.ml_line_count;
// Pass on the kShellOptDoOut flag when the output is being redirected. // Pass on the kShellOptDoOut flag when the output is being redirected.
call_shell((char_u *)cmd_buf, kShellOptFilter | shell_flags, NULL); call_shell((char_u *)cmd_buf, (ShellOpts)(kShellOptFilter | shell_flags), NULL);
xfree(cmd_buf); xfree(cmd_buf);
did_check_timestamps = FALSE; did_check_timestamps = FALSE;
@ -1526,7 +1521,7 @@ void do_shell(char *cmd, int flags)
// This ui_cursor_goto is required for when the '\n' resulted in a "delete line // This ui_cursor_goto is required for when the '\n' resulted in a "delete line
// 1" command to the terminal. // 1" command to the terminal.
ui_cursor_goto(msg_row, msg_col); ui_cursor_goto(msg_row, msg_col);
(void)call_shell((char_u *)cmd, flags, NULL); (void)call_shell((char_u *)cmd, (ShellOpts)flags, NULL);
msg_didout = true; msg_didout = true;
did_check_timestamps = false; did_check_timestamps = false;
need_check_timestamps = true; need_check_timestamps = true;
@ -1677,9 +1672,9 @@ void append_redir(char *const buf, const size_t buflen, const char *const opt,
} }
if (p != NULL) { if (p != NULL) {
*end = ' '; // not really needed? Not with sh, ksh or bash *end = ' '; // not really needed? Not with sh, ksh or bash
vim_snprintf(end + 1, (size_t)(buflen - (end + 1 - buf)), opt, fname); vim_snprintf(end + 1, (size_t)((ptrdiff_t)buflen - (end + 1 - buf)), opt, fname);
} else { } else {
vim_snprintf(end, (size_t)(buflen - (end - buf)), " %s %s", opt, fname); vim_snprintf(end, (size_t)((ptrdiff_t)buflen - (end - buf)), " %s %s", opt, fname);
} }
} }
@ -2439,7 +2434,7 @@ int do_ecmd(int fnum, char *ffname, char *sfname, exarg_T *eap, linenr_T newlnum
linenr_T tlnum = 0; linenr_T tlnum = 0;
if (command != NULL) { if (command != NULL) {
tlnum = atol(command); tlnum = (linenr_T)atol(command);
if (tlnum <= 0) { if (tlnum <= 0) {
tlnum = 1L; tlnum = 1L;
} }
@ -2981,7 +2976,7 @@ void ex_append(exarg_T *eap)
if (p == NULL) { if (p == NULL) {
p = eap->nextcmd + STRLEN(eap->nextcmd); p = eap->nextcmd + STRLEN(eap->nextcmd);
} }
theline = xstrnsave(eap->nextcmd, p - eap->nextcmd); theline = xstrnsave(eap->nextcmd, (size_t)(p - eap->nextcmd));
if (*p != NUL) { if (*p != NUL) {
p++; p++;
} }
@ -3155,38 +3150,38 @@ void ex_z(exarg_T *eap)
switch (*kind) { switch (*kind) {
case '-': case '-':
start = lnum - bigness * (linenr_T)(x - kind) + 1; start = lnum - (linenr_T)bigness * (linenr_T)(x - kind) + 1;
end = start + bigness - 1; end = start + (linenr_T)bigness - 1;
curs = end; curs = end;
break; break;
case '=': case '=':
start = lnum - (bigness + 1) / 2 + 1; start = lnum - ((linenr_T)bigness + 1) / 2 + 1;
end = lnum + (bigness + 1) / 2 - 1; end = lnum + ((linenr_T)bigness + 1) / 2 - 1;
curs = lnum; curs = lnum;
minus = 1; minus = 1;
break; break;
case '^': case '^':
start = lnum - bigness * 2; start = lnum - (linenr_T)bigness * 2;
end = lnum - bigness; end = lnum - (linenr_T)bigness;
curs = lnum - bigness; curs = lnum - (linenr_T)bigness;
break; break;
case '.': case '.':
start = lnum - (bigness + 1) / 2 + 1; start = lnum - ((linenr_T)bigness + 1) / 2 + 1;
end = lnum + (bigness + 1) / 2 - 1; end = lnum + ((linenr_T)bigness + 1) / 2 - 1;
curs = end; curs = end;
break; break;
default: // '+' default: // '+'
start = lnum; start = lnum;
if (*kind == '+') { if (*kind == '+') {
start += bigness * (linenr_T)(x - kind - 1) + 1; start += (linenr_T)bigness * (linenr_T)(x - kind - 1) + 1;
} else if (eap->addr_count == 0) { } else if (eap->addr_count == 0) {
++start; ++start;
} }
end = start + bigness - 1; end = start + (linenr_T)bigness - 1;
curs = end; curs = end;
break; break;
} }
@ -3320,7 +3315,7 @@ static bool sub_joining_lines(exarg_T *eap, char *pat, char *sub, char *cmd, boo
// plus one extra line if not at the end of file. // plus one extra line if not at the end of file.
+ (eap->line2 < curbuf->b_ml.ml_line_count ? 1 : 0); + (eap->line2 < curbuf->b_ml.ml_line_count ? 1 : 0);
if (joined_lines_count > 1) { if (joined_lines_count > 1) {
do_join(joined_lines_count, FALSE, TRUE, FALSE, true); do_join((size_t)joined_lines_count, false, true, false, true);
sub_nsubs = joined_lines_count - 1; sub_nsubs = joined_lines_count - 1;
sub_nlines = 1; sub_nlines = 1;
do_sub_msg(false); do_sub_msg(false);
@ -3359,7 +3354,7 @@ static char *sub_grow_buf(char **new_start, int needed_len)
// substitution into (and some extra space to avoid // substitution into (and some extra space to avoid
// too many calls to xmalloc()/free()). // too many calls to xmalloc()/free()).
new_start_len = needed_len + 50; new_start_len = needed_len + 50;
*new_start = xmalloc(new_start_len); *new_start = xmalloc((size_t)new_start_len);
**new_start = NUL; **new_start = NUL;
new_end = *new_start; new_end = *new_start;
} else { } else {
@ -3367,10 +3362,10 @@ static char *sub_grow_buf(char **new_start, int needed_len)
// substitution into. If not, make it larger (with a bit // substitution into. If not, make it larger (with a bit
// extra to avoid too many calls to xmalloc()/free()). // extra to avoid too many calls to xmalloc()/free()).
size_t len = STRLEN(*new_start); size_t len = STRLEN(*new_start);
needed_len += len; needed_len += (int)len;
if (needed_len > new_start_len) { if (needed_len > new_start_len) {
new_start_len = needed_len + 50; new_start_len = needed_len + 50;
*new_start = xrealloc(*new_start, new_start_len); *new_start = xrealloc(*new_start, (size_t)new_start_len);
} }
new_end = *new_start + len; new_end = *new_start + len;
} }
@ -3487,7 +3482,7 @@ static int do_sub(exarg_T *eap, proftime_T timeout, long cmdpreview_ns, handle_T
PreviewLines preview_lines = { KV_INITIAL_VALUE, 0 }; PreviewLines preview_lines = { KV_INITIAL_VALUE, 0 };
static int pre_hl_id = 0; static int pre_hl_id = 0;
pos_T old_cursor = curwin->w_cursor; pos_T old_cursor = curwin->w_cursor;
int start_nsubs; long start_nsubs;
bool did_save = false; bool did_save = false;
@ -3591,7 +3586,7 @@ static int do_sub(exarg_T *eap, proftime_T timeout, long cmdpreview_ns, handle_T
return 0; return 0;
} }
eap->line1 = eap->line2; eap->line1 = eap->line2;
eap->line2 += i - 1; eap->line2 += (linenr_T)i - 1;
if (eap->line2 > curbuf->b_ml.ml_line_count) { if (eap->line2 > curbuf->b_ml.ml_line_count) {
eap->line2 = curbuf->b_ml.ml_line_count; eap->line2 = curbuf->b_ml.ml_line_count;
} }
@ -3873,10 +3868,10 @@ static int do_sub(exarg_T *eap, proftime_T timeout, long cmdpreview_ns, handle_T
ec += numw; ec += numw;
} }
prompt = xmallocz(ec + 1); prompt = xmallocz((size_t)ec + 1);
memset(prompt, ' ', sc); memset(prompt, ' ', (size_t)sc);
memset(prompt + sc, '^', ec - sc + 1); memset(prompt + sc, '^', (size_t)(ec - sc) + 1);
resp = getcmdline_prompt(-1, prompt, 0, EXPAND_NOTHING, NULL, CALLBACK_NONE); resp = getcmdline_prompt((char)(-1), prompt, 0, EXPAND_NOTHING, NULL, CALLBACK_NONE);
msg_putchar('\n'); msg_putchar('\n');
xfree(prompt); xfree(prompt);
if (resp != NULL) { if (resp != NULL) {
@ -3949,8 +3944,8 @@ static int do_sub(exarg_T *eap, proftime_T timeout, long cmdpreview_ns, handle_T
msg_ext_set_kind("confirm_sub"); msg_ext_set_kind("confirm_sub");
smsg_attr(HL_ATTR(HLF_R), // Same highlight as wait_return(). smsg_attr(HL_ATTR(HLF_R), // Same highlight as wait_return().
_("replace with %s (y/n/a/q/l/^E/^Y)?"), sub); _("replace with %s (y/n/a/q/l/^E/^Y)?"), sub);
msg_no_more = FALSE; msg_no_more = false;
msg_scroll = i; msg_scroll = (int)i;
showruler(true); showruler(true);
ui_cursor_goto(msg_row, msg_col); ui_cursor_goto(msg_row, msg_col);
RedrawingDisabled = temp; RedrawingDisabled = temp;
@ -4031,7 +4026,7 @@ static int do_sub(exarg_T *eap, proftime_T timeout, long cmdpreview_ns, handle_T
// go beyond the last line of the buffer. // go beyond the last line of the buffer.
if (nmatch > curbuf->b_ml.ml_line_count - sub_firstlnum + 1) { if (nmatch > curbuf->b_ml.ml_line_count - sub_firstlnum + 1) {
nmatch = curbuf->b_ml.ml_line_count - sub_firstlnum + 1; nmatch = curbuf->b_ml.ml_line_count - sub_firstlnum + 1;
current_match.end.lnum = sub_firstlnum + nmatch; current_match.end.lnum = sub_firstlnum + (linenr_T)nmatch;
skip_match = true; skip_match = true;
} }
@ -4040,7 +4035,7 @@ static int do_sub(exarg_T *eap, proftime_T timeout, long cmdpreview_ns, handle_T
/* For a multi-line match, make a copy of the last matched */ \ /* For a multi-line match, make a copy of the last matched */ \
/* line and continue in that one. */ \ /* line and continue in that one. */ \
if (nmatch > 1) { \ if (nmatch > 1) { \
sub_firstlnum += nmatch - 1; \ sub_firstlnum += (linenr_T)nmatch - 1; \
xfree(sub_firstline); \ xfree(sub_firstline); \
sub_firstline = (char *)vim_strsave(ml_get(sub_firstlnum)); \ sub_firstline = (char *)vim_strsave(ml_get(sub_firstlnum)); \
/* When going beyond the last line, stop substituting. */ \ /* When going beyond the last line, stop substituting. */ \
@ -4065,12 +4060,12 @@ static int do_sub(exarg_T *eap, proftime_T timeout, long cmdpreview_ns, handle_T
if (cmdpreview && !has_second_delim) { if (cmdpreview && !has_second_delim) {
current_match.start.col = regmatch.startpos[0].col; current_match.start.col = regmatch.startpos[0].col;
if (current_match.end.lnum == 0) { if (current_match.end.lnum == 0) {
current_match.end.lnum = sub_firstlnum + nmatch - 1; current_match.end.lnum = sub_firstlnum + (linenr_T)nmatch - 1;
} }
current_match.end.col = regmatch.endpos[0].col; current_match.end.col = regmatch.endpos[0].col;
ADJUST_SUB_FIRSTLNUM(); ADJUST_SUB_FIRSTLNUM();
lnum += nmatch - 1; lnum += (linenr_T)nmatch - 1;
goto skip; goto skip;
} }
@ -4118,13 +4113,13 @@ static int do_sub(exarg_T *eap, proftime_T timeout, long cmdpreview_ns, handle_T
if (nmatch == 1) { if (nmatch == 1) {
p1 = sub_firstline; p1 = sub_firstline;
} else { } else {
p1 = (char *)ml_get(sub_firstlnum + nmatch - 1); p1 = (char *)ml_get(sub_firstlnum + (linenr_T)nmatch - 1);
nmatch_tl += nmatch - 1; nmatch_tl += nmatch - 1;
} }
size_t copy_len = regmatch.startpos[0].col - copycol; size_t copy_len = (size_t)(regmatch.startpos[0].col - copycol);
new_end = sub_grow_buf(&new_start, new_end = sub_grow_buf(&new_start,
(STRLEN(p1) - regmatch.endpos[0].col) (colnr_T)STRLEN(p1) - regmatch.endpos[0].col
+ copy_len + sublen + 1); + (colnr_T)copy_len + sublen + 1);
// copy the text up to the part that matched // copy the text up to the part that matched
memmove(new_end, sub_firstline + copycol, copy_len); memmove(new_end, sub_firstline + copycol, copy_len);
@ -4132,7 +4127,7 @@ static int do_sub(exarg_T *eap, proftime_T timeout, long cmdpreview_ns, handle_T
// Finally, at this point we can know where the match actually will // Finally, at this point we can know where the match actually will
// start in the new text // start in the new text
int start_col = new_end - new_start; int start_col = (int)(new_end - new_start);
current_match.start.col = start_col; current_match.start.col = start_col;
textlock++; textlock++;
@ -4157,7 +4152,7 @@ static int do_sub(exarg_T *eap, proftime_T timeout, long cmdpreview_ns, handle_T
bcount_t replaced_bytes = 0; bcount_t replaced_bytes = 0;
lpos_T start = regmatch.startpos[0], end = regmatch.endpos[0]; lpos_T start = regmatch.startpos[0], end = regmatch.endpos[0];
for (i = 0; i < nmatch - 1; i++) { for (i = 0; i < nmatch - 1; i++) {
replaced_bytes += STRLEN(ml_get(lnum_start + i)) + 1; replaced_bytes += (bcount_t)STRLEN(ml_get((linenr_T)(lnum_start + i))) + 1;
} }
replaced_bytes += end.col - start.col; replaced_bytes += end.col - start.col;
@ -4200,7 +4195,7 @@ static int do_sub(exarg_T *eap, proftime_T timeout, long cmdpreview_ns, handle_T
p1 += utfc_ptr2len(p1) - 1; p1 += utfc_ptr2len(p1) - 1;
} }
} }
size_t new_endcol = STRLEN(new_start); colnr_T new_endcol = (colnr_T)STRLEN(new_start);
current_match.end.col = new_endcol; current_match.end.col = new_endcol;
current_match.end.lnum = lnum; current_match.end.lnum = lnum;
@ -4212,9 +4207,9 @@ static int do_sub(exarg_T *eap, proftime_T timeout, long cmdpreview_ns, handle_T
u_save_cursor(); u_save_cursor();
did_save = true; did_save = true;
} }
extmark_splice(curbuf, lnum_start - 1, start_col, extmark_splice(curbuf, (int)lnum_start - 1, start_col,
end.lnum - start.lnum, matchcols, replaced_bytes, end.lnum - start.lnum, matchcols, replaced_bytes,
lnum - lnum_start, subcols, sublen - 1, kExtmarkUndo); lnum - (linenr_T)lnum_start, subcols, sublen - 1, kExtmarkUndo);
} }
// 4. If subflags.do_all is set, find next match. // 4. If subflags.do_all is set, find next match.
@ -4283,13 +4278,13 @@ skip:
for (i = 0; i < nmatch_tl; i++) { for (i = 0; i < nmatch_tl; i++) {
ml_delete(lnum, false); ml_delete(lnum, false);
} }
mark_adjust(lnum, lnum + nmatch_tl - 1, mark_adjust(lnum, lnum + (linenr_T)nmatch_tl - 1,
(long)MAXLNUM, -nmatch_tl, kExtmarkNOOP); (long)MAXLNUM, (linenr_T)(-nmatch_tl), kExtmarkNOOP);
if (subflags.do_ask) { if (subflags.do_ask) {
deleted_lines(lnum, nmatch_tl); deleted_lines(lnum, (linenr_T)nmatch_tl);
} }
lnum--; lnum--;
line2 -= nmatch_tl; // nr of lines decreases line2 -= (linenr_T)nmatch_tl; // nr of lines decreases
nmatch_tl = 0; nmatch_tl = 0;
} }
@ -4385,7 +4380,7 @@ skip:
// the line number before the change (same as adding the number of // the line number before the change (same as adding the number of
// deleted lines). // deleted lines).
i = curbuf->b_ml.ml_line_count - old_line_count; i = curbuf->b_ml.ml_line_count - old_line_count;
changed_lines(first_line, 0, last_line - i, i, false); changed_lines(first_line, 0, last_line - (linenr_T)i, (linenr_T)i, false);
int64_t num_added = last_line - first_line; int64_t num_added = last_line - first_line;
int64_t num_removed = num_added - i; int64_t num_removed = num_added - i;
@ -4618,8 +4613,7 @@ void ex_global(exarg_T *eap)
if (global_busy) { if (global_busy) {
lnum = curwin->w_cursor.lnum; lnum = curwin->w_cursor.lnum;
match = vim_regexec_multi(&regmatch, curwin, curbuf, lnum, match = (int)vim_regexec_multi(&regmatch, curwin, curbuf, lnum, 0, NULL, NULL);
(colnr_T)0, NULL, NULL);
if ((type == 'g' && match) || (type == 'v' && !match)) { if ((type == 'g' && match) || (type == 'v' && !match)) {
global_exe_one(cmd, lnum); global_exe_one(cmd, lnum);
} }
@ -4627,8 +4621,7 @@ void ex_global(exarg_T *eap)
// pass 1: set marks for each (not) matching line // pass 1: set marks for each (not) matching line
for (lnum = eap->line1; lnum <= eap->line2 && !got_int; lnum++) { for (lnum = eap->line1; lnum <= eap->line2 && !got_int; lnum++) {
// a match on this line? // a match on this line?
match = vim_regexec_multi(&regmatch, curwin, curbuf, lnum, match = (int)vim_regexec_multi(&regmatch, curwin, curbuf, lnum, 0, NULL, NULL);
(colnr_T)0, NULL, NULL);
if (regmatch.regprog == NULL) { if (regmatch.regprog == NULL) {
break; // re-compiling regprog failed break; // re-compiling regprog failed
} }
@ -5004,7 +4997,7 @@ int help_heuristic(char *matched_string, int offset, int wrong_case)
if (matched_string[0] == '+' && matched_string[1] != NUL) { if (matched_string[0] == '+' && matched_string[1] != NUL) {
offset += 100; offset += 100;
} }
return (int)(100 * num_letters + STRLEN(matched_string) + offset); return 100 * num_letters + (int)STRLEN(matched_string) + offset;
} }
/// Compare functions for qsort() below, that checks the help heuristics number /// Compare functions for qsort() below, that checks the help heuristics number
@ -5185,7 +5178,7 @@ int find_help_tags(const char *arg, int *num_matches, char ***matches, bool keep
STRCPY(d, "CTRL-"); STRCPY(d, "CTRL-");
d += 5; d += 5;
if (*s < ' ') { if (*s < ' ') {
*d++ = *s + '@'; *d++ = (char)(*s + '@');
if (d[-1] == '\\') { if (d[-1] == '\\') {
*d++ = '\\'; // double a backslash *d++ = '\\'; // double a backslash
} }
@ -5655,7 +5648,7 @@ static void helptags_one(char *dir, const char *ext, const char *tagfname, bool
|| s[1] == '\0')) { || s[1] == '\0')) {
*p2 = '\0'; *p2 = '\0';
p1++; p1++;
size_t s_len= (p2 - p1) + STRLEN(fname) + 2; size_t s_len= (size_t)(p2 - p1) + STRLEN(fname) + 2;
s = xmalloc(s_len); s = xmalloc(s_len);
GA_APPEND(char *, &ga, s); GA_APPEND(char *, &ga, s);
snprintf(s, s_len, "%s\t%s", p1, fname); snprintf(s, s_len, "%s\t%s", p1, fname);
@ -5776,8 +5769,8 @@ static void do_helptags(char *dirname, bool add_help_tags, bool ignore_writeerr)
&& ASCII_ISALPHA(files[i][len - 2]) && ASCII_ISALPHA(files[i][len - 2])
&& TOLOWER_ASC(files[i][len - 1]) == 'x') { && TOLOWER_ASC(files[i][len - 1]) == 'x') {
// ".abx" -> language "ab" // ".abx" -> language "ab"
lang[0] = TOLOWER_ASC(files[i][len - 3]); lang[0] = (char)TOLOWER_ASC(files[i][len - 3]);
lang[1] = TOLOWER_ASC(files[i][len - 2]); lang[1] = (char)TOLOWER_ASC(files[i][len - 2]);
} else { } else {
continue; continue;
} }
@ -5791,8 +5784,8 @@ static void do_helptags(char *dirname, bool add_help_tags, bool ignore_writeerr)
if (j == ga.ga_len) { if (j == ga.ga_len) {
// New language, add it. // New language, add it.
ga_grow(&ga, 2); ga_grow(&ga, 2);
((char_u *)ga.ga_data)[ga.ga_len++] = lang[0]; ((char *)ga.ga_data)[ga.ga_len++] = lang[0];
((char_u *)ga.ga_data)[ga.ga_len++] = lang[1]; ((char *)ga.ga_data)[ga.ga_len++] = lang[1];
} }
} }
@ -5801,8 +5794,8 @@ static void do_helptags(char *dirname, bool add_help_tags, bool ignore_writeerr)
*/ */
for (j = 0; j < ga.ga_len; j += 2) { for (j = 0; j < ga.ga_len; j += 2) {
STRCPY(fname, "tags-xx"); STRCPY(fname, "tags-xx");
fname[5] = ((char_u *)ga.ga_data)[j]; fname[5] = ((char *)ga.ga_data)[j];
fname[6] = ((char_u *)ga.ga_data)[j + 1]; fname[6] = ((char *)ga.ga_data)[j + 1];
if (fname[5] == 'e' && fname[6] == 'n') { if (fname[5] == 'e' && fname[6] == 'n') {
// English is an exception: use ".txt" and "tags". // English is an exception: use ".txt" and "tags".
fname[4] = NUL; fname[4] = NUL;
@ -5909,7 +5902,7 @@ static int show_sub(exarg_T *eap, pos_T old_cusr, PreviewLines *preview_lines, i
if (lines.subresults.size > 0) { if (lines.subresults.size > 0) {
highest_num_line = kv_last(lines.subresults).end.lnum; highest_num_line = kv_last(lines.subresults).end.lnum;
col_width = log10(highest_num_line) + 1 + 3; col_width = (int)log10(highest_num_line) + 1 + 3;
} }
} }
@ -5954,7 +5947,7 @@ static int show_sub(exarg_T *eap, pos_T old_cusr, PreviewLines *preview_lines, i
line = ""; line = "";
} else { } else {
line = (char *)ml_get_buf(orig_buf, next_linenr, false); line = (char *)ml_get_buf(orig_buf, next_linenr, false);
line_size = strlen(line) + col_width + 1; line_size = strlen(line) + (size_t)col_width + 1;
// Reallocate if line not long enough // Reallocate if line not long enough
if (line_size > old_line_size) { if (line_size > old_line_size) {
@ -5977,9 +5970,9 @@ static int show_sub(exarg_T *eap, pos_T old_cusr, PreviewLines *preview_lines, i
} }
linenr_origbuf = match.end.lnum; linenr_origbuf = match.end.lnum;
bufhl_add_hl_pos_offset(cmdpreview_buf, cmdpreview_ns, hl_id, p_start, p_end, col_width); bufhl_add_hl_pos_offset(cmdpreview_buf, (int)cmdpreview_ns, hl_id, p_start, p_end, col_width);
} }
bufhl_add_hl_pos_offset(orig_buf, cmdpreview_ns, hl_id, match.start, match.end, 0); bufhl_add_hl_pos_offset(orig_buf, (int)cmdpreview_ns, hl_id, match.start, match.end, 0);
} }
xfree(str); xfree(str);
@ -5994,7 +5987,6 @@ static int show_sub(exarg_T *eap, pos_T old_cusr, PreviewLines *preview_lines, i
void ex_substitute(exarg_T *eap) void ex_substitute(exarg_T *eap)
{ {
(void)do_sub(eap, profile_zero(), 0, 0); (void)do_sub(eap, profile_zero(), 0, 0);
return;
} }
/// :substitute command preview callback. /// :substitute command preview callback.
@ -6102,7 +6094,7 @@ void ex_oldfiles(exarg_T *eap)
nr = prompt_for_number(false); nr = prompt_for_number(false);
msg_starthere(); msg_starthere();
if (nr > 0 && nr <= tv_list_len(l)) { if (nr > 0 && nr <= tv_list_len(l)) {
const char *const p = tv_list_find_str(l, nr - 1); const char *const p = tv_list_find_str(l, (int)nr - 1);
if (p == NULL) { if (p == NULL) {
return; return;
} }