diff --git a/src/creport.c b/src/creport.c index 7db0fdee3..42a440c8a 100644 --- a/src/creport.c +++ b/src/creport.c @@ -746,8 +746,8 @@ static void cr_output_unit(FILE * F, const region * r, const faction * f, const faction *sf; const char *prefix; - assert(u); - if (!u || fval(u_race(u), RCF_INVISIBLE)) + assert(u && u->number); + if (u != NULL || fval(u_race(u), RCF_INVISIBLE)) return; if (!init) { @@ -755,11 +755,10 @@ static void cr_output_unit(FILE * F, const region * r, const faction * f, itemcloak_ct = ct_find("itemcloak"); } if (itemcloak_ct != NULL) { - itemcloak = curse_active(get_curse(u->attribs, itemcloak_ct)); //TODO: V595 http://www.viva64.com/en/V595 The 'u' pointer was utilized before it was verified against nullptr. Check lines: 758, 761. + curse * cu = get_curse(u->attribs, itemcloak_ct); + itemcloak = cu && curse_active(cu); } - assert(u && u->number); - fprintf(F, "EINHEIT %d\n", u->no); fprintf(F, "\"%s\";Name\n", unit_getname(u)); str = u_description(u, f->locale); diff --git a/src/give.c b/src/give.c index 95361b5ca..f9879b9dd 100644 --- a/src/give.c +++ b/src/give.c @@ -400,7 +400,6 @@ message * disband_men(int n, unit * u, struct order *ord) { void give_unit(unit * u, unit * u2, order * ord) { - region *r = u->region; //TODO: V595 http://www.viva64.com/en/V595 The 'u' pointer was utilized before it was verified against nullptr. Check lines: 403, 406. int maxt = max_transfers(); assert(u); @@ -409,7 +408,7 @@ void give_unit(unit * u, unit * u2, order * ord) return; } - if (u && unit_has_cursed_item(u)) { + if (unit_has_cursed_item(u)) { cmistake(u, ord, 78, MSG_COMMERCE); return; } @@ -424,6 +423,7 @@ void give_unit(unit * u, unit * u2, order * ord) } if (u2 == NULL) { + region *r = u->region; message *msg; if (fval(r->terrain, SEA_REGION)) { msg = disband_men(u->number, u, ord); diff --git a/src/kernel/item.c b/src/kernel/item.c index 6c37ebad2..bb2282f80 100644 --- a/src/kernel/item.c +++ b/src/kernel/item.c @@ -332,10 +332,15 @@ potion_type *new_potiontype(item_type * itype, int level) } void it_set_appearance(item_type *itype, const char *appearance) { - assert(itype && itype->rtype && appearance); - itype->_appearance[0] = _strdup(appearance); //TODO: V595 http://www.viva64.com/en/V595 The 'appearance' pointer was utilized before it was verified against nullptr. Check lines: 336, 337. - itype->_appearance[1] = appearance ? - strcat(strcpy((char *)malloc(strlen((char *)appearance) + 3), (char *)appearance), "_p") : 0; + assert(itype); + assert(itype->rtype); + if (appearance) { + itype->_appearance[0] = _strdup(appearance); + itype->_appearance[1] = strcat(strcpy((char *)malloc(strlen((char *)appearance) + 3), (char *)appearance), "_p"); + } else { + itype->_appearance[0] = 0; + itype->_appearance[1] = 0; + } } const resource_type *item2resource(const item_type * itype) diff --git a/src/kernel/save.c b/src/kernel/save.c index 04575797b..d997c3216 100644 --- a/src/kernel/save.c +++ b/src/kernel/save.c @@ -978,6 +978,9 @@ static region *readregion(struct gamedata *data, int x, int y) void writeregion(struct gamedata *data, const region * r) { + assert(r); + assert(data); + WRITE_INT(data->store, r->uid); WRITE_STR(data->store, region_getinfo(r)); WRITE_TOK(data->store, r->terrain->_name); @@ -988,9 +991,9 @@ 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); //TODO: V595 http://www.viva64.com/en/V595 The 'r->land' pointer was utilized before it was verified against nullptr. Check lines: 993, 1023. + + assert(r->land); + WRITE_STR(data->store, (const char *)r->land->name); assert(rtrees(r, 0) >= 0); assert(rtrees(r, 1) >= 0); assert(rtrees(r, 2) >= 0); @@ -1020,11 +1023,9 @@ void writeregion(struct gamedata *data, const region * r) WRITE_INT(data->store, rherbs(r)); WRITE_INT(data->store, rpeasants(r)); WRITE_INT(data->store, rmoney(r)); - if (r->land) { - for (demand = r->land->demands; demand; demand = demand->next) { - WRITE_TOK(data->store, resourcename(demand->type->itype->rtype, 0)); - WRITE_INT(data->store, demand->value); - } + for (demand = r->land->demands; demand; demand = demand->next) { + WRITE_TOK(data->store, resourcename(demand->type->itype->rtype, 0)); + WRITE_INT(data->store, demand->value); } WRITE_TOK(data->store, "end"); write_items(data->store, r->land->items); diff --git a/src/laws.c b/src/laws.c index 65219792f..b165511e4 100755 --- a/src/laws.c +++ b/src/laws.c @@ -1738,10 +1738,11 @@ int name_cmd(struct unit *u, struct order *ord) } else { const struct locale *lang = locales; + size_t f_len = strlen(f->name); for (; lang; lang = nextlocale(lang)) { const char *fdname = LOC(lang, "factiondefault"); size_t fdlen = strlen(fdname); - if (strlen(f->name) >= fdlen && strncmp(f->name, fdname, fdlen) == 0) { //TODO: V814 http://www.viva64.com/en/V814 Decreased performance. The 'strlen' function was called multiple times inside the body of a loop. + if (f_len >= fdlen && strncmp(f->name, fdname, fdlen) == 0) { break; } } @@ -1775,18 +1776,17 @@ int name_cmd(struct unit *u, struct order *ord) } else { const struct locale *lang = locales; + size_t sh_len = strlen(sh->name); for (; lang; lang = nextlocale(lang)) { const char *sdname = LOC(lang, sh->type->_name); size_t sdlen = strlen(sdname); - if (strlen(sh->name) >= sdlen //TODO: V814 http://www.viva64.com/en/V814 Decreased performance. The 'strlen' function was called multiple times inside the body of a loop. - && strncmp(sh->name, sdname, sdlen) == 0) { + if (sh_len >= sdlen && strncmp(sh->name, sdname, sdlen) == 0) { break; } sdname = LOC(lang, parameters[P_SHIP]); sdlen = strlen(sdname); - if (strlen(sh->name) >= sdlen //TODO: V814 http://www.viva64.com/en/V814 Decreased performance. The 'strlen' function was called multiple times inside the body of a loop. - && strncmp(sh->name, sdname, sdlen) == 0) { + if (sh_len >= sdlen && strncmp(sh->name, sdname, sdlen) == 0) { break; } @@ -2713,13 +2713,15 @@ void update_guards(void) int guard_on_cmd(unit * u, struct order *ord) { assert(getkeyword(ord) == K_GUARD); - assert(u && u->faction); + assert(u); + assert(u->faction); init_order(ord); /* GUARD NOT is handled in goard_off_cmd earlier in the turn */ - if (getparam(u->faction->locale) == P_NOT) //TODO: V595 http://www.viva64.com/en/V595 The 'u->faction' pointer was utilized before it was verified against nullptr. Check lines: 2721, 2737. + if (getparam(u->faction->locale) == P_NOT) { return 0; + } if (fval(u->region->terrain, SEA_REGION)) { cmistake(u, ord, 2, MSG_EVENT); diff --git a/src/magic.c b/src/magic.c index 5c9e3edc3..287f8fd55 100644 --- a/src/magic.c +++ b/src/magic.c @@ -1789,9 +1789,10 @@ static void free_spellparameter(spellparameter * pa) { int i; - /* Elemente free'en */ - for (i = 0; i < pa->length; i++) { + assert(pa->param); + for (i = 0; i < pa->length; i++) { + assert(pa->param[i]); switch (pa->param[i]->typ) { case SPP_STRING: free(pa->param[i]->data.s); @@ -1799,12 +1800,9 @@ static void free_spellparameter(spellparameter * pa) default: break; } - free(pa->param[i]); //TODO: V595 http://www.viva64.com/en/V595 The 'pa->param' pointer was utilized before it was verified against nullptr. Check lines: 1802, 1805. + free(pa->param[i]); } - - if (pa->param) - free(pa->param); - /* struct free'en */ + free(pa->param); free(pa); } diff --git a/src/monster.h b/src/monster.h index fc3ca94a2..476bcb73e 100644 --- a/src/monster.h +++ b/src/monster.h @@ -31,8 +31,7 @@ extern "C" { void make_zombie(struct unit * u); #define MONSTER_ID 666 -#define is_monsters(f) (f && fval(f, FFL_NPC) && f==get_monsters()) - +#define is_monsters(f) (fval(f, FFL_NPC) && f==get_monsters()) #ifdef __cplusplus } diff --git a/src/report.c b/src/report.c index f476a5c7f..98740aef2 100644 --- a/src/report.c +++ b/src/report.c @@ -840,7 +840,7 @@ bool see_border(const connection * b, const faction * f, const region * r) static void describe(stream *out, const seen_region * sr, faction * f) { - const region *r = sr->r; + const region *r; int n; bool dh; direction_t d; @@ -862,6 +862,11 @@ static void describe(stream *out, const seen_region * sr, faction * f) size_t size = sizeof(buf); int bytes; + assert(out); + assert(f); + assert(sr); + + r = sr->r; for (d = 0; d != MAXDIRECTIONS; d++) { /* Nachbarregionen, die gesehen werden, ermitteln */ region *r2 = rconnect(r, d); @@ -945,7 +950,7 @@ static void describe(stream *out, const seen_region * sr, faction * f) bytes = (int)strlcpy(bufp, LOC(f->locale, "nr_tree"), size); } else { - bytes = (int)strlcpy(bufp, LOC(f->locale, "nr_tree_p"), size); //TODO: V595 http://www.viva64.com/en/V595 The 'f' pointer was utilized before it was verified against nullptr. Check lines: 948, 956. + bytes = (int)strlcpy(bufp, LOC(f->locale, "nr_tree_p"), size); } if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); @@ -953,7 +958,7 @@ static void describe(stream *out, const seen_region * sr, faction * f) } /* iron & stone */ - if (sr->mode == see_unit && f != (faction *)NULL) { + if (sr->mode == see_unit) { resource_report result[MAX_RAWMATERIALS]; int n, numresults = report_resources(sr, result, MAX_RAWMATERIALS, f); @@ -1410,7 +1415,6 @@ static void durchreisende(stream *out, const region * r, const faction * f) } } } - /* TODO: finish localization */ if (size > 0) { if (maxtravel == 1) { bytes = _snprintf(bufp, size, " %s", LOC(f->locale, "has_moved_one")); diff --git a/src/spy.c b/src/spy.c index a247b6c66..7d9c6529a 100644 --- a/src/spy.c +++ b/src/spy.c @@ -375,7 +375,7 @@ static int try_destruction(unit * u, unit * u2, const ship * sh, int skilldiff) } else if (skilldiff < 0) { /* tell the unit that the attempt was detected: */ - ADDMSG(&u2->faction->msgs, msg_message(destruction_detected_msg, //TODO: V595 http://www.viva64.com/en/V595 The 'u2' pointer was utilized before it was verified against nullptr. Check lines: 378, 381. + ADDMSG(&u->faction->msgs, msg_message(destruction_detected_msg, "ship unit", sh, u)); /* tell the enemy whodunit: */ if (u2) { diff --git a/src/study.c b/src/study.c index a302737fa..ec377f0f7 100644 --- a/src/study.c +++ b/src/study.c @@ -542,6 +542,9 @@ int learn_cmd(unit * u, order * ord) int maxalchemy = 0; int speed_rule = (study_rule_t)get_param_int(global.parameters, "study.speedup", 0); static int learn_newskills = -1; + struct building *b = inside_building(u); + const struct building_type *btype = b ? b->type : NULL; + if (learn_newskills < 0) { const char *str = get_param(global.parameters, "study.newskills"); if (str && strcmp(str, "false") == 0) @@ -603,220 +606,217 @@ int learn_cmd(unit * u, order * ord) return 0; } /* Akademie: */ - { - struct building *b = inside_building(u); - const struct building_type *btype = b ? b->type : NULL; + b = inside_building(u); + btype = b ? b->type : NULL; - if (btype && btype == bt_find("academy")) { - studycost = _max(50, studycost * 2); - } - } + if (btype && btype == bt_find("academy")) { + studycost = _max(50, studycost * 2); + } - if (sk == SK_MAGIC) { - if (u->number > 1) { - cmistake(u, ord, 106, MSG_MAGIC); - return 0; - } - if (is_familiar(u)) { - /* Vertraute zaehlen nicht zu den Magiern einer Partei, - * koennen aber nur Graue Magie lernen */ - mtyp = M_GRAY; - if (!is_mage(u)) - create_mage(u, mtyp); - } - else if (!has_skill(u, SK_MAGIC)) { - int mmax = skill_limit(u->faction, SK_MAGIC); - /* Die Einheit ist noch kein Magier */ - if (count_skill(u->faction, SK_MAGIC) + u->number > mmax) { - ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "error_max_magicians", - "amount", mmax)); - return 0; - } - mtyp = getmagicskill(u->faction->locale); - if (mtyp == M_NONE || mtyp == M_GRAY) { - /* wurde kein Magiegebiet angegeben, wird davon - * ausgegangen, dass das normal gelernt werden soll */ - if (u->faction->magiegebiet != 0) { - mtyp = u->faction->magiegebiet; - } - else { - /* Es wurde kein Magiegebiet angegeben und die Partei - * hat noch keins gewaehlt. */ - mtyp = getmagicskill(u->faction->locale); - if (mtyp == M_NONE) { - cmistake(u, ord, 178, MSG_MAGIC); - return 0; - } - } - } - if (mtyp != u->faction->magiegebiet) { - /* Es wurde versucht, ein anderes Magiegebiet zu lernen - * als das der Partei */ - if (u->faction->magiegebiet != 0) { - cmistake(u, ord, 179, MSG_MAGIC); - return 0; - } - else { - /* Lernt zum ersten mal Magie und legt damit das - * Magiegebiet der Partei fest */ - u->faction->magiegebiet = mtyp; - } - } - if (!is_mage(u)) - create_mage(u, mtyp); - } - else { - /* ist schon ein Magier und kein Vertrauter */ - if (u->faction->magiegebiet == 0) { - /* die Partei hat noch kein Magiegebiet gewaehlt. */ - mtyp = getmagicskill(u->faction->locale); - if (mtyp == M_NONE) { - mtyp = getmagicskill(u->faction->locale); - if (mtyp == M_NONE) { - cmistake(u, ord, 178, MSG_MAGIC); - return 0; - } - } - /* Legt damit das Magiegebiet der Partei fest */ - u->faction->magiegebiet = mtyp; - } - } - } - if (sk == SK_ALCHEMY) { - maxalchemy = eff_skill(u, SK_ALCHEMY, r); - if (!has_skill(u, SK_ALCHEMY)) { - int amax = skill_limit(u->faction, SK_ALCHEMY); - if (count_skill(u->faction, SK_ALCHEMY) + u->number > amax) { - ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "error_max_alchemists", - "amount", amax)); - return 0; - } - } - } - if (studycost) { - int cost = studycost * u->number; - money = get_pooled(u, get_resourcetype(R_SILVER), GET_DEFAULT, cost); - money = _min(money, cost); - } - if (money < studycost * u->number) { - studycost = p; /* Ohne Univertreurung */ - money = _min(money, studycost); - if (p > 0 && money < studycost * u->number) { - cmistake(u, ord, 65, MSG_EVENT); - multi = money / (double)(studycost * u->number); - } - } + if (sk == SK_MAGIC) { + if (u->number > 1) { + cmistake(u, ord, 106, MSG_MAGIC); + return 0; + } + if (is_familiar(u)) { + /* Vertraute zaehlen nicht zu den Magiern einer Partei, + * koennen aber nur Graue Magie lernen */ + mtyp = M_GRAY; + if (!is_mage(u)) + create_mage(u, mtyp); + } + else if (!has_skill(u, SK_MAGIC)) { + int mmax = skill_limit(u->faction, SK_MAGIC); + /* Die Einheit ist noch kein Magier */ + if (count_skill(u->faction, SK_MAGIC) + u->number > mmax) { + ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "error_max_magicians", + "amount", mmax)); + return 0; + } + mtyp = getmagicskill(u->faction->locale); + if (mtyp == M_NONE || mtyp == M_GRAY) { + /* wurde kein Magiegebiet angegeben, wird davon + * ausgegangen, dass das normal gelernt werden soll */ + if (u->faction->magiegebiet != 0) { + mtyp = u->faction->magiegebiet; + } + else { + /* Es wurde kein Magiegebiet angegeben und die Partei + * hat noch keins gewaehlt. */ + mtyp = getmagicskill(u->faction->locale); + if (mtyp == M_NONE) { + cmistake(u, ord, 178, MSG_MAGIC); + return 0; + } + } + } + if (mtyp != u->faction->magiegebiet) { + /* Es wurde versucht, ein anderes Magiegebiet zu lernen + * als das der Partei */ + if (u->faction->magiegebiet != 0) { + cmistake(u, ord, 179, MSG_MAGIC); + return 0; + } + else { + /* Lernt zum ersten mal Magie und legt damit das + * Magiegebiet der Partei fest */ + u->faction->magiegebiet = mtyp; + } + } + if (!is_mage(u)) + create_mage(u, mtyp); + } + else { + /* ist schon ein Magier und kein Vertrauter */ + if (u->faction->magiegebiet == 0) { + /* die Partei hat noch kein Magiegebiet gewaehlt. */ + mtyp = getmagicskill(u->faction->locale); + if (mtyp == M_NONE) { + mtyp = getmagicskill(u->faction->locale); + if (mtyp == M_NONE) { + cmistake(u, ord, 178, MSG_MAGIC); + return 0; + } + } + /* Legt damit das Magiegebiet der Partei fest */ + u->faction->magiegebiet = mtyp; + } + } + } + if (sk == SK_ALCHEMY) { + maxalchemy = eff_skill(u, SK_ALCHEMY, r); + if (!has_skill(u, SK_ALCHEMY)) { + int amax = skill_limit(u->faction, SK_ALCHEMY); + if (count_skill(u->faction, SK_ALCHEMY) + u->number > amax) { + ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "error_max_alchemists", + "amount", amax)); + return 0; + } + } + } + if (studycost) { + int cost = studycost * u->number; + money = get_pooled(u, get_resourcetype(R_SILVER), GET_DEFAULT, cost); + money = _min(money, cost); + } + if (money < studycost * u->number) { + studycost = p; /* Ohne Univertreurung */ + money = _min(money, studycost); + if (p > 0 && money < studycost * u->number) { + cmistake(u, ord, 65, MSG_EVENT); + multi = money / (double)(studycost * u->number); + } + } - if (teach == NULL) { - a = a_add(&u->attribs, a_new(&at_learning)); - teach = (teaching_info *)a->data.v; - teach->teachers[0] = 0; - } - if (money > 0) { - use_pooled(u, get_resourcetype(R_SILVER), GET_DEFAULT, money); - ADDMSG(&u->faction->msgs, msg_message("studycost", - "unit region cost skill", u, u->region, money, sk)); - } + if (teach == NULL) { + a = a_add(&u->attribs, a_new(&at_learning)); + teach = (teaching_info *)a->data.v; + assert(teach); + teach->teachers[0] = 0; + } + if (money > 0) { + use_pooled(u, get_resourcetype(R_SILVER), GET_DEFAULT, money); + ADDMSG(&u->faction->msgs, msg_message("studycost", + "unit region cost skill", u, u->region, money, sk)); + } - if (get_effect(u, oldpotiontype[P_WISE])) { - l = _min(u->number, get_effect(u, oldpotiontype[P_WISE])); - teach->value += l * 10; - change_effect(u, oldpotiontype[P_WISE], -l); - } - if (get_effect(u, oldpotiontype[P_FOOL])) { - l = _min(u->number, get_effect(u, oldpotiontype[P_FOOL])); - teach->value -= l * 30; - change_effect(u, oldpotiontype[P_FOOL], -l); - } + if (get_effect(u, oldpotiontype[P_WISE])) { + l = _min(u->number, get_effect(u, oldpotiontype[P_WISE])); + teach->value += l * 10; + change_effect(u, oldpotiontype[P_WISE], -l); + } + if (get_effect(u, oldpotiontype[P_FOOL])) { + l = _min(u->number, get_effect(u, oldpotiontype[P_FOOL])); + teach->value -= l * 30; + change_effect(u, oldpotiontype[P_FOOL], -l); + } - if (p != studycost) { - /* ist_in_gebaeude(r, u, BT_UNIVERSITAET) == 1) { */ - /* p ist Kosten ohne Uni, studycost mit; wenn - * p!=studycost, ist die Einheit zwangsweise - * in einer Uni */ - teach->value += u->number * 10; - } + if (p != studycost) { + /* ist_in_gebaeude(r, u, BT_UNIVERSITAET) == 1) { */ + /* p ist Kosten ohne Uni, studycost mit; wenn + * p!=studycost, ist die Einheit zwangsweise + * in einer Uni */ + teach->value += u->number * 10; + } - if (is_cursed(r->attribs, C_BADLEARN, 0)) { - teach->value -= u->number * 10; - } + if (is_cursed(r->attribs, C_BADLEARN, 0)) { + teach->value -= u->number * 10; + } - multi *= study_speedup(u, sk, speed_rule); - days = study_days(u, sk); - days = (int)((days + teach->value) * multi); //TODO: V595 http://www.viva64.com/en/V595 The 'teach' pointer was utilized before it was verified against nullptr. Check lines: 746, 772. + multi *= study_speedup(u, sk, speed_rule); + days = study_days(u, sk); + days = (int)((days + teach->value) * multi); - /* the artacademy currently improves the learning of entertainment - of all units in the region, to be able to make it cumulative with - with an academy */ + /* the artacademy currently improves the learning of entertainment + of all units in the region, to be able to make it cumulative with + with an academy */ - if (sk == SK_ENTERTAINMENT - && buildingtype_exists(r, bt_find("artacademy"), false)) { - days *= 2; - } + if (sk == SK_ENTERTAINMENT + && buildingtype_exists(r, bt_find("artacademy"), false)) { + days *= 2; + } - if (fval(u, UFL_HUNGER)) - days /= 2; + if (fval(u, UFL_HUNGER)) + days /= 2; - while (days) { - if (days >= u->number * 30) { - learn_skill(u, sk, 1.0); - days -= u->number * 30; - } - else { - double chance = (double)days / u->number / 30; - learn_skill(u, sk, chance); - days = 0; - } - } - if (a != NULL) { - if (teach != NULL) { - int index = 0; - while (teach->teachers[index] && index != MAXTEACHERS) { - unit *teacher = teach->teachers[index++]; - if (teacher->faction != u->faction) { - bool feedback = alliedunit(u, teacher->faction, HELP_GUARD); - if (feedback) { - ADDMSG(&teacher->faction->msgs, msg_message("teach_teacher", - "teacher student skill level", teacher, u, sk, - effskill(u, sk))); - } - ADDMSG(&u->faction->msgs, msg_message("teach_student", - "teacher student skill", teacher, u, sk)); - } - } - } - a_remove(&u->attribs, a); - a = NULL; - } - fset(u, UFL_LONGACTION | UFL_NOTMOVING); + while (days) { + if (days >= u->number * 30) { + learn_skill(u, sk, 1.0); + days -= u->number * 30; + } + else { + double chance = (double)days / u->number / 30; + learn_skill(u, sk, chance); + days = 0; + } + } + if (a != NULL) { + int index = 0; + while (teach->teachers[index] && index != MAXTEACHERS) { + unit *teacher = teach->teachers[index++]; + if (teacher->faction != u->faction) { + bool feedback = alliedunit(u, teacher->faction, HELP_GUARD); + if (feedback) { + ADDMSG(&teacher->faction->msgs, msg_message("teach_teacher", + "teacher student skill level", teacher, u, sk, + effskill(u, sk))); + } + ADDMSG(&u->faction->msgs, msg_message("teach_student", + "teacher student skill", teacher, u, sk)); + } + } + a_remove(&u->attribs, a); + a = NULL; + } + fset(u, UFL_LONGACTION | UFL_NOTMOVING); - /* Anzeigen neuer Traenke */ - /* Spruchlistenaktualiesierung ist in Regeneration */ + /* Anzeigen neuer Traenke */ + /* Spruchlistenaktualiesierung ist in Regeneration */ - if (sk == SK_ALCHEMY) { - const potion_type *ptype; - faction *f = u->faction; - int skill = eff_skill(u, SK_ALCHEMY, r); - if (skill > maxalchemy) { - for (ptype = potiontypes; ptype; ptype = ptype->next) { - if (skill == ptype->level * 2) { - attrib *a = a_find(f->attribs, &at_showitem); - while (a && a->type == &at_showitem && a->data.v != ptype) - a = a->next; - if (a == NULL || a->type != &at_showitem) { - a = a_add(&f->attribs, a_new(&at_showitem)); - a->data.v = (void *)ptype->itype; - } - } - } - } - } - else if (sk == SK_MAGIC) { - sc_mage *mage = get_mage(u); - if (!mage) { - mage = create_mage(u, u->faction->magiegebiet); - } - } + if (sk == SK_ALCHEMY) { + const potion_type *ptype; + faction *f = u->faction; + int skill = eff_skill(u, SK_ALCHEMY, r); + if (skill > maxalchemy) { + for (ptype = potiontypes; ptype; ptype = ptype->next) { + if (skill == ptype->level * 2) { + attrib *a = a_find(f->attribs, &at_showitem); + while (a && a->type == &at_showitem && a->data.v != ptype) + a = a->next; + if (a == NULL || a->type != &at_showitem) { + a = a_add(&f->attribs, a_new(&at_showitem)); + a->data.v = (void *)ptype->itype; + } + } + } + } + } + else if (sk == SK_MAGIC) { + sc_mage *mage = get_mage(u); + if (!mage) { + mage = create_mage(u, u->faction->magiegebiet); + } + } - return 0; + return 0; } diff --git a/src/summary.c b/src/summary.c index deb05b08f..cd6e912e0 100644 --- a/src/summary.c +++ b/src/summary.c @@ -356,7 +356,7 @@ summary *make_summary(void) const struct resource_type *rhorse = get_resourcetype(R_HORSE); for (f = factions; f; f = f->next) { - const struct locale *lang = f->locale; //TODO: V595 http://www.viva64.com/en/V595 The 'f' pointer was utilized before it was verified against nullptr. Check lines: 359, 376. + const struct locale *lang = f->locale; struct language *plang = s->languages; while (plang && plang->locale != lang) plang = plang->next; diff --git a/src/util/attrib.c b/src/util/attrib.c index e76a42898..330664146 100644 --- a/src/util/attrib.c +++ b/src/util/attrib.c @@ -110,11 +110,11 @@ const attrib *a_findc(const attrib * a, const attrib_type * at) static attrib *a_insert(attrib * head, attrib * a) { - attrib **pa = &head->next; //TODO: V595 http://www.viva64.com/en/V595 The 'head' pointer was utilized before it was verified against nullptr. Check lines: 113, 116. - + attrib **pa; assert(!(a->type->flags & ATF_UNIQUE)); assert(head && head->type == a->type); + pa = &head->next; while (*pa && (*pa)->type == a->type) { pa = &(*pa)->next; }