From ef4052b0f6578db6f60170063e8a8b51aca2391f Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Mon, 6 Jul 2015 19:53:09 +0200 Subject: [PATCH] the outcome of a casual static analysis session. --- src/creport.c | 485 +++++++++++++++++++++--------------------- src/give.c | 21 +- src/gmtool.c | 10 +- src/jsreport.c | 4 +- src/kernel/curse.c | 22 +- src/kernel/item.c | 4 +- src/kernel/messages.c | 4 +- src/kernel/save.c | 18 +- src/laws.c | 136 ++++++------ src/move.c | 84 ++++---- src/upkeep.test.c | 3 +- src/util/log.c | 8 +- 12 files changed, 400 insertions(+), 399 deletions(-) diff --git a/src/creport.c b/src/creport.c index 59fa60ecb..2396a7476 100644 --- a/src/creport.c +++ b/src/creport.c @@ -1,4 +1,4 @@ -/* +/* +-------------------+ Enno Rehling | Eressea PBEM host | Christian Schlittchen | (c) 1998 - 2008 | Katja Zedel @@ -184,9 +184,9 @@ cr_output_curses(FILE * F, const faction * viewer, const void *obj, objtype_t ty region *r; /* Die Sichtbarkeit eines Zaubers und die Zaubermeldung sind bei - * Gebäuden und Schiffen je nach, ob man Besitzer ist, verschieden. + * Gebäuden und Schiffen je nach, ob man Besitzer ist, verschieden. * Bei Einheiten sieht man Wirkungen auf eigene Einheiten immer. - * Spezialfälle (besonderes Talent, verursachender Magier usw. werde + * Spezialfälle (besonderes Talent, verursachender Magier usw. werde * bei jedem curse gesondert behandelt. */ if (typ == TYP_SHIP) { ship *sh = (ship *)obj; @@ -743,8 +743,11 @@ static void cr_output_unit(FILE * F, const region * r, const faction * f, static const curse_type *itemcloak_ct = 0; static bool init = false; item result[MAX_INVENTORY]; + const faction *sf; + const char *prefix; - if (fval(u_race(u), RCF_INVISIBLE)) + assert(u); + if (!u || fval(u_race(u), RCF_INVISIBLE)) return; if (!init) { @@ -763,245 +766,243 @@ static void cr_output_unit(FILE * F, const region * r, const faction * f, if (str) { fprintf(F, "\"%s\";Beschr\n", str); } - { - /* print faction information */ - const faction *sf = visible_faction(f, u); - const char *prefix = raceprefix(u); - if (u->faction == f || omniscient(f)) { - const attrib *a_otherfaction = a_find(u->attribs, &at_otherfaction); - const faction *otherfaction = - a_otherfaction ? get_otherfaction(a_otherfaction) : NULL; - /* my own faction, full info */ - const attrib *a = NULL; - unit *mage; + /* print faction information */ + sf = visible_faction(f, u); + prefix = raceprefix(u); + if (u->faction == f || omniscient(f)) { + const attrib *a_otherfaction = a_find(u->attribs, &at_otherfaction); + const faction *otherfaction = + a_otherfaction ? get_otherfaction(a_otherfaction) : NULL; + /* my own faction, full info */ + const attrib *a = NULL; + unit *mage; - if (fval(u, UFL_GROUP)) - a = a_find(u->attribs, &at_group); - if (a != NULL) { - const group *g = (const group *)a->data.v; - fprintf(F, "%d;gruppe\n", g->gid); - } - fprintf(F, "%d;Partei\n", u->faction->no); - if (sf != u->faction) - fprintf(F, "%d;Verkleidung\n", sf->no); - if (fval(u, UFL_ANON_FACTION)) - fprintf(F, "%d;Parteitarnung\n", i2b(fval(u, UFL_ANON_FACTION))); - if (otherfaction) { - if (otherfaction != u->faction) { - fprintf(F, "%d;Anderepartei\n", otherfaction->no); - } - } - mage = get_familiar_mage(u); - if (mage) { - fprintf(F, "%u;familiarmage\n", mage->no); - } - } - else { - if (fval(u, UFL_ANON_FACTION)) { - /* faction info is hidden */ - fprintf(F, "%d;Parteitarnung\n", i2b(fval(u, UFL_ANON_FACTION))); - } - else { - const attrib *a_otherfaction = a_find(u->attribs, &at_otherfaction); - const faction *otherfaction = - a_otherfaction ? get_otherfaction(a_otherfaction) : NULL; - /* other unit. show visible faction, not u->faction */ - fprintf(F, "%d;Partei\n", sf->no); - if (sf == f) { - fprintf(F, "1;Verraeter\n"); - } - if (a_otherfaction) { - if (otherfaction != u->faction) { - if (alliedunit(u, f, HELP_FSTEALTH)) { - fprintf(F, "%d;Anderepartei\n", otherfaction->no); - } - } - } - } - } - if (prefix) { - prefix = mkname("prefix", prefix); - fprintf(F, "\"%s\";typprefix\n", translate(prefix, LOC(f->locale, - prefix))); - } - } - if (u->faction != f && a_fshidden - && a_fshidden->data.ca[0] == 1 && effskill(u, SK_STEALTH) >= 6) { - fprintf(F, "-1;Anzahl\n"); - } - else { - fprintf(F, "%d;Anzahl\n", u->number); - } + if (fval(u, UFL_GROUP)) + a = a_find(u->attribs, &at_group); + if (a != NULL) { + const group *g = (const group *)a->data.v; + fprintf(F, "%d;gruppe\n", g->gid); + } + fprintf(F, "%d;Partei\n", u->faction->no); + if (sf != u->faction) + fprintf(F, "%d;Verkleidung\n", sf->no); + if (fval(u, UFL_ANON_FACTION)) + fprintf(F, "%d;Parteitarnung\n", i2b(fval(u, UFL_ANON_FACTION))); + if (otherfaction) { + if (otherfaction != u->faction) { + fprintf(F, "%d;Anderepartei\n", otherfaction->no); + } + } + mage = get_familiar_mage(u); + if (mage) { + fprintf(F, "%u;familiarmage\n", mage->no); + } + } + else { + if (fval(u, UFL_ANON_FACTION)) { + /* faction info is hidden */ + fprintf(F, "%d;Parteitarnung\n", i2b(fval(u, UFL_ANON_FACTION))); + } + else { + const attrib *a_otherfaction = a_find(u->attribs, &at_otherfaction); + const faction *otherfaction = + a_otherfaction ? get_otherfaction(a_otherfaction) : NULL; + /* other unit. show visible faction, not u->faction */ + fprintf(F, "%d;Partei\n", sf->no); + if (sf == f) { + fprintf(F, "1;Verraeter\n"); + } + if (a_otherfaction) { + if (otherfaction != u->faction) { + if (alliedunit(u, f, HELP_FSTEALTH)) { + fprintf(F, "%d;Anderepartei\n", otherfaction->no); + } + } + } + } + } + if (prefix) { + prefix = mkname("prefix", prefix); + fprintf(F, "\"%s\";typprefix\n", translate(prefix, LOC(f->locale, + prefix))); + } + if (u->faction != f && a_fshidden + && a_fshidden->data.ca[0] == 1 && effskill(u, SK_STEALTH) >= 6) { + fprintf(F, "-1;Anzahl\n"); + } + else { + fprintf(F, "%d;Anzahl\n", u->number); + } - pzTmp = get_racename(u->attribs); - if (pzTmp) { - fprintf(F, "\"%s\";Typ\n", pzTmp); - if (u->faction == f && fval(u_race(u), RCF_SHAPESHIFTANY)) { - const char *zRace = rc_name_s(u_race(u), NAME_PLURAL); - fprintf(F, "\"%s\";wahrerTyp\n", - translate(zRace, LOC(f->locale, zRace))); - } - } - else { - const race *irace = u_irace(u); - const char *zRace = rc_name_s(irace, NAME_PLURAL); - fprintf(F, "\"%s\";Typ\n", - translate(zRace, LOC(f->locale, zRace))); - if (u->faction == f && irace != u_race(u)) { - assert(skill_enabled(SK_STEALTH) - || !"we're resetting this on load, so.. ircase should never be used"); - zRace = rc_name_s(u_race(u), NAME_PLURAL); - fprintf(F, "\"%s\";wahrerTyp\n", - translate(zRace, LOC(f->locale, zRace))); - } - } + pzTmp = get_racename(u->attribs); + if (pzTmp) { + fprintf(F, "\"%s\";Typ\n", pzTmp); + if (u->faction == f && fval(u_race(u), RCF_SHAPESHIFTANY)) { + const char *zRace = rc_name_s(u_race(u), NAME_PLURAL); + fprintf(F, "\"%s\";wahrerTyp\n", + translate(zRace, LOC(f->locale, zRace))); + } + } + else { + const race *irace = u_irace(u); + const char *zRace = rc_name_s(irace, NAME_PLURAL); + fprintf(F, "\"%s\";Typ\n", + translate(zRace, LOC(f->locale, zRace))); + if (u->faction == f && irace != u_race(u)) { + assert(skill_enabled(SK_STEALTH) + || !"we're resetting this on load, so.. ircase should never be used"); + zRace = rc_name_s(u_race(u), NAME_PLURAL); + fprintf(F, "\"%s\";wahrerTyp\n", + translate(zRace, LOC(f->locale, zRace))); + } + } - if (u->building) { - assert(u->building->region); - fprintf(F, "%d;Burg\n", u->building->no); - } - if (u->ship) { - assert(u->ship->region); - fprintf(F, "%d;Schiff\n", u->ship->no); - } - if (is_guard(u, GUARD_ALL) != 0) { - fprintf(F, "%d;bewacht\n", 1); - } - if ((b = usiege(u)) != NULL) { - fprintf(F, "%d;belagert\n", b->no); - } - /* additional information for own units */ - if (u->faction == f || omniscient(f)) { - order *ord; - const char *xc; - const char *c; - int i; - sc_mage *mage; + if (u->building) { + assert(u->building->region); + fprintf(F, "%d;Burg\n", u->building->no); + } + if (u->ship) { + assert(u->ship->region); + fprintf(F, "%d;Schiff\n", u->ship->no); + } + if (is_guard(u, GUARD_ALL) != 0) { + fprintf(F, "%d;bewacht\n", 1); + } + if ((b = usiege(u)) != NULL) { + fprintf(F, "%d;belagert\n", b->no); + } + /* additional information for own units */ + if (u->faction == f || omniscient(f)) { + order *ord; + const char *xc; + const char *c; + int i; + sc_mage *mage; - i = ualias(u); - if (i > 0) - fprintf(F, "%d;temp\n", i); - else if (i < 0) - fprintf(F, "%d;alias\n", -i); - i = get_money(u); - fprintf(F, "%d;Kampfstatus\n", u->status); - fprintf(F, "%d;weight\n", weight(u)); - if (fval(u, UFL_NOAID)) { - fputs("1;unaided\n", F); - } - if (fval(u, UFL_STEALTH)) { - i = u_geteffstealth(u); - if (i >= 0) { - fprintf(F, "%d;Tarnung\n", i); - } - } - xc = uprivate(u); - if (xc) { - fprintf(F, "\"%s\";privat\n", xc); - } - c = hp_status(u); - if (c && *c && (u->faction == f || omniscient(f))) { - fprintf(F, "\"%s\";hp\n", translate(c, - LOC(u->faction->locale, c))); - } - if (fval(u, UFL_HERO)) { - fputs("1;hero\n", F); - } + i = ualias(u); + if (i > 0) + fprintf(F, "%d;temp\n", i); + else if (i < 0) + fprintf(F, "%d;alias\n", -i); + i = get_money(u); + fprintf(F, "%d;Kampfstatus\n", u->status); + fprintf(F, "%d;weight\n", weight(u)); + if (fval(u, UFL_NOAID)) { + fputs("1;unaided\n", F); + } + if (fval(u, UFL_STEALTH)) { + i = u_geteffstealth(u); + if (i >= 0) { + fprintf(F, "%d;Tarnung\n", i); + } + } + xc = uprivate(u); + if (xc) { + fprintf(F, "\"%s\";privat\n", xc); + } + c = hp_status(u); + if (c && *c && (u->faction == f || omniscient(f))) { + fprintf(F, "\"%s\";hp\n", translate(c, + LOC(u->faction->locale, c))); + } + if (fval(u, UFL_HERO)) { + fputs("1;hero\n", F); + } - if (fval(u, UFL_HUNGER) && (u->faction == f)) { - fputs("1;hunger\n", F); - } - if (is_mage(u)) { - fprintf(F, "%d;Aura\n", get_spellpoints(u)); - fprintf(F, "%d;Auramax\n", max_spellpoints(u->region, u)); - } - /* default commands */ - fprintf(F, "COMMANDS\n"); - for (ord = u->old_orders; ord; ord = ord->next) { - /* this new order will replace the old defaults */ - if (is_persistent(ord)) { - fwriteorder(F, ord, f->locale, true); - fputc('\n', F); - } - } - for (ord = u->orders; ord; ord = ord->next) { - if (u->old_orders && is_repeated(ord)) - continue; /* unit has defaults */ - if (is_persistent(ord)) { - fwriteorder(F, ord, f->locale, true); - fputc('\n', F); - } - } + if (fval(u, UFL_HUNGER) && (u->faction == f)) { + fputs("1;hunger\n", F); + } + if (is_mage(u)) { + fprintf(F, "%d;Aura\n", get_spellpoints(u)); + fprintf(F, "%d;Auramax\n", max_spellpoints(u->region, u)); + } + /* default commands */ + fprintf(F, "COMMANDS\n"); + for (ord = u->old_orders; ord; ord = ord->next) { + /* this new order will replace the old defaults */ + if (is_persistent(ord)) { + fwriteorder(F, ord, f->locale, true); + fputc('\n', F); + } + } + for (ord = u->orders; ord; ord = ord->next) { + if (u->old_orders && is_repeated(ord)) + continue; /* unit has defaults */ + if (is_persistent(ord)) { + fwriteorder(F, ord, f->locale, true); + fputc('\n', F); + } + } - /* talents */ - pr = 0; - for (sv = u->skills; sv != u->skills + u->skill_size; ++sv) { - if (sv->level > 0) { - skill_t sk = sv->id; - int esk = eff_skill(u, sk, r); - if (!pr) { - pr = 1; - fprintf(F, "TALENTE\n"); - } - fprintf(F, "%d %d;%s\n", u->number * level_days(sv->level), esk, - translate(mkname("skill", skillnames[sk]), skillname(sk, - f->locale))); - } - } + /* talents */ + pr = 0; + for (sv = u->skills; sv != u->skills + u->skill_size; ++sv) { + if (sv->level > 0) { + skill_t sk = sv->id; + int esk = eff_skill(u, sk, r); + if (!pr) { + pr = 1; + fprintf(F, "TALENTE\n"); + } + fprintf(F, "%d %d;%s\n", u->number * level_days(sv->level), esk, + translate(mkname("skill", skillnames[sk]), skillname(sk, + f->locale))); + } + } - /* spells that this unit can cast */ - mage = get_mage(u); - if (mage) { - int i, maxlevel = effskill(u, SK_MAGIC); - cr_output_spells(F, u, maxlevel); + /* spells that this unit can cast */ + mage = get_mage(u); + if (mage) { + int i, maxlevel = effskill(u, SK_MAGIC); + cr_output_spells(F, u, maxlevel); - for (i = 0; i != MAXCOMBATSPELLS; ++i) { - const spell *sp = mage->combatspells[i].sp; - if (sp) { - const char *name = - translate(mkname("spell", sp->sname), spell_name(sp, - f->locale)); - fprintf(F, "KAMPFZAUBER %d\n", i); - fprintf(F, "\"%s\";name\n", name); - fprintf(F, "%d;level\n", mage->combatspells[i].level); - } - } - } - } - /* items */ - pr = 0; - if (f == u->faction || omniscient(f)) { - show = u->items; - } - else if (!itemcloak && mode >= see_unit && !(a_fshidden - && a_fshidden->data.ca[1] == 1 && effskill(u, SK_STEALTH) >= 3)) { - int n = report_items(u->items, result, MAX_INVENTORY, u, f); - assert(n >= 0); - if (n > 0) - show = result; - else - show = NULL; - } - else { - show = NULL; - } - lasttype = NULL; - for (itm = show; itm; itm = itm->next) { - const char *ic; - int in; - assert(itm->type != lasttype - || !"error: list contains two objects of the same item"); - report_item(u, itm, f, NULL, &ic, &in, true); - if (in == 0) - continue; - if (!pr) { - pr = 1; - fputs("GEGENSTAENDE\n", F); - } - fprintf(F, "%d;%s\n", in, translate(ic, LOC(f->locale, ic))); - } + for (i = 0; i != MAXCOMBATSPELLS; ++i) { + const spell *sp = mage->combatspells[i].sp; + if (sp) { + const char *name = + translate(mkname("spell", sp->sname), spell_name(sp, + f->locale)); + fprintf(F, "KAMPFZAUBER %d\n", i); + fprintf(F, "\"%s\";name\n", name); + fprintf(F, "%d;level\n", mage->combatspells[i].level); + } + } + } + } + /* items */ + pr = 0; + if (f == u->faction || omniscient(f)) { + show = u->items; + } + else if (!itemcloak && mode >= see_unit && !(a_fshidden + && a_fshidden->data.ca[1] == 1 && effskill(u, SK_STEALTH) >= 3)) { + int n = report_items(u->items, result, MAX_INVENTORY, u, f); + assert(n >= 0); + if (n > 0) + show = result; + else + show = NULL; + } + else { + show = NULL; + } + lasttype = NULL; + for (itm = show; itm; itm = itm->next) { + const char *ic; + int in; + assert(itm->type != lasttype + || !"error: list contains two objects of the same item"); + report_item(u, itm, f, NULL, &ic, &in, true); + if (in == 0) + continue; + if (!pr) { + pr = 1; + fputs("GEGENSTAENDE\n", F); + } + fprintf(F, "%d;%s\n", in, translate(ic, LOC(f->locale, ic))); + } - cr_output_curses(F, f, u, TYP_UNIT); + cr_output_curses(F, f, u, TYP_UNIT); } /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */ @@ -1033,18 +1034,6 @@ static void show_alliances_cr(FILE * F, const faction * f) } } -/* prints all visible spells in a region */ -static void show_active_spells(const region * r) -{ - char fogwall[MAXDIRECTIONS]; -#ifdef TODO /* alte Regionszauberanzeigen umstellen */ - unit *u; - int env = 0; -#endif - memset(fogwall, 0, sizeof(char) * MAXDIRECTIONS); - -} - /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */ /* this is a copy of laws.c->find_address output changed. */ @@ -1308,6 +1297,7 @@ static void cr_output_region(FILE * F, report_context * ctx, seen_region * sr) if (r->display && r->display[0]) fprintf(F, "\"%s\";Beschr\n", r->display); if (fval(r->terrain, LAND_REGION)) { + assert(r->land); fprintf(F, "%d;Bauern\n", rpeasants(r)); if (fval(r, RF_ORCIFIED)) { fprintf(F, "1;Verorkt\n"); @@ -1338,7 +1328,7 @@ static void cr_output_region(FILE * F, report_context * ctx, seen_region * sr) fputs("1;mourning\n", F); } } - if (r->land->ownership) { + if (r->land && r->land->ownership) { fprintf(F, "%d;morale\n", r->land->morale); } } @@ -1408,7 +1398,6 @@ static void cr_output_region(FILE * F, report_context * ctx, seen_region * sr) } /* describe both passed and inhabited regions */ - show_active_spells(r); if (fval(r, RF_TRAVELUNIT)) { bool seeunits = false, seeships = false; const attrib *ru; diff --git a/src/give.c b/src/give.c index c4fb2ceb4..c5d4f5a27 100644 --- a/src/give.c +++ b/src/give.c @@ -1,4 +1,4 @@ -/* +/* +-------------------+ Christian Schlittchen | | Enno Rehling | Eressea PBEM host | Katja Zedel @@ -299,7 +299,7 @@ message * give_men(int n, unit * u, unit * u2, struct order *ord) error = 96; } else if (u->faction != u2->faction) { - if (maxt>=0 && u2->faction->newbies + n > maxt) { + if (maxt >= 0 && u2->faction->newbies + n > maxt) { error = 129; } else if (u_race(u) != u2->faction->race) { @@ -332,7 +332,7 @@ message * give_men(int n, unit * u, unit * u2, struct order *ord) if (has_skill(u2, SK_ALCHEMY) && !has_skill(u, SK_ALCHEMY)) k += n; - /* Wenn Parteigrenzen überschritten werden */ + /* Wenn Parteigrenzen überschritten werden */ if (u2->faction != u->faction) k += n; @@ -354,14 +354,14 @@ message * give_men(int n, unit * u, unit * u2, struct order *ord) freset(u2, UFL_HERO); } - /* Einheiten von Schiffen können nicht NACH in von - * Nicht-alliierten bewachten Regionen ausführen */ + /* Einheiten von Schiffen können nicht NACH in von + * Nicht-alliierten bewachten Regionen ausführen */ sh = leftship(u); if (sh) { set_leftship(u2, sh); } transfermen(u, u2, n); - if (maxt>=0 && u->faction != u2->faction) { + if (maxt >= 0 && u->faction != u2->faction) { u2->faction->newbies += n; } } @@ -403,6 +403,7 @@ void give_unit(unit * u, unit * u2, order * ord) region *r = u->region; int maxt = max_transfers(); + assert(u); if (!rule_transfermen() && u->faction != u2->faction) { cmistake(u, ord, 74, MSG_COMMERCE); return; @@ -518,7 +519,7 @@ void give_unit(unit * u, unit * u2, order * ord) } bool can_give_to(unit *u, unit *u2) { - /* Damit Tarner nicht durch die Fehlermeldung enttarnt werden können */ + /* Damit Tarner nicht durch die Fehlermeldung enttarnt werden können */ if (!u2) { return false; } @@ -613,7 +614,7 @@ void give_cmd(unit * u, order * ord) item *itm = *itmp; const item_type *itype = itm->type; if (fval(itype, ITF_HERB) && itm->number > 0) { - /* give_item ändert im fall,das man alles übergibt, die + /* give_item ändert im fall,das man alles übergibt, die * item-liste der unit, darum continue vor pointerumsetzten */ if (give_item(itm->number, itm->type, u, u2, ord) == 0) { given = true; @@ -669,8 +670,8 @@ void give_cmd(unit * u, order * ord) return; } - /* für alle items einmal prüfen, ob wir mehr als von diesem Typ - * reserviert ist besitzen und diesen Teil dann übergeben */ + /* für alle items einmal prüfen, ob wir mehr als von diesem Typ + * reserviert ist besitzen und diesen Teil dann übergeben */ if (u->items) { item **itmp = &u->items; while (*itmp) { diff --git a/src/gmtool.c b/src/gmtool.c index f009f6dbf..3c0ad1136 100644 --- a/src/gmtool.c +++ b/src/gmtool.c @@ -249,6 +249,8 @@ static void paint_map(window * wnd, const state * st) int cols = getmaxx(win); int vx, vy; + assert(st); + if (!st) return; lines = lines / THEIGHT; cols = cols / TWIDTH; for (vy = 0; vy != lines; ++vy) { @@ -260,11 +262,9 @@ static void paint_map(window * wnd, const state * st) int xp = vx * TWIDTH + (vy & 1) * TWIDTH / 2; int nx, ny; if (mr) { - if (st) { - cnormalize(&mr->coord, &nx, &ny); - if (tagged_region(st->selected, nx, ny)) { - attr |= A_REVERSE; - } + cnormalize(&mr->coord, &nx, &ny); + if (tagged_region(st->selected, nx, ny)) { + attr |= A_REVERSE; } if (mr->r && (mr->r->flags & RF_MAPPER_HIGHLIGHT)) hl = 1; diff --git a/src/jsreport.c b/src/jsreport.c index e9fb5ee3f..bfbb9e33b 100644 --- a/src/jsreport.c +++ b/src/jsreport.c @@ -1,4 +1,4 @@ -#include "reports.h" +#include "reports.h" #include "jsreport.h" #include #include @@ -74,7 +74,7 @@ static int report_json(const char *filename, report_context * ctx, const char *c } return 0; } - return ferror(F); + return errno; } return 0; } diff --git a/src/kernel/curse.c b/src/kernel/curse.c index 0cad2dfa6..a667bec18 100644 --- a/src/kernel/curse.c +++ b/src/kernel/curse.c @@ -307,19 +307,23 @@ const curse_type *ct_find(const char *c) { unsigned int hash = tolower(c[0]); quicklist *ctl = cursetypes[hash]; - int qi; - for (qi = 0; ctl; ql_advance(&ctl, &qi, 1)) { - curse_type *type = (curse_type *)ql_get(ctl, qi); + if (ctl) { + size_t c_len = strlen(c); + int qi; - if (strcmp(c, type->cname) == 0) { - return type; - } - else { - size_t k = _min(strlen(c), strlen(type->cname)); - if (!_memicmp(c, type->cname, k)) { + for (qi = 0; ctl; ql_advance(&ctl, &qi, 1)) { + curse_type *type = (curse_type *)ql_get(ctl, qi); + + if (strcmp(c, type->cname) == 0) { return type; } + else { + size_t k = _min(c_len, strlen(type->cname)); + if (!_memicmp(c, type->cname, k)) { + return type; + } + } } } return NULL; diff --git a/src/kernel/item.c b/src/kernel/item.c index 229fd3568..5ac160881 100644 --- a/src/kernel/item.c +++ b/src/kernel/item.c @@ -1,4 +1,4 @@ -/* +/* Copyright (c) 1998-2015, Enno Rehling Katja Zedel @@ -332,7 +332,7 @@ potion_type *new_potiontype(item_type * itype, int level) } void it_set_appearance(item_type *itype, const char *appearance) { - assert(itype && itype->rtype); + assert(itype && itype->rtype && appearance); itype->_appearance[0] = _strdup(appearance); itype->_appearance[1] = appearance ? strcat(strcpy((char *)malloc(strlen((char *)appearance) + 3), (char *)appearance), "_p") : 0; diff --git a/src/kernel/messages.c b/src/kernel/messages.c index 9fa861bc6..af0e4170b 100644 --- a/src/kernel/messages.c +++ b/src/kernel/messages.c @@ -1,4 +1,4 @@ -/* +/* Copyright (c) 1998-2015, Enno Rehling Katja Zedel @@ -305,7 +305,7 @@ void free_messagelist(message_list * msgs) message *add_message(message_list ** pm, message * m) { - assert(m->type); + assert(m && m->type); if (!lomem && m != NULL) { struct mlist *mnew = malloc(sizeof(struct mlist)); if (*pm == NULL) { diff --git a/src/kernel/save.c b/src/kernel/save.c index 928feedf2..0e0225f83 100644 --- a/src/kernel/save.c +++ b/src/kernel/save.c @@ -1,4 +1,4 @@ -/* +/* Copyright (c) 1998-2015, Enno Rehling Katja Zedel @@ -200,7 +200,7 @@ static unit *unitorders(FILE * F, int enc, struct faction *f) } } } - /* Nun wird der Befehl erzeut und eingehängt */ + /* Nun wird der Befehl erzeut und eingehängt */ *ordp = parse_order(s, u->faction->locale); if (*ordp) { ordp = &(*ordp)->next; @@ -233,8 +233,8 @@ static faction *factionorders(void) f->no, pass)); return 0; } - /* Die Partei hat sich zumindest gemeldet, so daß sie noch - * nicht als untätig gilt */ + /* Die Partei hat sich zumindest gemeldet, so daß sie noch + * nicht als untätig gilt */ /* TODO: +1 ist ein Workaround, weil cturn erst in process_orders * incrementiert wird. */ @@ -308,9 +308,9 @@ int readorders(const char *filename) /* Falls in unitorders() abgebrochen wird, steht dort entweder eine neue * Partei, eine neue Einheit oder das File-Ende. Das switch() wird erneut * durchlaufen, und die entsprechende Funktion aufgerufen. Man darf buf - * auf alle Fälle nicht überschreiben! Bei allen anderen Einträgen hier - * muß buf erneut gefüllt werden, da die betreffende Information in nur - * einer Zeile steht, und nun die nächste gelesen werden muß. */ + * auf alle Fälle nicht überschreiben! Bei allen anderen Einträgen hier + * muß buf erneut gefüllt werden, da die betreffende Information in nur + * einer Zeile steht, und nun die nächste gelesen werden muß. */ case P_NEXT: f = NULL; @@ -331,7 +331,7 @@ int readorders(const char *filename) /* ------------------------------------------------------------- */ /* #define INNER_WORLD */ -/* fürs debuggen nur den inneren Teil der Welt laden */ +/* fürs debuggen nur den inneren Teil der Welt laden */ /* -9;-27;-1;-19;Sumpfloch */ int inner_world(region * r) { @@ -988,6 +988,8 @@ void writeregion(struct gamedata *data, const region * r) const item_type *rht; struct demand *demand; rawmaterial *res = r->resources; + + assert(r->land); WRITE_STR(data->store, (const char *)r->land->name); assert(rtrees(r, 0) >= 0); assert(rtrees(r, 1) >= 0); diff --git a/src/laws.c b/src/laws.c index 2854b2cc8..06b2a0a1e 100755 --- a/src/laws.c +++ b/src/laws.c @@ -1,4 +1,4 @@ -/* +/* Copyright (c) 1998-2014, Enno Rehling Katja Zedel next ist dann - * undefiniert, also muessen wir hier schon das nächste + * undefiniert, also muessen wir hier schon das nächste * Element bestimmen */ int effect = get_effect(u, oldpotiontype[P_FOOL]); @@ -193,7 +193,7 @@ static void live(region * r) reduce_skill(u, sb, weeks); ADDMSG(&u->faction->msgs, msg_message("dumbeffect", "unit weeks skill", u, weeks, (skill_t)sb->id)); - } /* sonst Glück gehabt: wer nix weiß, kann nix vergessen... */ + } /* sonst Glück gehabt: wer nix weiß, kann nix vergessen... */ change_effect(u, oldpotiontype[P_FOOL], -effect); } age_unit(r, u); @@ -335,16 +335,16 @@ static void peasants(region * r) peasants += births + luck; } - /* Alle werden satt, oder halt soviele für die es auch Geld gibt */ + /* Alle werden satt, oder halt soviele für die es auch Geld gibt */ satiated = _min(peasants, money / maintenance_cost(NULL)); rsetmoney(r, money - satiated * maintenance_cost(NULL)); /* Von denjenigen, die nicht satt geworden sind, verhungert der - * Großteil. dead kann nie größer als rpeasants(r) - satiated werden, - * so dass rpeasants(r) >= 0 bleiben muß. */ + * Großteil. dead kann nie größer als rpeasants(r) - satiated werden, + * so dass rpeasants(r) >= 0 bleiben muß. */ - /* Es verhungert maximal die unterernährten Bevölkerung. */ + /* Es verhungert maximal die unterernährten Bevölkerung. */ n = _min(peasants - satiated, rpeasants(r)); dead += (int)(0.5 + n * PEASANT_STARVATION_CHANCE); @@ -409,10 +409,10 @@ static void migrate(region * r) rsethorses(r, rhorses(r) + m->horses); /* Was macht das denn hier? * Baumwanderung wird in trees() gemacht. - * wer fragt das? Die Baumwanderung war abhängig von der + * wer fragt das? Die Baumwanderung war abhängig von der * Auswertungsreihenfolge der regionen, - * das hatte ich geändert. jemand hat es wieder gelöscht, toll. - * ich habe es wieder aktiviert, muß getestet werden. + * das hatte ich geändert. jemand hat es wieder gelöscht, toll. + * ich habe es wieder aktiviert, muß getestet werden. */ *hp = m->next; m->next = free_migrants; @@ -452,8 +452,8 @@ static void horses(region * r) /* Pferde wandern in Nachbarregionen. * Falls die Nachbarregion noch berechnet - * werden muß, wird eine migration-Struktur gebildet, - * die dann erst in die Berechnung der Nachbarstruktur einfließt. + * werden muß, wird eine migration-Struktur gebildet, + * die dann erst in die Berechnung der Nachbarstruktur einfließt. */ for (n = 0; n != MAXDIRECTIONS; n++) { @@ -467,7 +467,7 @@ static void horses(region * r) else { migration *nb; /* haben wir die Migration schonmal benutzt? - * wenn nicht, müssen wir sie suchen. + * wenn nicht, müssen wir sie suchen. * Wandernde Pferde vermehren sich nicht. */ nb = get_migrants(r2); @@ -563,11 +563,11 @@ growing_trees(region * r, const int current_season, const int last_weeks_season) a = a_find(r->attribs, &at_germs); if (a && last_weeks_season == SEASON_SPRING) { - /* ungekeimte Samen bleiben erhalten, Sprößlinge wachsen */ + /* ungekeimte Samen bleiben erhalten, Sprößlinge wachsen */ sprout = _min(a->data.sa[1], rtrees(r, 1)); - /* aus dem gesamt Sprößlingepool abziehen */ + /* aus dem gesamt Sprößlingepool abziehen */ rsettrees(r, 1, rtrees(r, 1) - sprout); - /* zu den Bäumen hinzufügen */ + /* zu den Bäumen hinzufügen */ rsettrees(r, 2, rtrees(r, 2) + sprout); a_removeall(&r->attribs, &at_germs); @@ -583,7 +583,7 @@ growing_trees(region * r, const int current_season, const int last_weeks_season) return; /* Grundchance 1.0% */ - /* Jeder Elf in der Region erhöht die Chance marginal */ + /* Jeder Elf in der Region erhöht die Chance marginal */ elves = _min(elves, production(r) / 8); if (elves) { seedchance += 1.0 - pow(0.99999, elves * RESOURCE_QUANTITY); @@ -604,19 +604,19 @@ growing_trees(region * r, const int current_season, const int last_weeks_season) } } - /* Bäume breiten sich in Nachbarregionen aus. */ + /* Bäume breiten sich in Nachbarregionen aus. */ /* Gesamtzahl der Samen: - * bis zu 6% (FORESTGROWTH*3) der Bäume samen in die Nachbarregionen */ + * bis zu 6% (FORESTGROWTH*3) der Bäume samen in die Nachbarregionen */ seeds = (rtrees(r, 2) * FORESTGROWTH * 3) / 1000000; for (d = 0; d != MAXDIRECTIONS; ++d) { region *r2 = rconnect(r, d); if (r2 && fval(r2->terrain, LAND_REGION) && r2->terrain->size) { /* Eine Landregion, wir versuchen Samen zu verteilen: - * Die Chance, das Samen ein Stück Boden finden, in dem sie - * keimen können, hängt von der Bewuchsdichte und der - * verfügbaren Fläche ab. In Gletschern gibt es weniger - * Möglichkeiten als in Ebenen. */ + * Die Chance, das Samen ein Stück Boden finden, in dem sie + * keimen können, hängt von der Bewuchsdichte und der + * verfügbaren Fläche ab. In Gletschern gibt es weniger + * Möglichkeiten als in Ebenen. */ sprout = 0; seedchance = (1000 * maxworkingpeasants(r2)) / r2->terrain->size; for (i = 0; i < seeds / MAXDIRECTIONS; i++) { @@ -633,8 +633,8 @@ growing_trees(region * r, const int current_season, const int last_weeks_season) if (is_cursed(r->attribs, C_CURSED_BY_THE_GODS, 0)) return; - /* in at_germs merken uns die Zahl der Samen und Sprößlinge, die - * dieses Jahr älter werden dürfen, damit nicht ein Same im selben + /* in at_germs merken uns die Zahl der Samen und Sprößlinge, die + * dieses Jahr älter werden dürfen, damit nicht ein Same im selben * Zyklus zum Baum werden kann */ a = a_find(r->attribs, &at_germs); if (!a) { @@ -642,13 +642,13 @@ growing_trees(region * r, const int current_season, const int last_weeks_season) a->data.sa[0] = (short)rtrees(r, 0); a->data.sa[1] = (short)rtrees(r, 1); } - /* wir haben 6 Wochen zum wachsen, jeder Same/Sproß hat 18% Chance + /* wir haben 6 Wochen zum wachsen, jeder Same/Sproß hat 18% Chance * zu wachsen, damit sollten nach 5-6 Wochen alle gewachsen sein */ growth = 1800; /* Samenwachstum */ - /* Raubbau abfangen, es dürfen nie mehr Samen wachsen, als aktuell + /* Raubbau abfangen, es dürfen nie mehr Samen wachsen, als aktuell * in der Region sind */ seeds = _min(a->data.sa[0], rtrees(r, 0)); sprout = 0; @@ -661,15 +661,15 @@ growing_trees(region * r, const int current_season, const int last_weeks_season) a->data.sa[0] = (short)(seeds - sprout); /* aus dem gesamt Samenpool abziehen */ rsettrees(r, 0, rtrees(r, 0) - sprout); - /* zu den Sprößlinge hinzufügen */ + /* zu den Sprößlinge hinzufügen */ rsettrees(r, 1, rtrees(r, 1) + sprout); /* Baumwachstum */ - /* hier gehen wir davon aus, das Jungbäume nicht ohne weiteres aus - * der Region entfernt werden können, da Jungbäume in der gleichen - * Runde nachwachsen, wir also nicht mehr zwischen diesjährigen und - * 'alten' Jungbäumen unterscheiden könnten */ + /* hier gehen wir davon aus, das Jungbäume nicht ohne weiteres aus + * der Region entfernt werden können, da Jungbäume in der gleichen + * Runde nachwachsen, wir also nicht mehr zwischen diesjährigen und + * 'alten' Jungbäumen unterscheiden könnten */ sprout = _min(a->data.sa[1], rtrees(r, 1)); grownup_trees = 0; @@ -677,11 +677,11 @@ growing_trees(region * r, const int current_season, const int last_weeks_season) if (rng_int() % 10000 < growth) grownup_trees++; } - /* aus dem Sprößlingepool dieses Jahres abziehen */ + /* aus dem Sprößlingepool dieses Jahres abziehen */ a->data.sa[1] = (short)(sprout - grownup_trees); - /* aus dem gesamt Sprößlingepool abziehen */ + /* aus dem gesamt Sprößlingepool abziehen */ rsettrees(r, 1, rtrees(r, 1) - grownup_trees); - /* zu den Bäumen hinzufügen */ + /* zu den Bäumen hinzufügen */ rsettrees(r, 2, rtrees(r, 2) + grownup_trees); } } @@ -689,10 +689,10 @@ growing_trees(region * r, const int current_season, const int last_weeks_season) static void growing_herbs(region * r, const int current_season, const int last_weeks_season) { - /* Jetzt die Kräutervermehrung. Vermehrt wird logistisch: + /* Jetzt die Kräutervermehrung. Vermehrt wird logistisch: * * Jedes Kraut hat eine Wahrscheinlichkeit von (100-(vorhandene - * Kräuter))% sich zu vermehren. */ + * Kräuter))% sich zu vermehren. */ if (current_season != SEASON_WINTER) { int i; for (i = rherbs(r); i > 0; i--) { @@ -1070,7 +1070,7 @@ int enter_building(unit * u, order * ord, int id, bool report) region *r = u->region; building *b; - /* Schwimmer können keine Gebäude betreten, außer diese sind + /* Schwimmer können keine Gebäude betreten, außer diese sind * auf dem Ozean */ if (!fval(u_race(u), RCF_WALK) && !fval(u_race(u), RCF_FLY)) { if (!fval(r->terrain, SEA_REGION)) { @@ -1186,8 +1186,8 @@ void do_enter(struct region *r, bool is_final_attempt) } if (ulast != NULL) { /* Wenn wir hier angekommen sind, war der Befehl - * erfolgreich und wir löschen ihn, damit er im - * zweiten Versuch nicht nochmal ausgeführt wird. */ + * erfolgreich und wir löschen ihn, damit er im + * zweiten Versuch nicht nochmal ausgeführt wird. */ *ordp = ord->next; ord->next = NULL; free_order(ord); @@ -1499,9 +1499,10 @@ int prefix_cmd(unit * u, struct order *ord) ap = &u->faction->attribs; if (fval(u, UFL_GROUP)) { attrib *a = a_find(u->attribs, &at_group); - group *g = (group *)a->data.v; - if (a) + if (a) { + group *g = (group *)a->data.v; ap = &g->attribs; + } } set_prefix(ap, race_prefixes[var.i]); } @@ -1961,13 +1962,13 @@ int mail_cmd(unit * u, struct order *ord) s = gettoken(token, sizeof(token)); /* Falls kein Parameter, ist das eine Einheitsnummer; - * das Füllwort "AN" muß wegfallen, da gültige Nummer! */ + * das Füllwort "AN" muß wegfallen, da gültige Nummer! */ do { cont = 0; switch (findparam_ex(s, u->faction->locale)) { case P_REGION: - /* können alle Einheiten in der Region sehen */ + /* können alle Einheiten in der Region sehen */ s = getstrtoken(); if (!s || !s[0]) { cmistake(u, ord, 30, MSG_MESSAGE); @@ -2320,7 +2321,7 @@ static bool display_race(faction * f, unit * u, const race * rc) if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - /* b_armor : Rüstung */ + /* b_armor : Rüstung */ if (rc->armor > 0) { bytes = slprintf(bufp, size, ", %s: %d", LOC(f->locale, "stat_armor"), rc->armor); @@ -2631,7 +2632,7 @@ int combatspell_cmd(unit * u, struct order *ord) init_order(ord); s = gettoken(token, sizeof(token)); - /* KAMPFZAUBER [NICHT] löscht alle gesetzten Kampfzauber */ + /* KAMPFZAUBER [NICHT] löscht alle gesetzten Kampfzauber */ if (!s || *s == 0 || findparam(s, u->faction->locale) == P_NOT) { unset_combatspell(u, 0); return 0; @@ -2639,7 +2640,7 @@ int combatspell_cmd(unit * u, struct order *ord) /* Optional: STUFE n */ if (findparam(s, u->faction->locale) == P_LEVEL) { - /* Merken, setzen kommt erst später */ + /* Merken, setzen kommt erst später */ level = getint(); level = _max(0, level); s = gettoken(token, sizeof(token)); @@ -2654,7 +2655,7 @@ int combatspell_cmd(unit * u, struct order *ord) s = gettoken(token, sizeof(token)); if (findparam(s, u->faction->locale) == P_NOT) { - /* KAMPFZAUBER "" NICHT löscht diesen speziellen + /* KAMPFZAUBER "" NICHT löscht diesen speziellen * Kampfzauber */ unset_combatspell(u, sp); return 0; @@ -2669,7 +2670,7 @@ int combatspell_cmd(unit * u, struct order *ord) /* ------------------------------------------------------------- */ /* Beachten: einige Monster sollen auch unbewaffent die Region bewachen - * können */ + * können */ enum { E_GUARD_OK, E_GUARD_UNARMED, E_GUARD_NEWBIE, E_GUARD_FLEEING }; @@ -2712,6 +2713,7 @@ void update_guards(void) int guard_on_cmd(unit * u, struct order *ord) { assert(getkeyword(ord) == K_GUARD); + assert(u && u->faction); init_order(ord); @@ -2731,7 +2733,7 @@ int guard_on_cmd(unit * u, struct order *ord) cmistake(u, ord, 95, MSG_EVENT); } else { - /* Monster der Monsterpartei dürfen immer bewachen */ + /* Monster der Monsterpartei dürfen immer bewachen */ if (is_monsters(u->faction)) { guard(u, GUARD_ALL); } @@ -2765,7 +2767,7 @@ void sinkships(struct region * r) if (!sh->type->construction || sh->size >= sh->type->construction->maxsize) { if (fval(r->terrain, SEA_REGION) && (!enoughsailors(sh, r) || get_captain(sh) == NULL)) { - /* Schiff nicht seetüchtig */ + /* Schiff nicht seetüchtig */ float dmg = get_param_flt(global.parameters, "rules.ship.damage.nocrewocean", 0.30F); @@ -3222,7 +3224,7 @@ static void ageing(void) sp = &(*sp)->next; } - /* Gebäude */ + /* Gebäude */ for (bp = &r->buildings; *bp;) { building *b = *bp; age_building(b); @@ -3428,7 +3430,7 @@ void update_long_order(unit * u) freset(u, UFL_MOVED); freset(u, UFL_LONGACTION); if (hunger) { - /* Hungernde Einheiten führen NUR den default-Befehl aus */ + /* Hungernde Einheiten führen NUR den default-Befehl aus */ set_order(&u->thisorder, default_order(u->faction->locale)); } else { @@ -3449,7 +3451,7 @@ void update_long_order(unit * u) continue; if (is_exclusive(ord)) { - /* Über dieser Zeile nur Befehle, die auch eine idle Faction machen darf */ + /* Ãœber dieser Zeile nur Befehle, die auch eine idle Faction machen darf */ if (idle(u->faction)) { set_order(&u->thisorder, default_order(u->faction->locale)); } @@ -3461,13 +3463,13 @@ void update_long_order(unit * u) else { keyword_t keyword = getkeyword(ord); switch (keyword) { - /* Wenn gehandelt wird, darf kein langer Befehl ausgeführt + /* Wenn gehandelt wird, darf kein langer Befehl ausgeführt * werden. Da Handel erst nach anderen langen Befehlen kommt, - * muß das vorher abgefangen werden. Wir merken uns also + * muß das vorher abgefangen werden. Wir merken uns also * hier, ob die Einheit handelt. */ case K_BUY: case K_SELL: - /* Wenn die Einheit handelt, muß der Default-Befehl gelöscht + /* Wenn die Einheit handelt, muß der Default-Befehl gelöscht * werden. * Wird je diese Ausschliesslichkeit aufgehoben, muss man aufpassen * mit der Reihenfolge von Kaufen, Verkaufen etc., damit es Spielern @@ -3477,7 +3479,7 @@ void update_long_order(unit * u) case K_CAST: /* dient dazu, das neben Zaubern kein weiterer Befehl - * ausgeführt werden kann, Zaubern ist ein kurzer Befehl */ + * ausgeführt werden kann, Zaubern ist ein kurzer Befehl */ set_order(&u->thisorder, copy_order(ord)); break; @@ -3490,7 +3492,7 @@ void update_long_order(unit * u) if (hunger) { return; } - /* Wenn die Einheit handelt, muß der Default-Befehl gelöscht + /* Wenn die Einheit handelt, muß der Default-Befehl gelöscht * werden. */ if (trade) { @@ -3566,7 +3568,7 @@ void monthly_healing(void) double healingcurse = 0; if (heal_ct != NULL) { - /* bonus zurücksetzen */ + /* bonus zurücksetzen */ curse *c = get_curse(r->attribs, heal_ct); if (c != NULL) { healingcurse = curse_geteffect(c); @@ -3576,8 +3578,8 @@ void monthly_healing(void) int umhp = unit_max_hp(u) * u->number; double p = 1.0; - /* hp über Maximum bauen sich ab. Wird zb durch Elixier der Macht - * oder verändertes Ausdauertalent verursacht */ + /* hp über Maximum bauen sich ab. Wird zb durch Elixier der Macht + * oder verändertes Ausdauertalent verursacht */ if (u->hp > umhp) { u->hp -= (int)ceil((u->hp - umhp) / 2.0); if (u->hp < umhp) @@ -3604,7 +3606,7 @@ void monthly_healing(void) if (btype == bt_find("inn")) { p *= 1.5; } - /* pro punkt 5% höher */ + /* pro punkt 5% höher */ p *= (1.0 + healingcurse * 0.05); maxheal = p * maxheal; @@ -3616,7 +3618,7 @@ void monthly_healing(void) /* Aufaddieren der geheilten HP. */ u->hp = _min(u->hp + addhp, umhp); - /* soll man an negativer regeneration sterben können? */ + /* soll man an negativer regeneration sterben können? */ assert(u->hp > 0); } } @@ -3663,7 +3665,7 @@ void defaultorders(void) ord->next = NULL; free_order(ord); if (!neworders) { - /* lange Befehle aus orders und old_orders löschen zu gunsten des neuen */ + /* lange Befehle aus orders und old_orders löschen zu gunsten des neuen */ remove_exclusive(&u->orders); remove_exclusive(&u->old_orders); neworders = true; @@ -4535,8 +4537,8 @@ void processorders(void) wormholes_update(); } - /* immer ausführen, wenn neue Sprüche dazugekommen sind, oder sich - * Beschreibungen geändert haben */ + /* immer ausführen, wenn neue Sprüche dazugekommen sind, oder sich + * Beschreibungen geändert haben */ update_spells(); warn_password(); } diff --git a/src/move.c b/src/move.c index 6f55ed688..b14dfb68d 100644 --- a/src/move.c +++ b/src/move.c @@ -1,4 +1,4 @@ -/* +/* Copyright (c) 1998-2014, Enno Rehling Katja Zedel items, &animals, &acap, &vehicles, &vcap); - /* Man trägt sein eigenes Gewicht plus seine Kapazität! Die Menschen - ** tragen nichts (siehe walkingcapacity). Ein Wagen zählt nur, wenn er + /* Man trägt sein eigenes Gewicht plus seine Kapazität! Die Menschen + ** tragen nichts (siehe walkingcapacity). Ein Wagen zählt nur, wenn er ** von zwei Pferden gezogen wird */ animals = _min(animals, effskill(u, SK_RIDING) * u->number * 2); if (fval(u_race(u), RCF_HORSE)) animals += u->number; - /* maximal diese Pferde können zum Ziehen benutzt werden */ + /* maximal diese Pferde können zum Ziehen benutzt werden */ vehicles = _min(animals / HORSESNEEDED, vehicles); return vehicles * vcap + animals * acap; @@ -282,7 +282,7 @@ int walkingcapacity(const struct unit *u) people = u->number; } - /* maximal diese Pferde können zum Ziehen benutzt werden */ + /* maximal diese Pferde können zum Ziehen benutzt werden */ wagen_mit_pferden = _min(vehicles, pferde_fuer_wagen / HORSESNEEDED); n = wagen_mit_pferden * vcap; @@ -295,7 +295,7 @@ int walkingcapacity(const struct unit *u) /* Genug Trolle, um die Restwagen zu ziehen? */ wagen_mit_trollen = _min(u->number / 4, wagen_ohne_pferde); - /* Wagenkapazität hinzuzählen */ + /* Wagenkapazität hinzuzählen */ n += wagen_mit_trollen * vcap; wagen_ohne_pferde -= wagen_mit_trollen; } @@ -357,16 +357,16 @@ static int canwalk(unit * u) if (walkingcapacity(u) - eff_weight(u) >= 0) return E_CANWALK_OK; - /* Stimmt das Gewicht, impliziert dies hier, daß alle Wagen ohne + /* Stimmt das Gewicht, impliziert dies hier, daß alle Wagen ohne * Zugpferde/-trolle als Fracht aufgeladen wurden: zu viele Pferde hat * die Einheit nicht zum Ziehen benutzt, also nicht mehr Wagen gezogen * als erlaubt. */ if (vehicles > maxwagen) return E_CANWALK_TOOMANYCARTS; - /* Es muß nicht zwingend an den Wagen liegen, aber egal... (man - * könnte z.B. auch 8 Eisen abladen, damit ein weiterer Wagen als - * Fracht draufpaßt) */ + /* Es muß nicht zwingend an den Wagen liegen, aber egal... (man + * könnte z.B. auch 8 Eisen abladen, damit ein weiterer Wagen als + * Fracht draufpaßt) */ return E_CANWALK_TOOHEAVY; } @@ -663,7 +663,7 @@ int check_ship_allowed(struct ship *sh, const region * r) bt_harbour = bt_find("harbour"); if (sh->region && r_insectstalled(r)) { - /* insekten dürfen nicht hier rein. haben wir welche? */ + /* insekten dürfen nicht hier rein. haben wir welche? */ unit *u; for (u = sh->region->units; u != NULL; u = u->next) { @@ -757,13 +757,13 @@ static void drifting_ships(region * r) sh->flags |= SF_FISHING; } - /* Schiff schon abgetrieben oder durch Zauber geschützt? */ + /* Schiff schon abgetrieben oder durch Zauber geschützt? */ if (!drift || fval(sh, SF_DRIFTED) || is_cursed(sh->attribs, C_SHIP_NODRIFT, 0)) { shp = &sh->next; continue; } - /* Kapitän bestimmen */ + /* Kapitän bestimmen */ for (captain = r->units; captain; captain = captain->next) { if (captain->ship != sh) continue; @@ -773,8 +773,8 @@ static void drifting_ships(region * r) break; } } - /* Kapitän da? Beschädigt? Genügend Matrosen? - * Genügend leicht? Dann ist alles OK. */ + /* Kapitän da? Beschädigt? Genügend Matrosen? + * Genügend leicht? Dann ist alles OK. */ assert(sh->type->construction->improvement == NULL); /* sonst ist construction::size nicht ship_type::maxsize */ if (captain && sh->size == sh->type->construction->maxsize @@ -784,7 +784,7 @@ static void drifting_ships(region * r) } /* Auswahl einer Richtung: Zuerst auf Land, dann - * zufällig. Falls unmögliches Resultat: vergiß es. */ + * zufällig. Falls unmögliches Resultat: vergiß es. */ d_offset = rng_int() % MAXDIRECTIONS; for (d = 0; d != MAXDIRECTIONS; ++d) { region *rn; @@ -1335,7 +1335,9 @@ static bool roadto(const region * r, direction_t dir) region *r2; static const curse_type *roads_ct = NULL; - if (dir >= MAXDIRECTIONS || dir < 0) + assert(r); + assert(dir= MAXDIRECTIONS || dir < 0) return false; r2 = rconnect(r, dir); if (r == NULL || r2 == NULL) @@ -1476,12 +1478,12 @@ static void make_route(unit * u, order * ord, region_list ** routep) /** calculate the speed of a unit * - * zu Fuß reist man 1 Region, zu Pferd 2 Regionen. Mit Straßen reist - * man zu Fuß 2, mit Pferden 3 weit. + * zu Fuß reist man 1 Region, zu Pferd 2 Regionen. Mit Straßen reist + * man zu Fuß 2, mit Pferden 3 weit. * - * Berechnet wird das mit BPs. Zu Fuß hat man 4 BPs, zu Pferd 6. - * Normalerweise verliert man 3 BP pro Region, bei Straßen nur 2 BP. - * Außerdem: Wenn Einheit transportiert, nur halbe BP + * Berechnet wird das mit BPs. Zu Fuß hat man 4 BPs, zu Pferd 6. + * Normalerweise verliert man 3 BP pro Region, bei Straßen nur 2 BP. + * Außerdem: Wenn Einheit transportiert, nur halbe BP */ static int movement_speed(unit * u) { @@ -1621,7 +1623,7 @@ static const region_list *travel_route(unit * u, landing = true; } else if ((u_race(u)->flags & RCF_WALK) == 0) { - /* Spezialeinheiten, die nicht laufen können. */ + /* Spezialeinheiten, die nicht laufen können. */ ADDMSG(&u->faction->msgs, msg_message("detectocean", "unit region", u, next)); break; @@ -1634,7 +1636,7 @@ static const region_list *travel_route(unit * u, } } else { - /* Ozeanfelder können nur von Einheiten mit Schwimmen und ohne + /* Ozeanfelder können nur von Einheiten mit Schwimmen und ohne * Pferde betreten werden. */ if (!(canswim(u) || canfly(u))) { ADDMSG(&u->faction->msgs, msg_message("detectocean", @@ -1729,7 +1731,7 @@ static const region_list *travel_route(unit * u, walkmode = 2; } - /* Berichte über Durchreiseregionen */ + /* Berichte über Durchreiseregionen */ if (mode != TRAVEL_TRANSPORTED) { arg_regions *ar = var_copy_regions(route_begin, steps - 1); @@ -1808,7 +1810,7 @@ buildingtype_exists(const region * r, const building_type * bt, bool working) return false; } -/* Prüft, ob Ablegen von einer Küste in eine der erlaubten Richtungen erfolgt. */ +/* Prüft, ob Ablegen von einer Küste in eine der erlaubten Richtungen erfolgt. */ static bool check_takeoff(ship * sh, region * from, region * to) { @@ -1858,18 +1860,18 @@ sail(unit * u, order * ord, bool move_on_land, region_list ** routep) return; /* Wir suchen so lange nach neuen Richtungen, wie es geht. Diese werden - * dann nacheinander ausgeführt. */ + * dann nacheinander ausgeführt. */ k = shipspeed(sh, u); last_point = starting_point; current_point = starting_point; - /* die nächste Region, in die man segelt, wird durch movewhere () aus der + /* die nächste Region, in die man segelt, wird durch movewhere () aus der * letzten Region bestimmt. * * Anfangen tun wir bei starting_point. next_point ist beim ersten - * Durchlauf schon gesetzt (Parameter!). current_point ist die letzte gültige, + * Durchlauf schon gesetzt (Parameter!). current_point ist die letzte gültige, * befahrene Region. */ while (next_point && current_point != next_point && step < k) { @@ -1916,7 +1918,7 @@ sail(unit * u, order * ord, bool move_on_land, region_list ** routep) bool storm = true; int d_offset = rng_int() % MAXDIRECTIONS; direction_t d; - /* Sturm nur, wenn nächste Region Hochsee ist. */ + /* Sturm nur, wenn nächste Region Hochsee ist. */ for (d = 0; d != MAXDIRECTIONS; ++d) { direction_t dnext = (direction_t)((d + d_offset) % MAXDIRECTIONS); region *rn = rconnect(current_point, dnext); @@ -2052,16 +2054,16 @@ sail(unit * u, order * ord, bool move_on_land, region_list ** routep) sh = NULL; } - /* Nun enthält current_point die Region, in der das Schiff seine Runde - * beendet hat. Wir generieren hier ein Ereignis für den Spieler, das - * ihm sagt, bis wohin er gesegelt ist, falls er überhaupt vom Fleck - * gekommen ist. Das ist nicht der Fall, wenn er von der Küste ins + /* Nun enthält current_point die Region, in der das Schiff seine Runde + * beendet hat. Wir generieren hier ein Ereignis für den Spieler, das + * ihm sagt, bis wohin er gesegelt ist, falls er überhaupt vom Fleck + * gekommen ist. Das ist nicht der Fall, wenn er von der Küste ins * Inland zu segeln versuchte */ if (sh != NULL && fval(sh, SF_MOVED)) { unit *harbourmaster; /* nachdem alle Richtungen abgearbeitet wurden, und alle Einheiten - * transferiert wurden, kann der aktuelle Befehl gelöscht werden. */ + * transferiert wurden, kann der aktuelle Befehl gelöscht werden. */ cycle_route(ord, u, step); set_order(&u->thisorder, NULL); if (!move_on_land) { @@ -2086,7 +2088,7 @@ sail(unit * u, order * ord, bool move_on_land, region_list ** routep) sh = move_ship(sh, starting_point, current_point, *routep); - /* Hafengebühren ? */ + /* Hafengebühren ? */ harbourmaster = owner_buildingtyp(current_point, bt_find("harbour")); if (sh && harbourmaster != NULL) { @@ -2434,7 +2436,7 @@ static void piracy_cmd(unit * u, struct order *ord) /* Wenn nicht, sehen wir, ob wir ein Ziel finden. */ if (target_dir == NODIRECTION) { - /* Einheit ist also Kapitän. Jetzt gucken, in wievielen + /* Einheit ist also Kapitän. Jetzt gucken, in wievielen * Nachbarregionen potentielle Opfer sind. */ for (dir = 0; dir < MAXDIRECTIONS; dir++) { @@ -2493,7 +2495,7 @@ static void piracy_cmd(unit * u, struct order *ord) set_order(&u->thisorder, create_order(K_MOVE, u->faction->locale, "%s", LOC(u->faction->locale, directions[target_dir]))); - /* Bewegung ausführen */ + /* Bewegung ausführen */ init_order(u->thisorder); move(u, true); } @@ -2604,7 +2606,7 @@ static int hunt(unit * u, order * ord) /* NACH ignorieren und Parsing initialisieren. */ init_tokens_str(command); getstrtoken(); - /* NACH ausführen */ + /* NACH ausführen */ move(u, false); return 1; /* true -> Einheitenliste von vorne durchgehen */ } @@ -2803,7 +2805,7 @@ void movement(void) if (repeat) continue; if (ships == 0) { - /* Abtreiben von beschädigten, unterbemannten, überladenen Schiffen */ + /* Abtreiben von beschädigten, unterbemannten, überladenen Schiffen */ drifting_ships(r); } r = r->next; diff --git a/src/upkeep.test.c b/src/upkeep.test.c index c7757624a..46d9a6d04 100644 --- a/src/upkeep.test.c +++ b/src/upkeep.test.c @@ -1,4 +1,4 @@ -#include +#include #include "upkeep.h" #include @@ -82,6 +82,7 @@ void test_upkeep_from_pool(CuTest * tc) assert(i_silver); r = findregion(0, 0); u1 = test_create_unit(test_create_faction(test_create_race("human")), r); + assert(u1); u2 = test_create_unit(u1->faction, r); assert(r && u1 && u2); diff --git a/src/util/log.c b/src/util/log.c index a24c4b153..fadcb532a 100644 --- a/src/util/log.c +++ b/src/util/log.c @@ -1,4 +1,4 @@ -/* +/* +-------------------+ Christian Schlittchen | | Enno Rehling | Eressea PBEM host | Katja Zedel @@ -54,13 +54,13 @@ cp_convert(const char *format, char *buffer, size_t length, int codepage) char *pos = buffer; while (pos + 1 < buffer + length && *input) { - size_t length = 0; + size_t size = 0; int result = 0; if (codepage == 437) { - result = unicode_utf8_to_cp437(pos, input, &length); + result = unicode_utf8_to_cp437(pos, input, &size); } else if (codepage == 1252) { - result = unicode_utf8_to_cp1252(pos, input, &length); + result = unicode_utf8_to_cp1252(pos, input, &size); } if (result != 0) { *pos = 0; /* just in case caller ignores our return value */