(svn r4683) - Backport from trunk (r4586): 0.4
authorDarkvater
Tue, 02 May 2006 14:00:26 +0000
branch0.4
changeset 9997 3265e9e4b8d7
parent 9996 069b5a2c9672
child 9998 8f0c2fe1797c
(svn r4683) - Backport from trunk (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
clear_cmd.c
rail_cmd.c
road_cmd.c
--- a/clear_cmd.c	Tue May 02 13:58:43 2006 +0000
+++ b/clear_cmd.c	Tue May 02 14:00:26 2006 +0000
@@ -195,7 +195,6 @@
 
 	SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
 
-	_error_message = INVALID_STRING_ID;
 	_terraform_err_tile = 0;
 
 	ts.direction = direction = p2 ? 1 : -1;
--- a/rail_cmd.c	Tue May 02 13:58:43 2006 +0000
+++ b/rail_cmd.c	Tue May 02 14:00:26 2006 +0000
@@ -602,8 +602,8 @@
 		ret = DoCommand(x, y, 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;
 
@@ -895,6 +895,7 @@
 			 * 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;
--- a/road_cmd.c	Tue May 02 13:58:43 2006 +0000
+++ b/road_cmd.c	Tue May 02 14:00:26 2006 +0000
@@ -546,6 +546,7 @@
 		ret = DoCommandByTile(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;
 		}