summaryrefslogtreecommitdiffstats
path: root/src/ops.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ops.c')
-rw-r--r--src/ops.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/ops.c b/src/ops.c
index ecd7fc2170..9e8ea86160 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -249,25 +249,23 @@ shift_line(
}
else
i += amount;
- count = i * sw_val;
+ count = (long long)i * (long long)sw_val;
}
else // original vi indent
{
if (left)
{
- count -= sw_val * amount;
+ count -= (long long)sw_val * (long long)amount;
if (count < 0)
count = 0;
}
else
- {
- if ((long long)sw_val * (long long)amount > INT_MAX - count)
- count = INT_MAX;
- else
- count += (long long)sw_val * (long long)amount;
- }
+ count += (long long)sw_val * (long long)amount;
}
+ if (count > INT_MAX)
+ count = INT_MAX;
+
// Set new indent
if (State & VREPLACE_FLAG)
change_indent(INDENT_SET, (int)count, FALSE, NUL, call_changed_bytes);