summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Lutz <michi@icosahedron.de>2021-08-15 12:14:53 +0200
committerGitHub <noreply@github.com>2021-08-15 12:14:53 +0200
commitee333a954934fee206a65795670d15150178c0f3 (patch)
tree163cc9ccfe6b3929c72987070be7c8a2a415382e /src
parent2183fd4dabe72bd96b264bf8cdb3a2a8be625cf8 (diff)
downloadopenttd-ee333a954934fee206a65795670d15150178c0f3.tar.xz
Fix 2183fd4d: [NewGRF] Use divide instead of right shift for signed numbers. (#9480)
"For negative a, the value of a >> b is implementation-defined (in most implementations, this performs arithmetic right shift, so that the result remains negative)."
Diffstat (limited to 'src')
-rw-r--r--src/newgrf_engine.cpp2
-rw-r--r--src/train_cmd.cpp2
2 files changed, 2 insertions, 2 deletions
diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp
index e57410224..ee4af5e6a 100644
--- a/src/newgrf_engine.cpp
+++ b/src/newgrf_engine.cpp
@@ -1189,7 +1189,7 @@ int GetEngineProperty(EngineID engine, PropertyID property, int orig_value, cons
if (callback != CALLBACK_FAILED) {
if (is_signed) {
/* Sign extend 15 bit integer */
- return static_cast<int16>(callback << 1) >> 1;
+ return static_cast<int16>(callback << 1) / 2;
} else {
return callback;
}
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp
index 1498a5fad..f926be637 100644
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -363,7 +363,7 @@ int Train::GetCurveSpeedLimit() const
/* Apply max_speed modifier (cached value is fixed-point binary with 8 fractional bits)
* and clamp the result to an acceptable range. */
- max_speed += (max_speed * this->tcache.cached_curve_speed_mod) >> 8;
+ max_speed += (max_speed * this->tcache.cached_curve_speed_mod) / 256;
max_speed = Clamp(max_speed, 2, absolute_max_speed);
}