summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarkvater <Darkvater@openttd.org>2006-04-26 21:48:22 +0000
committerDarkvater <Darkvater@openttd.org>2006-04-26 21:48:22 +0000
commit725cfc26d0a323b8649369c048acf6192d8875e4 (patch)
treed896d9ae3cc601842ad7147e66fd7eb298394619
parentdcf02c68f978ab8c24d4887546dbf0004b009868 (diff)
downloadopenttd-725cfc26d0a323b8649369c048acf6192d8875e4.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.c1
-rw-r--r--rail_cmd.c5
-rw-r--r--road_cmd.c1
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;
}