diff options
author | Darkvater <darkvater@openttd.org> | 2006-04-26 21:48:22 +0000 |
---|---|---|
committer | Darkvater <darkvater@openttd.org> | 2006-04-26 21:48:22 +0000 |
commit | feefbbbf06eacaf857f6cd7cdbb8216b8e6b97dc (patch) | |
tree | d896d9ae3cc601842ad7147e66fd7eb298394619 | |
parent | 939dd7d2bf4da9adfe71e0a4294dc419663d0b0e (diff) | |
download | openttd-feefbbbf06eacaf857f6cd7cdbb8216b8e6b97dc.tar.xz |
(svn r4586) - Codechange: Recursive commands that rely on _error_message to handle success/failure can fail if a recursive call fails but doesn't set the error message, thus resulting in an old, possibly erroneous being used (see FS#130 prior to r4585). Now properly reset the global variable _error_message in these cases.
-rw-r--r-- | clear_cmd.c | 1 | ||||
-rw-r--r-- | rail_cmd.c | 5 | ||||
-rw-r--r-- | road_cmd.c | 1 |
3 files changed, 4 insertions, 3 deletions
diff --git a/clear_cmd.c b/clear_cmd.c index 49197960a..259146965 100644 --- a/clear_cmd.c +++ b/clear_cmd.c @@ -197,7 +197,6 @@ int32 CmdTerraformLand(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); - _error_message = INVALID_STRING_ID; _terraform_err_tile = 0; ts.direction = direction = p2 ? 1 : -1; diff --git a/rail_cmd.c b/rail_cmd.c index 6f7113169..20d14445f 100644 --- a/rail_cmd.c +++ b/rail_cmd.c @@ -511,8 +511,8 @@ static int32 CmdRailTrackHelper(TileIndex tile, uint32 flags, uint32 p1, uint32 ret = DoCommand(tile, railtype, TrackdirToTrack(trackdir), flags, (mode == 0) ? CMD_BUILD_SINGLE_RAIL : CMD_REMOVE_SINGLE_RAIL); if (CmdFailed(ret)) { - if ((_error_message != STR_1007_ALREADY_BUILT) && (mode == 0)) - break; + if ((_error_message != STR_1007_ALREADY_BUILT) && (mode == 0)) break; + _error_message = INVALID_STRING_ID; } else total_cost += ret; @@ -771,6 +771,7 @@ static int32 CmdSignalTrackHelper(TileIndex tile, uint32 flags, uint32 p1, uint3 * This includes vehicles on track, competitor's tracks, etc. */ if (CmdFailed(ret)) { if (_error_message != STR_1005_NO_SUITABLE_RAILROAD_TRACK && mode != 1) return CMD_ERROR; + _error_message = INVALID_STRING_ID; } else { error = false; total_cost += ret; diff --git a/road_cmd.c b/road_cmd.c index 5c8589da3..66ee4521a 100644 --- a/road_cmd.c +++ b/road_cmd.c @@ -474,6 +474,7 @@ int32 CmdBuildLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2) ret = DoCommand(tile, bits, 0, flags, CMD_BUILD_ROAD); if (CmdFailed(ret)) { if (_error_message != STR_1007_ALREADY_BUILT) return CMD_ERROR; + _error_message = INVALID_STRING_ID; } else { cost += ret; } |