1
0
mirror of https://github.com/OpenTTD/OpenTTD synced 2025-12-10 06:52:05 +01:00

Codechange: Range-check rail/road/tram maps by size instead of constant. (#14602)

* Compare against the size of the array instead of the constant used to define the array.
* `type_map` alias now uses auto to avoid defining the type each time.
* `_cur_gps.grffile->railtype_map` is now aliased to `type_map` to simplify and standardise.
This commit is contained in:
Peter Nelson
2025-09-11 12:31:34 +01:00
committed by GitHub
parent fe9093df96
commit d095526406
3 changed files with 20 additions and 17 deletions

View File

@@ -29,14 +29,15 @@ static ChangeInfoResult RailTypeChangeInfo(uint first, uint last, int prop, Byte
ChangeInfoResult ret = CIR_SUCCESS;
extern RailTypeInfo _railtypes[RAILTYPE_END];
const auto &type_map = _cur_gps.grffile->railtype_map;
if (last > RAILTYPE_END) {
GrfMsg(1, "RailTypeChangeInfo: Rail type {} is invalid, max {}, ignoring", last, RAILTYPE_END);
if (last > std::size(type_map)) {
GrfMsg(1, "RailTypeChangeInfo: Rail type {} is invalid, max {}, ignoring", last, std::size(type_map));
return CIR_INVALID_ID;
}
for (uint id = first; id < last; ++id) {
RailType rt = _cur_gps.grffile->railtype_map[id];
RailType rt = type_map[id];
if (rt == INVALID_RAILTYPE) return CIR_INVALID_ID;
RailTypeInfo *rti = &_railtypes[rt];
@@ -163,9 +164,10 @@ static ChangeInfoResult RailTypeReserveInfo(uint first, uint last, int prop, Byt
ChangeInfoResult ret = CIR_SUCCESS;
extern RailTypeInfo _railtypes[RAILTYPE_END];
auto &type_map = _cur_gps.grffile->railtype_map;
if (last > RAILTYPE_END) {
GrfMsg(1, "RailTypeReserveInfo: Rail type {} is invalid, max {}, ignoring", last, RAILTYPE_END);
if (last > std::size(type_map)) {
GrfMsg(1, "RailTypeReserveInfo: Rail type {} is invalid, max {}, ignoring", last, std::size(type_map));
return CIR_INVALID_ID;
}
@@ -182,7 +184,7 @@ static ChangeInfoResult RailTypeReserveInfo(uint first, uint last, int prop, Byt
rt = AllocateRailType(rtl);
}
_cur_gps.grffile->railtype_map[id] = rt;
type_map[id] = rt;
break;
}
@@ -199,10 +201,10 @@ static ChangeInfoResult RailTypeReserveInfo(uint first, uint last, int prop, Byt
break;
case 0x1D: // Alternate rail type label list
if (_cur_gps.grffile->railtype_map[id] != INVALID_RAILTYPE) {
if (type_map[id] != INVALID_RAILTYPE) {
int n = buf.ReadByte();
for (int j = 0; j != n; j++) {
_railtypes[_cur_gps.grffile->railtype_map[id]].alternate_labels.push_back(std::byteswap(buf.ReadDWord()));
_railtypes[type_map[id]].alternate_labels.push_back(std::byteswap(buf.ReadDWord()));
}
break;
}

View File

@@ -30,10 +30,10 @@ static ChangeInfoResult RoadTypeChangeInfo(uint first, uint last, int prop, Byte
ChangeInfoResult ret = CIR_SUCCESS;
extern RoadTypeInfo _roadtypes[ROADTYPE_END];
std::array<RoadType, ROADTYPE_END> &type_map = (rtt == RTT_TRAM) ? _cur_gps.grffile->tramtype_map : _cur_gps.grffile->roadtype_map;
const auto &type_map = (rtt == RTT_TRAM) ? _cur_gps.grffile->tramtype_map : _cur_gps.grffile->roadtype_map;
if (last > ROADTYPE_END) {
GrfMsg(1, "RoadTypeChangeInfo: Road type {} is invalid, max {}, ignoring", last, ROADTYPE_END);
if (last > std::size(type_map)) {
GrfMsg(1, "RoadTypeChangeInfo: Road type {} is invalid, max {}, ignoring", last, std::size(type_map));
return CIR_INVALID_ID;
}
@@ -151,10 +151,10 @@ static ChangeInfoResult RoadTypeReserveInfo(uint first, uint last, int prop, Byt
ChangeInfoResult ret = CIR_SUCCESS;
extern RoadTypeInfo _roadtypes[ROADTYPE_END];
std::array<RoadType, ROADTYPE_END> &type_map = (rtt == RTT_TRAM) ? _cur_gps.grffile->tramtype_map : _cur_gps.grffile->roadtype_map;
auto &type_map = (rtt == RTT_TRAM) ? _cur_gps.grffile->tramtype_map : _cur_gps.grffile->roadtype_map;
if (last > ROADTYPE_END) {
GrfMsg(1, "RoadTypeReserveInfo: Road type {} is invalid, max {}, ignoring", last, ROADTYPE_END);
if (last > std::size(type_map)) {
GrfMsg(1, "RoadTypeReserveInfo: Road type {} is invalid, max {}, ignoring", last, std::size(type_map));
return CIR_INVALID_ID;
}

View File

@@ -268,7 +268,8 @@ struct RailTypeMapSpriteGroupHandler : MapSpriteGroupHandler {
{
if (cid >= RTSG_END) return;
RailType railtype = local_id < RAILTYPE_END ? _cur_gps.grffile->railtype_map[local_id] : INVALID_RAILTYPE;
const auto &type_map = _cur_gps.grffile->railtype_map;
RailType railtype = local_id < std::size(type_map) ? type_map[local_id] : INVALID_RAILTYPE;
if (railtype == INVALID_RAILTYPE) return;
extern RailTypeInfo _railtypes[RAILTYPE_END];
@@ -286,8 +287,8 @@ struct RoadTypeMapSpriteGroupHandler : MapSpriteGroupHandler {
{
if (cid >= ROTSG_END) return;
std::array<RoadType, ROADTYPE_END> &type_map = (TRoadTramType == RTT_TRAM) ? _cur_gps.grffile->tramtype_map : _cur_gps.grffile->roadtype_map;
RoadType roadtype = local_id < ROADTYPE_END ? type_map[local_id] : INVALID_ROADTYPE;
const auto &type_map = (TRoadTramType == RTT_TRAM) ? _cur_gps.grffile->tramtype_map : _cur_gps.grffile->roadtype_map;
RoadType roadtype = local_id < std::size(type_map) ? type_map[local_id] : INVALID_ROADTYPE;
if (roadtype == INVALID_ROADTYPE) return;
extern RoadTypeInfo _roadtypes[ROADTYPE_END];