From a5d17f6c24b4187c866fa75a0a3c9dc94d264599 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Wed, 4 Jun 2008 16:18:53 +0000 Subject: [PATCH] =?UTF-8?q?http://bugs.eressea.de/view.php=3Fid=3D1438=20"?= =?UTF-8?q?FOLGEnde=20Einheiten=20reiten,=20k=C3=B6nnen=20aber=20nicht=20f?= =?UTF-8?q?olgen"=20-=20fixed=20a=20bug=20in=20reporting=20travelthru=20th?= =?UTF-8?q?at=20was=20caused=20by=20that=20fix=20Issue:=201438?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/kernel/move.c | 23 ++++++++++++++++++++++- src/common/kernel/reports.c | 36 ++++++++++-------------------------- src/scripts/eressea.lua | 2 +- 3 files changed, 33 insertions(+), 28 deletions(-) diff --git a/src/common/kernel/move.c b/src/common/kernel/move.c index 218c9d431..4375f052a 100644 --- a/src/common/kernel/move.c +++ b/src/common/kernel/move.c @@ -38,6 +38,7 @@ #include "race.h" #include "region.h" #include "render.h" +#include "reports.h" #include "save.h" #include "ship.h" #include "skill.h" @@ -1325,6 +1326,25 @@ enum { TRAVEL_RUNNING }; +static arg_regions * +var_copy_regions(const region_list * begin, int size) +{ + const region_list * rsrc; + + if (size>0) { + int i = 0; + arg_regions * dst = (arg_regions *)malloc(sizeof(arg_regions) + sizeof(region*) * size); + dst->nregions = size; + dst->regions = (region**)(dst+1); + for (rsrc = begin; i!=size; rsrc=rsrc->next) { + dst->regions[i++] = rsrc->data; + } + return dst; + } + return NULL; +} + + static const region_list * travel_route(unit * u, const region_list * route_begin, const region_list * route_end, order * ord, int mode) { @@ -1469,8 +1489,9 @@ travel_route(unit * u, const region_list * route_begin, const region_list * rout /* Berichte über Durchreiseregionen */ if (mode!=TRAVEL_TRANSPORTED) { + arg_regions * ar = var_copy_regions(route_begin, steps-1); ADDMSG(&u->faction->msgs, msg_message("travel", - "unit mode start end regions", u, walkmode, r, current, route_begin->next?route_begin:NULL)); + "unit mode start end regions", u, walkmode, r, current, ar)); } mark_travelthru(u, r, route_begin, iroute); diff --git a/src/common/kernel/reports.c b/src/common/kernel/reports.c index 6ecc27385..da007047b 100644 --- a/src/common/kernel/reports.c +++ b/src/common/kernel/reports.c @@ -1432,31 +1432,6 @@ var_free_resources(variant x) x.v = 0; } -static variant -var_copy_regions(variant x) -{ - region_list * rsrc; - int size = 0; - - for (rsrc = (region_list*)x.v; rsrc!=NULL; rsrc=rsrc->next) { - ++size; - } - - if (size>0) { - arg_regions * dst = (arg_regions *)malloc(sizeof(arg_regions) + sizeof(region*) * size); - dst->nregions = size; - dst->regions = (region**)(dst+1); - size = 0; - for (rsrc = (region_list*)x.v; rsrc!=NULL; rsrc=rsrc->next) { - dst->regions[size++] = rsrc->data; - } - x.v = dst; - } else { - x.v = NULL; - } - return x; -} - static void var_free_regions(variant x) { @@ -1844,6 +1819,10 @@ eval_trail(struct opstack ** stack, const void * userdata) /* order -> string */ size_t size = sizeof(buf) - 1; variant var; char * bufp = buf; +#ifdef _SECURECRT_ERRCODE_VALUES_DEFINED + /* stupid MS broke snprintf */ + int eold = errno; +#endif if (regions!=NULL) { end = regions->nregions-1; @@ -1866,6 +1845,11 @@ eval_trail(struct opstack ** stack, const void * userdata) /* order -> string */ *bufp = 0; var.v = strcpy(balloc(bufp-buf+1), buf); opush(stack, var); +#ifdef _SECURECRT_ERRCODE_VALUES_DEFINED + if (errno==ERANGE) { + errno = eold; + } +#endif } static void @@ -1929,7 +1913,7 @@ reports_init(void) register_argtype("order", var_free_order, var_copy_order, VAR_VOIDPTR); register_argtype("resources", var_free_resources, NULL, VAR_VOIDPTR); register_argtype("items", var_free_resources, var_copy_items, VAR_VOIDPTR); - register_argtype("regions", var_free_regions, var_copy_regions, VAR_VOIDPTR); + register_argtype("regions", var_free_regions, NULL, VAR_VOIDPTR); /* register functions that turn message contents to readable strings */ add_function("alliance", &eval_alliance); diff --git a/src/scripts/eressea.lua b/src/scripts/eressea.lua index f3eb77b97..6c4df49fe 100644 --- a/src/scripts/eressea.lua +++ b/src/scripts/eressea.lua @@ -61,7 +61,7 @@ function process(orders) -- loadscript("eressea/multis.lua") -- run the turn: - set_encoding("utf8") + -- set_encoding("utf8") if read_orders(orders) ~= 0 then print("could not read " .. orders) return -1