diff --git a/cmake/Modules/FindLua.cmake b/cmake/Modules/FindLua.cmake deleted file mode 100644 index 898ccbfd6..000000000 --- a/cmake/Modules/FindLua.cmake +++ /dev/null @@ -1,172 +0,0 @@ -#.rst: -# FindLua -# ------- -# -# -# -# Locate Lua library This module defines -# -# :: -# -# LUA_FOUND - if false, do not try to link to Lua -# LUA_LIBRARIES - both lua and lualib -# LUA_INCLUDE_DIR - where to find lua.h -# LUA_VERSION_STRING - the version of Lua found -# LUA_VERSION_MAJOR - the major version of Lua -# LUA_VERSION_MINOR - the minor version of Lua -# LUA_VERSION_PATCH - the patch version of Lua -# -# -# -# Note that the expected include convention is -# -# :: -# -# #include "lua.h" -# -# and not -# -# :: -# -# #include -# -# This is because, the lua location is not standardized and may exist in -# locations other than lua/ - -#============================================================================= -# Copyright 2007-2009 Kitware, Inc. -# Copyright 2013 Rolf Eike Beer -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - -unset(_lua_include_subdirs) -unset(_lua_library_names) - -# this is a function only to have all the variables inside go away automatically -function(set_lua_version_vars) - set(LUA_VERSIONS5 5.3 5.2 5.1 5.0) - - if (Lua_FIND_VERSION_EXACT) - if (Lua_FIND_VERSION_COUNT GREATER 1) - set(lua_append_versions ${Lua_FIND_VERSION_MAJOR}.${Lua_FIND_VERSION_MINOR}) - endif () - elseif (Lua_FIND_VERSION) - # once there is a different major version supported this should become a loop - if (NOT Lua_FIND_VERSION_MAJOR GREATER 5) - if (Lua_FIND_VERSION_COUNT EQUAL 1) - set(lua_append_versions ${LUA_VERSIONS5}) - else () - foreach (subver IN LISTS LUA_VERSIONS5) - if (NOT subver VERSION_LESS ${Lua_FIND_VERSION}) - list(APPEND lua_append_versions ${subver}) - endif () - endforeach () - endif () - endif () - else () - # once there is a different major version supported this should become a loop - set(lua_append_versions ${LUA_VERSIONS5}) - endif () - - foreach (ver IN LISTS lua_append_versions) - string(REGEX MATCH "^([0-9]+)\\.([0-9]+)$" _ver "${ver}") - list(APPEND _lua_include_subdirs - include/lua${CMAKE_MATCH_1}${CMAKE_MATCH_2} - include/lua${CMAKE_MATCH_1}.${CMAKE_MATCH_2} - include/lua-${CMAKE_MATCH_1}.${CMAKE_MATCH_2} - ) - list(APPEND _lua_library_names - lua${CMAKE_MATCH_1}${CMAKE_MATCH_2} - lua${CMAKE_MATCH_1}.${CMAKE_MATCH_2} - lua-${CMAKE_MATCH_1}.${CMAKE_MATCH_2} - lua.${CMAKE_MATCH_1}.${CMAKE_MATCH_2} - ) - endforeach () - - set(_lua_include_subdirs "${_lua_include_subdirs}" PARENT_SCOPE) - set(_lua_library_names "${_lua_library_names}" PARENT_SCOPE) -endfunction(set_lua_version_vars) - -set_lua_version_vars() - -find_path(LUA_INCLUDE_DIR lua.h - HINTS - ENV LUA_DIR - PATH_SUFFIXES ${_lua_include_subdirs} include/lua include - PATHS - ~/Library/Frameworks - /Library/Frameworks - /sw # Fink - /opt/local # DarwinPorts - /opt/csw # Blastwave - /opt -) -unset(_lua_include_subdirs) - -find_library(LUA_LIBRARY - NAMES ${_lua_library_names} lua - HINTS - ENV LUA_DIR - PATH_SUFFIXES lib - PATHS - ~/Library/Frameworks - /Library/Frameworks - /sw - /opt/local - /opt/csw - /opt -) -unset(_lua_library_names) - -if (LUA_LIBRARY) - # include the math library for Unix - if (UNIX AND NOT APPLE AND NOT BEOS) - find_library(LUA_MATH_LIBRARY m) - set(LUA_LIBRARIES "${LUA_LIBRARY};${LUA_MATH_LIBRARY}") - # For Windows and Mac, don't need to explicitly include the math library - else () - set(LUA_LIBRARIES "${LUA_LIBRARY}") - endif () -endif () - -if (LUA_INCLUDE_DIR AND EXISTS "${LUA_INCLUDE_DIR}/lua.h") - # At least 5.[012] have different ways to express the version - # so all of them need to be tested. Lua 5.2 defines LUA_VERSION - # and LUA_RELEASE as joined by the C preprocessor, so avoid those. - file(STRINGS "${LUA_INCLUDE_DIR}/lua.h" lua_version_strings - REGEX "^#define[ \t]+LUA_(RELEASE[ \t]+\"Lua [0-9]|VERSION([ \t]+\"Lua [0-9]|_[MR])).*") - - string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION_MAJOR[ \t]+\"([0-9])\"[ \t]*;.*" "\\1" LUA_VERSION_MAJOR ";${lua_version_strings};") - if (LUA_VERSION_MAJOR MATCHES "^[0-9]+$") - string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION_MINOR[ \t]+\"([0-9])\"[ \t]*;.*" "\\1" LUA_VERSION_MINOR ";${lua_version_strings};") - string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION_RELEASE[ \t]+\"([0-9])\"[ \t]*;.*" "\\1" LUA_VERSION_PATCH ";${lua_version_strings};") - set(LUA_VERSION_STRING "${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}.${LUA_VERSION_PATCH}") - else () - string(REGEX REPLACE ".*;#define[ \t]+LUA_RELEASE[ \t]+\"Lua ([0-9.]+)\"[ \t]*;.*" "\\1" LUA_VERSION_STRING ";${lua_version_strings};") - if (NOT LUA_VERSION_STRING MATCHES "^[0-9.]+$") - string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION[ \t]+\"Lua ([0-9.]+)\"[ \t]*;.*" "\\1" LUA_VERSION_STRING ";${lua_version_strings};") - endif () - string(REGEX REPLACE "^([0-9]+)\\.[0-9.]*$" "\\1" LUA_VERSION_MAJOR "${LUA_VERSION_STRING}") - string(REGEX REPLACE "^[0-9]+\\.([0-9]+)[0-9.]*$" "\\1" LUA_VERSION_MINOR "${LUA_VERSION_STRING}") - string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]).*" "\\1" LUA_VERSION_PATCH "${LUA_VERSION_STRING}") - endif () - - unset(lua_version_strings) -endif() - -include(FindPackageHandleStandardArgs) -# handle the QUIETLY and REQUIRED arguments and set LUA_FOUND to TRUE if -# all listed variables are TRUE -FIND_PACKAGE_HANDLE_STANDARD_ARGS(Lua - REQUIRED_VARS LUA_LIBRARIES LUA_INCLUDE_DIR - VERSION_VAR LUA_VERSION_STRING) - -mark_as_advanced(LUA_INCLUDE_DIR LUA_LIBRARY LUA_MATH_LIBRARY) diff --git a/scripts/tests/e2/undead.lua b/scripts/tests/e2/undead.lua index a27987756..e1b153f25 100644 --- a/scripts/tests/e2/undead.lua +++ b/scripts/tests/e2/undead.lua @@ -19,7 +19,7 @@ function test_undead_reserve_self() assert_equal(1, u1:get_item("log")) end -function skip_undead_reserve_other() +function test_undead_reserve_other() local r1 = region.create(0, 0, "plain") local f1 = faction.create("human") local u1 = unit.create(f1, r1, 1) @@ -28,9 +28,10 @@ function skip_undead_reserve_other() u1.race = "undead" u1:clear_orders() u1:add_order("RESERVIERE 1 Holz") + u1.name = 'Xolgrim' process_orders() - -- Intermittent Failure (clang): expected 0 but was 2 + -- Intermittent Failure: expected 0 but was 2 assert_equal(0, u1:get_item("log")) assert_equal(2, u2:get_item("log")) diff --git a/src/attributes/key.c b/src/attributes/key.c index 66af66b89..ac4dbb4d5 100644 --- a/src/attributes/key.c +++ b/src/attributes/key.c @@ -260,6 +260,7 @@ static int *keys_update(int *base, int key, int val) ptrdiff_t diff = kv - base; sz = keys_size(n + 1); base = realloc(base, (sz * 2 + 1) * sizeof(int)); + if (!base) abort(); kv = base + diff; } base[0] = n + 1; diff --git a/src/kernel/config.c b/src/kernel/config.c index 73b4aa22e..5c0bfc777 100644 --- a/src/kernel/config.c +++ b/src/kernel/config.c @@ -107,10 +107,10 @@ int findoption(const char *s, const struct locale *lang) /* -- Erschaffung neuer Einheiten ------------------------------ */ static int *forbidden_ids; +static const char *forbidden[] = { "t", "te", "tem", "temp", NULL }; bool forbiddenid(int id) { - static const char *forbidden[] = { "t", "te", "tem", "temp", NULL }; static size_t len; size_t i; if (id <= 0) { diff --git a/src/kernel/gamedata.h b/src/kernel/gamedata.h index 1d65f5085..77469f9da 100644 --- a/src/kernel/gamedata.h +++ b/src/kernel/gamedata.h @@ -40,8 +40,9 @@ #define FACTION_UID_VERSION 362 /* f->uid contains a database id */ #define CRYPT_VERSION 363 /* passwords are encrypted */ #define FAMILIAR_FIXMAGE_VERSION 364 /* familiar links are fixed */ +#define FAMILIAR_FIXSPELLBOOK_VERSION 365 /* familiar spells are fixed */ -#define RELEASE_VERSION FAMILIAR_FIXMAGE_VERSION /* current datafile */ +#define RELEASE_VERSION FAMILIAR_FIXSPELLBOOK_VERSION /* current datafile */ #define MIN_VERSION UIDHASH_VERSION /* minimal datafile we support */ #define MAX_VERSION RELEASE_VERSION /* change this if we can need to read the future datafile, and we can do so */ diff --git a/src/kernel/pool.test.c b/src/kernel/pool.test.c index 10c127f81..d5d190c26 100644 --- a/src/kernel/pool.test.c +++ b/src/kernel/pool.test.c @@ -6,6 +6,7 @@ #include "unit.h" #include "item.h" #include "faction.h" +#include "race.h" #include "region.h" #include "skill.h" @@ -42,6 +43,30 @@ void test_reservation(CuTest *tc) { test_teardown(); } +void test_pool_get_item(CuTest *tc) { + unit *u1, *u2; + faction *f; + region *r; + race *rc; + struct resource_type *rtype; + + test_setup(); + rtype = rt_get_or_create("money"); + rtype->flags |= RTF_POOLED; + it_get_or_create(rtype); + f = test_create_faction(NULL); + r = test_create_plain(0, 0); + u1 = test_create_unit(f, r); + u_setrace(u1, rc = test_create_race("undead")); + rc->ec_flags &= ~ECF_GETITEM; + u2 = test_create_unit(f, r); + i_change(&u2->items, rtype->itype, 2); + CuAssertIntEquals(tc, 0, get_pooled(u1, rtype, GET_DEFAULT, 1)); + CuAssertIntEquals(tc, 0, i_get(u1->items, rtype->itype)); + CuAssertIntEquals(tc, 2, i_get(u2->items, rtype->itype)); + test_teardown(); +} + void test_pool(CuTest *tc) { unit *u1, *u2, *u3; faction *f; @@ -49,11 +74,11 @@ void test_pool(CuTest *tc) { struct resource_type *rtype; test_setup(); - test_create_world(); rtype = rt_get_or_create("money"); + rtype->flags |= RTF_POOLED; it_get_or_create(rtype); f = test_create_faction(NULL); - r = findregion(0, 0); + r = test_create_plain(0, 0); assert(r && f && rtype && rtype->itype); u1 = test_create_unit(f, r); u2 = test_create_unit(f, r); @@ -188,6 +213,7 @@ CuSuite *get_pool_suite(void) CuSuite *suite = CuSuiteNew(); SUITE_ADD_TEST(suite, test_reservation); SUITE_ADD_TEST(suite, test_pool); + SUITE_ADD_TEST(suite, test_pool_get_item); SUITE_ADD_TEST(suite, test_pool_bug_2042); SUITE_ADD_TEST(suite, test_pool_use); SUITE_ADD_TEST(suite, test_change_resource); diff --git a/src/kernel/save.c b/src/kernel/save.c index 1393d8da7..dc024c73b 100644 --- a/src/kernel/save.c +++ b/src/kernel/save.c @@ -1528,7 +1528,7 @@ int read_game(gamedata *data) if (data->version < FAMILIAR_FIX_VERSION) { fix_familiars(fix_fam_triggers); } - if (data->version < FAMILIAR_FIXMAGE_VERSION) { + if (data->version < FAMILIAR_FIXSPELLBOOK_VERSION) { fix_familiars(fix_fam_mage); } diff --git a/src/kernel/unit.c b/src/kernel/unit.c index bf2ad7a37..0778fc48e 100644 --- a/src/kernel/unit.c +++ b/src/kernel/unit.c @@ -982,9 +982,8 @@ void set_number(unit * u, int count) void remove_skill(unit * u, skill_t sk) { int i; - skill *sv; for (i = 0; i != u->skill_size; ++i) { - sv = u->skills + i; + skill *sv = u->skills + i; if (sv->id == sk) { if (u->skill_size - i - 1 > 0) { memmove(sv, sv + 1, (u->skill_size - i - 1) * sizeof(skill)); diff --git a/src/laws.c b/src/laws.c index b3c3eca92..9de897cb0 100644 --- a/src/laws.c +++ b/src/laws.c @@ -3434,10 +3434,7 @@ static int reserve_i(unit * u, struct order *ord, int flags) } int reserve_cmd(unit * u, struct order *ord) { - if ((u_race(u)->ec_flags & ECF_GETITEM)) { - return reserve_i(u, ord, GET_DEFAULT); - } - return 0; + return reserve_i(u, ord, GET_DEFAULT); } int reserve_self(unit * u, struct order *ord) { diff --git a/src/magic.c b/src/magic.c index 98d5dc05d..7ea51581e 100644 --- a/src/magic.c +++ b/src/magic.c @@ -2090,7 +2090,7 @@ castorder *create_castorder(castorder * co, unit *caster, unit * familiar, const co->sp = sp; co->level = lev; co->force = MagicPower(force); - co->_rtarget = r ? r : (familiar ? familiar->region : (caster ? caster->region : 0)); + co->_rtarget = r ? r : (familiar ? familiar->region : (caster ? caster->region : NULL)); co->distance = range; co->order = copy_order(ord); co->par = p; diff --git a/src/move.c b/src/move.c index fe39a5295..683908065 100644 --- a/src/move.c +++ b/src/move.c @@ -637,6 +637,7 @@ void move_ship(ship * sh, region * from, region * to, region_list * route) unit **iunit = &from->units; unit **ulist = &to->units; + assert(sh); if (from != to) { translist(&from->ships, &to->ships, sh); sh->region = to; @@ -1676,10 +1677,9 @@ static bool ship_ready(const region * r, unit * u, order * ord) unit *owner_buildingtyp(const region * r, const building_type * bt) { building *b; - unit *owner; for (b = rbuildings(r); b; b = b->next) { - owner = building_owner(b); + unit *owner = building_owner(b); if (b->type == bt && owner != NULL) { if (building_finished(b)) { return owner; @@ -1971,7 +1971,7 @@ static void sail(unit * u, order * ord, region_list ** routep, bool drifting) /* Hafengebühren ? */ harbourmaster = owner_buildingtyp(current_point, bt_find("harbour")); - if (sh && harbourmaster != NULL) { + if (harbourmaster != NULL) { item *itm; unit *u2; item *trans = NULL; diff --git a/src/report.c b/src/report.c index b96267b82..fd73f6369 100644 --- a/src/report.c +++ b/src/report.c @@ -432,7 +432,7 @@ void nr_spell_syntax(char *buf, size_t size, spellbook_entry * sbe, const struct void nr_spell(struct stream *out, spellbook_entry * sbe, const struct locale *lang) { - int k, itemanz, costtyp; + int k; bool cont; char buf[4096]; const spell *sp = spellref_get(&sbe->spref); @@ -471,8 +471,8 @@ void nr_spell(struct stream *out, spellbook_entry * sbe, const struct locale *la paragraph(out, LOC(lang, "nr_spell_components"), 0, 0, 0); for (k = 0; sp->components[k].type; ++k) { const resource_type *rtype = sp->components[k].type; - itemanz = sp->components[k].amount; - costtyp = sp->components[k].cost; + int itemanz = sp->components[k].amount; + int costtyp = sp->components[k].cost; if (itemanz > 0) { sbs_init(&sbs, buf, sizeof(buf)); if (sp->sptyp & SPELLLEVEL) { @@ -519,7 +519,6 @@ static void nr_curses_i(struct stream *out, int indent, const faction *viewer, objtype_t typ, const void *obj, attrib *a, int self) { for (; a; a = a->next) { - char buf[4096]; message *msg = 0; if (a->type == &at_curse) { @@ -536,6 +535,7 @@ nr_curses_i(struct stream *out, int indent, const faction *viewer, objtype_t typ } } if (msg) { + char buf[4096]; newline(out); nr_render(msg, viewer->locale, buf, sizeof(buf), viewer); paragraph(out, buf, indent, 2, 0); @@ -847,7 +847,6 @@ static void report_region_resource(sbstring *sbp, const struct locale *lang, con static void report_region_description(struct stream *out, const region * r, faction * f, const bool see[]) { int n; - bool dh; int trees; int saplings; attrib *a; @@ -986,6 +985,7 @@ static void report_region_description(struct stream *out, const region * r, fact } else { int d, nrd = 0; + bool dh = false; /* Nachbarregionen, die gesehen werden, ermitteln */ for (d = 0; d != MAXDIRECTIONS; d++) { @@ -994,7 +994,6 @@ static void report_region_description(struct stream *out, const region * r, fact } /* list directions */ - dh = false; for (d = 0; d != MAXDIRECTIONS; d++) { if (see[d]) { region *r2 = rconnect(r, d); @@ -1037,7 +1036,6 @@ static void report_region_description(struct stream *out, const region * r, fact sbs_strcat(&sbs, " (\""); sbs_strcat(&sbs, LOC(f->locale, spd->keyword)); sbs_strcat(&sbs, "\")."); - dh = 1; } } pump_paragraph(&sbs, out, REPORTWIDTH, true); @@ -1889,7 +1887,6 @@ static void cb_write_travelthru(region *r, unit *u, void *cbdata) { void report_travelthru(struct stream *out, region *r, const faction *f) { int maxtravel; - char buf[8192]; assert(r); assert(f); @@ -1901,6 +1898,7 @@ void report_travelthru(struct stream *out, region *r, const faction *f) maxtravel = count_travelthru(r, f); if (maxtravel > 0) { cb_data cbdata; + char buf[8192]; init_cb(&cbdata, out, buf, sizeof(buf), f); cbdata.maxtravel = maxtravel; @@ -1960,12 +1958,11 @@ report_plaintext(const char *filename, report_context * ctx, if (f->age <= 2) { const char *email; - const char *subject; email = config_get("game.email"); if (!email) log_error("game.email not set"); else { - subject = get_mailcmd(f->locale); + const char *subject = get_mailcmd(f->locale); m = msg_message("newbie_info_game", "email subject", email, subject); if (m) { @@ -2068,9 +2065,9 @@ report_plaintext(const char *filename, report_context * ctx, for (a = a_find(f->attribs, &at_showitem); a && a->type == &at_showitem; a = a->next) { const item_type *itype = (const item_type *)a->data.v; - const char *description = NULL; if (itype) { const char *pname = resourcename(itype->rtype, 0); + const char *description; if (ch == 0) { newline(out); @@ -2102,8 +2099,7 @@ report_plaintext(const char *filename, report_context * ctx, } centre(out, buf, true); newline(out); - description = mkname("describe", pname); - description = LOC(f->locale, description); + description = LOC(f->locale, mkname("describe", pname)); centre(out, description, true); } } diff --git a/src/reports.c b/src/reports.c index 72399b136..addc78dd7 100644 --- a/src/reports.c +++ b/src/reports.c @@ -319,11 +319,11 @@ report_items(const unit *u, item * result, int size, const unit * owner, } } for (itm = items; itm; itm = itm->next) { - item *ishow; const char *ic; report_item(owner, itm, viewer, NULL, &ic, NULL, false); if (ic && *ic) { + item *ishow; for (ishow = result; ishow != result + n; ++ishow) { const char *sc; @@ -1783,9 +1783,9 @@ static void var_free_regions(variant x) /*-V524 */ const char *trailinto(const region * r, const struct locale *lang) { - static char ref[32]; - const char *s; if (r) { + static char ref[32]; + const char *s; const char *tname = terrain_name(r); size_t sz; diff --git a/src/reports.test.c b/src/reports.test.c index 0ea5c0944..0f5f850e9 100644 --- a/src/reports.test.c +++ b/src/reports.test.c @@ -601,14 +601,14 @@ static void test_prepare_lighthouse_owners(CuTest *tc) f = test_create_faction(NULL); r1 = test_create_region(0, 0, t_plain); r2 = test_create_region(1, 0, t_ocean); - r3 = test_create_region(2, 0, t_ocean); + test_create_region(2, 0, t_ocean); r3 = test_create_region(3, 0, t_ocean); btype = test_create_buildingtype("lighthouse"); b = test_create_building(r1, btype); b->flags |= BLD_MAINTAINED; b->size = 10; update_lighthouse(b); - u = test_create_unit(f, r1); + test_create_unit(f, r1); u = test_create_unit(test_create_faction(NULL), r1); u->building = b; region_set_owner(b->region, f, 0); diff --git a/src/spells.c b/src/spells.c index b29e86ea9..a5c8383a1 100644 --- a/src/spells.c +++ b/src/spells.c @@ -2346,7 +2346,6 @@ static int sp_earthquake(castorder * co) static void patzer_peasantmob(const castorder * co) { unit *u; - attrib *a; region *r; unit *mage = co_get_magician(co); r = mage->region->land ? mage->region : co_get_region(co); @@ -2355,6 +2354,7 @@ static void patzer_peasantmob(const castorder * co) faction *f = get_monsters(); const struct locale *lang = f->locale; message *msg; + attrib *a; int anteil, n; anteil = 6 + rng_int() % 4; @@ -2410,7 +2410,6 @@ static void patzer_peasantmob(const castorder * co) static int sp_forest_fire(castorder * co) { unit *u; - region *nr; direction_t i; region *r = co_get_region(co); unit *caster = co_get_caster(co); @@ -2442,7 +2441,7 @@ static int sp_forest_fire(castorder * co) msg_release(msg); for (i = 0; i < MAXDIRECTIONS; i++) { - nr = rconnect(r, i); + region *nr = rconnect(r, i); assert(nr); destroyed = 0; vernichtet_schoesslinge = 0; @@ -5629,7 +5628,6 @@ int sp_disruptastral(castorder * co) attrib *a; double effect; region *r2 = rl2->data; - spec_direction *sd; int inhab_regions = 0; region_list *trl = NULL; @@ -5649,7 +5647,7 @@ int sp_disruptastral(castorder * co) while (a != NULL && a->type == &at_direction) { attrib *a2 = a->next; - sd = (spec_direction *)(a->data.v); + spec_direction *sd = (spec_direction *)(a->data.v); if (sd->duration != -1) a_remove(&r->attribs, a); a = a2; @@ -6161,7 +6159,6 @@ int sp_speed2(castorder * co) */ int sp_break_curse(castorder * co) { - attrib **ap; int obj; curse *c; region *r = co_get_region(co); @@ -6169,7 +6166,6 @@ int sp_break_curse(castorder * co) int cast_level = co->level; double force = co->force; spellparameter *pa = co->par; - const char *ts = NULL; if (pa->length < 2) { /* Das Zielobjekt wurde vergessen */ @@ -6186,6 +6182,8 @@ int sp_break_curse(castorder * co) "unit region command", mage, mage->region, co->order)); } else { + const char *ts = NULL; + attrib **ap; switch (obj) { case SPP_REGION: ap = &r->attribs; diff --git a/src/util/log.c b/src/util/log.c index 97f44bd95..8c198988f 100644 --- a/src/util/log.c +++ b/src/util/log.c @@ -205,15 +205,17 @@ log_t *log_to_file(int flags, FILE *out) { return log_create(flags, out, log_stdio); } -#ifdef _MSC_VER -/* https://social.msdn.microsoft.com/Forums/vstudio/en-US/53a4fd75-9f97-48b2-aa63-2e2e5a15efa3/stdcversion-problem?forum=vclanguage */ -#define VA_COPY(c, a) va_copy(c, a) -#elif !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L -/* GNU only: https://www.gnu.org/software/libc/manual/html_node/Argument-Macros.html */ -#define VA_COPY(c, a) __va_copy(c, a) -#else -#define VA_COPY(c, a) va_copy(c, a) -#endif +/* + * Notes for va_copy compatibility: + * MSVC: https://social.msdn.microsoft.com/Forums/vstudio/en-US/53a4fd75-9f97-48b2-aa63-2e2e5a15efa3/stdcversion-problem?forum=vclanguage + * GNU: https://www.gnu.org/software/libc/manual/html_node/Argument-Macros.html + */ +static void vlog(log_t *lg, int level, const char *format, va_list args) { + va_list copy; + va_copy(copy, args); + lg->log(lg->data, level, NULL, format, copy); + va_end(copy); +} static void log_write(int flags, const char *module, const char *format, va_list args) { log_t *lg; @@ -225,10 +227,7 @@ static void log_write(int flags, const char *module, const char *format, va_list dupe = check_dupe(format, level); } if (dupe == 0) { - va_list copy; - VA_COPY(copy, args); - lg->log(lg->data, level, NULL, format, copy); - va_end(copy); + vlog(lg, level, format, args); } } } diff --git a/src/util/path.h b/src/util/path.h index 649777171..d7c82940e 100644 --- a/src/util/path.h +++ b/src/util/path.h @@ -2,7 +2,7 @@ #include -#ifdef _MSC_VER +#ifndef PATH_MAX /* @see https://insanecoding.blogspot.no/2007/11/pathmax-simply-isnt.html */ #define PATH_MAX 260 #endif