summaryrefslogtreecommitdiff
path: root/src/station_cmd.cpp
diff options
context:
space:
mode:
authorPeter Nelson <peter1138@openttd.org>2021-05-01 18:07:47 +0100
committerPeterN <peter@fuzzle.org>2021-05-02 17:15:27 +0100
commitbd1a20f6eee6758f6a812af18fbe5b41b491b5c4 (patch)
tree02d7a3f6a4aebae631c323d0e6493116c060d678 /src/station_cmd.cpp
parent1f159f79de7428cbaa6133ec9cf06ce559980ea6 (diff)
downloadopenttd-bd1a20f6eee6758f6a812af18fbe5b41b491b5c4.tar.xz
Codechange: Use std::vector for NewGRF station platform layouts.
This avoids the need to custom memory management and additional members. This also resolves use-after-free if modifying copied layouts, so presumably nobody has ever done that.
Diffstat (limited to 'src/station_cmd.cpp')
-rw-r--r--src/station_cmd.cpp14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index 482b95462..ac78064d4 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -1109,13 +1109,13 @@ static inline byte *CreateMulti(byte *layout, int n, byte b)
* @param plat_len The length of the platforms.
* @param statspec The specification of the station to (possibly) get the layout from.
*/
-void GetStationLayout(byte *layout, int numtracks, int plat_len, const StationSpec *statspec)
+void GetStationLayout(byte *layout, uint numtracks, uint plat_len, const StationSpec *statspec)
{
- if (statspec != nullptr && statspec->lengths >= plat_len &&
- statspec->platforms[plat_len - 1] >= numtracks &&
- statspec->layouts[plat_len - 1][numtracks - 1]) {
+ if (statspec != nullptr && statspec->layouts.size() >= plat_len &&
+ statspec->layouts[plat_len - 1].size() >= numtracks &&
+ !statspec->layouts[plat_len - 1][numtracks - 1].empty()) {
/* Custom layout defined, follow it. */
- memcpy(layout, statspec->layouts[plat_len - 1][numtracks - 1],
+ memcpy(layout, statspec->layouts[plat_len - 1][numtracks - 1].data(),
plat_len * numtracks);
return;
}
@@ -1124,9 +1124,9 @@ void GetStationLayout(byte *layout, int numtracks, int plat_len, const StationSp
CreateSingle(layout, numtracks);
} else {
if (numtracks & 1) layout = CreateSingle(layout, plat_len);
- numtracks >>= 1;
+ int n = numtracks >> 1;
- while (--numtracks >= 0) {
+ while (--n >= 0) {
layout = CreateMulti(layout, plat_len, 4);
layout = CreateMulti(layout, plat_len, 6);
}