# HG changeset patch # User Darkvater # Date 1146088102 0 # Node ID 6d3a34989d05e42e78115e198de6dc6080623569 # Parent 05913fabaebb8a510075f492fe07f46f13402d0a (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. diff -r 05913fabaebb -r 6d3a34989d05 clear_cmd.c --- a/clear_cmd.c Wed Apr 26 21:44:22 2006 +0000 +++ b/clear_cmd.c Wed Apr 26 21:48:22 2006 +0000 @@ -197,7 +197,6 @@ SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); - _error_message = INVALID_STRING_ID; _terraform_err_tile = 0; ts.direction = direction = p2 ? 1 : -1; diff -r 05913fabaebb -r 6d3a34989d05 rail_cmd.c --- a/rail_cmd.c Wed Apr 26 21:44:22 2006 +0000 +++ b/rail_cmd.c Wed Apr 26 21:48:22 2006 +0000 @@ -511,8 +511,8 @@ 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 @@ * 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 -r 05913fabaebb -r 6d3a34989d05 road_cmd.c --- a/road_cmd.c Wed Apr 26 21:44:22 2006 +0000 +++ b/road_cmd.c Wed Apr 26 21:48:22 2006 +0000 @@ -474,6 +474,7 @@ 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; }