mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 02:34:59 -07:00
vim-patch:9.0.2124: INT overflow detection logic can be simplified
Problem: INT overflow logic can be simplified Solution: introduce trim_to_int() function closes: vim/vim#135562b0882fa65
vim-patch:9.0.2138: Overflow logic requires long long Problem: Overflow logic requires long long Solution: Define vimlong_T data type to make life easier for porters closes: vim/vim#13598fda700cb04
Cherry-pick ops.c change from patch 9.1.0608. Co-authored-by: Ernie Rael <errael@raelity.com>
This commit is contained in:
parent
7a7ed0c8ac
commit
6c81c16e1b
@ -14,6 +14,7 @@
|
||||
#include "nvim/indent_c.h"
|
||||
#include "nvim/macros_defs.h"
|
||||
#include "nvim/mark_defs.h"
|
||||
#include "nvim/math.h"
|
||||
#include "nvim/memline.h"
|
||||
#include "nvim/memory.h"
|
||||
#include "nvim/option.h"
|
||||
@ -1708,7 +1709,7 @@ void parse_cino(buf_T *buf)
|
||||
} else {
|
||||
n *= sw;
|
||||
if (divider) {
|
||||
n += (sw * fraction + divider / 2) / divider;
|
||||
n += ((int64_t)sw * fraction + divider / 2) / divider;
|
||||
}
|
||||
}
|
||||
p++;
|
||||
@ -1717,11 +1718,7 @@ void parse_cino(buf_T *buf)
|
||||
n = -n;
|
||||
}
|
||||
|
||||
if (n > INT_MAX) {
|
||||
n = INT_MAX;
|
||||
} else if (n < INT_MIN) {
|
||||
n = INT_MIN;
|
||||
}
|
||||
n = trim_to_int(n);
|
||||
|
||||
// When adding an entry here, also update the default 'cinoptions' in
|
||||
// doc/indent.txt, and add explanation for it!
|
||||
|
@ -106,3 +106,9 @@ int vim_append_digit_int(int *value, int digit)
|
||||
*value = x * 10 + digit;
|
||||
return OK;
|
||||
}
|
||||
|
||||
/// Return something that fits into an int.
|
||||
int trim_to_int(int64_t x)
|
||||
{
|
||||
return x > INT_MAX ? INT_MAX : x < INT_MIN ? INT_MIN : (int)x;
|
||||
}
|
||||
|
@ -48,6 +48,7 @@
|
||||
#include "nvim/macros_defs.h"
|
||||
#include "nvim/mark.h"
|
||||
#include "nvim/mark_defs.h"
|
||||
#include "nvim/math.h"
|
||||
#include "nvim/mbyte.h"
|
||||
#include "nvim/mbyte_defs.h"
|
||||
#include "nvim/memline.h"
|
||||
@ -286,8 +287,8 @@ void shift_line(bool left, bool round, int amount, int call_changed_bytes)
|
||||
int64_t count = get_indent(); // get current indent
|
||||
|
||||
if (round) { // round off indent
|
||||
int i = (int)(count / sw_val); // number of 'shiftwidth' rounded down
|
||||
int j = (int)(count % sw_val); // extra spaces
|
||||
int i = trim_to_int(count / sw_val); // number of 'shiftwidth' rounded down
|
||||
int j = trim_to_int(count % sw_val); // extra spaces
|
||||
if (j && left) { // first remove extra spaces
|
||||
amount--;
|
||||
}
|
||||
@ -305,15 +306,11 @@ void shift_line(bool left, bool round, int amount, int call_changed_bytes)
|
||||
}
|
||||
}
|
||||
|
||||
if (count > INT_MAX) {
|
||||
count = INT_MAX;
|
||||
}
|
||||
|
||||
// Set new indent
|
||||
if (State & VREPLACE_FLAG) {
|
||||
change_indent(INDENT_SET, (int)count, false, call_changed_bytes);
|
||||
change_indent(INDENT_SET, trim_to_int(count), false, call_changed_bytes);
|
||||
} else {
|
||||
set_indent((int)count, call_changed_bytes ? SIN_CHANGED : 0);
|
||||
set_indent(trim_to_int(count), call_changed_bytes ? SIN_CHANGED : 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user