Mercurial > hg > openttd
diff src/station_cmd.cpp @ 5833:bcd4b73b9fd2 draft
(svn r8399) -Fix (r8185): a new road stop was always created in CmdBuildRoadStop(), but it was not deleted if DC_EXEC flag was not set or if the station creation failed
author | glx <glx@openttd.org> |
---|---|
date | Thu, 25 Jan 2007 01:29:24 +0000 |
parents | 06a31b083e84 |
children | f9e0c80cf037 |
line wrap: on
line diff
--- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -1359,12 +1359,19 @@ if (st != NULL && st->facilities != 0) st = NULL; } + /* If DC_EXEC is NOT set we still need to create the road stop to test if everything is OK. + * In this case we need to delete it before return. */ + std::auto_ptr<RoadStop> rs_auto_delete; + //give us a road stop in the list, and check if something went wrong road_stop = new RoadStop(tile); if (road_stop == NULL) { return_cmd_error(type ? STR_3008B_TOO_MANY_TRUCK_STOPS : STR_3008A_TOO_MANY_BUS_STOPS); } + /* ensure that in case of error (or no DC_EXEC) the new road stop gets deleted upon return */ + rs_auto_delete = std::auto_ptr<RoadStop>(road_stop); + if (st != NULL && GetNumRoadStopsInStation(st, RS_BUS) + GetNumRoadStopsInStation(st, RS_TRUCK) >= ROAD_STOP_LIMIT) { return_cmd_error(type ? STR_3008B_TOO_MANY_TRUCK_STOPS : STR_3008A_TOO_MANY_BUS_STOPS); @@ -1421,8 +1428,9 @@ UpdateStationAcceptance(st, false); RebuildStationLists(); InvalidateWindow(WC_STATION_LIST, st->owner); - /* success, so don't delete the new station */ + /* success, so don't delete the new station and the new road stop */ st_auto_delete.release(); + rs_auto_delete.release(); } return cost; }