Mercurial > hg > openttd
changeset 15039:53c099f9a3a9 draft
(svn r19656) -Codechange/Fix: Report back if invalid vehicle lists are requested.
author | frosch <frosch@openttd.org> |
---|---|
date | Sat, 17 Apr 2010 14:47:56 +0000 |
parents | 80e8104bac11 |
children | 3314e49704e7 |
files | src/vehicle_cmd.cpp src/vehiclelist.cpp src/vehiclelist.h |
diffstat | 3 files changed, 11 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -144,7 +144,7 @@ uint32 id = p1; uint16 window_type = p2 & VLW_MASK; - GenerateVehicleSortList(&list, vehicle_type, _current_company, id, window_type); + if (!GenerateVehicleSortList(&list, vehicle_type, _current_company, id, window_type)) return CMD_ERROR; } else { /* Get the list of vehicles in the depot */ BuildDepotVehicleList(vehicle_type, tile, &list, NULL); @@ -596,7 +596,7 @@ { VehicleList list; - GenerateVehicleSortList(&list, type, owner, id, vlw_flag); + if (!GenerateVehicleSortList(&list, type, owner, id, vlw_flag)) return CMD_ERROR; /* Send all the vehicles to a depot */ bool had_success = false;
--- a/src/vehiclelist.cpp +++ b/src/vehiclelist.cpp @@ -76,8 +76,9 @@ * <li>VLW_WAYPOINT_LIST: index of waypoint to generate a list for</li> * </ul> * @param window_type The type of window the list is for, using the VLW_ flags in vehicle_gui.h + * @return false if invalid list is requested */ -void GenerateVehicleSortList(VehicleList *list, VehicleType type, Owner owner, uint32 index, uint16 window_type) +bool GenerateVehicleSortList(VehicleList *list, VehicleType type, Owner owner, uint32 index, uint16 window_type) { list->Clear(); @@ -101,7 +102,10 @@ case VLW_SHARED_ORDERS: /* Add all vehicles from this vehicle's shared order list */ - for (v = Vehicle::Get(index); v != NULL; v = v->NextShared()) { + v = Vehicle::GetIfValid(index); + if (v == NULL || v->type != type || !v->IsPrimaryVehicle()) return false; + + for (; v != NULL; v = v->NextShared()) { *list->Append() = v; } break; @@ -153,8 +157,9 @@ } break; - default: NOT_REACHED(); + default: return false; } list->Compact(); + return true; }
--- a/src/vehiclelist.h +++ b/src/vehiclelist.h @@ -19,7 +19,7 @@ typedef SmallVector<const Vehicle *, 32> VehicleList; -void GenerateVehicleSortList(VehicleList *list, VehicleType type, Owner owner, uint32 index, uint16 window_type); +bool GenerateVehicleSortList(VehicleList *list, VehicleType type, Owner owner, uint32 index, uint16 window_type); void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engine_list, VehicleList *wagon_list, bool individual_wagons = false); #endif /* VEHICLELIST_H */