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 */