Author: cazfi Date: Thu Sep 15 09:06:07 2016 New Revision: 33804 URL: http://svn.gna.org/viewcvs/freeciv?rev=33804&view=rev Log: Fixed assert failure when loading ruleset without goods in compatibility mode.
See bug #25053 Modified: trunk/server/ruleset.c Modified: trunk/server/ruleset.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/server/ruleset.c?rev=33804&r1=33803&r2=33804&view=diff ============================================================================== --- trunk/server/ruleset.c (original) +++ trunk/server/ruleset.c Thu Sep 15 09:06:07 2016 @@ -1057,9 +1057,7 @@ section_list_destroy(sec); - if (compat->ver_game < 10) { - rscompat_goods_3_0(); - } else { + if (compat->ver_game >= 10) { if (ok) { sec = secfile_sections_by_name_prefix(file, GOODS_SECTION_PREFIX); @@ -6574,42 +6572,46 @@ } if (ok) { - sec = secfile_sections_by_name_prefix(file, GOODS_SECTION_PREFIX); - - goods_type_iterate(pgood) { - int id = goods_index(pgood); - const char *sec_name = section_name(section_list_get(sec, id)); - struct requirement_vector *reqs; - const char **slist; - int j; - - reqs = lookup_req_list(file, compat, sec_name, "reqs", goods_rule_name(pgood)); - if (reqs == NULL) { - ok = FALSE; - break; - } - requirement_vector_copy(&pgood->reqs, reqs); - - slist = secfile_lookup_str_vec(file, &nval, "%s.flags", sec_name); - BV_CLR_ALL(pgood->flags); - for (j = 0; j < nval; j++) { - enum goods_flag_id flag; - - sval = slist[j]; - flag = goods_flag_id_by_name(sval, fc_strcasecmp); - if (!goods_flag_id_is_valid(flag)) { - ruleset_error(LOG_ERROR, "\"%s\" good \"%s\": unknown flag \"%s\".", - filename, - goods_rule_name(pgood), - sval); + if (compat->ver_game < 10) { + rscompat_goods_3_0(); + } else { + sec = secfile_sections_by_name_prefix(file, GOODS_SECTION_PREFIX); + + goods_type_iterate(pgood) { + int id = goods_index(pgood); + const char *sec_name = section_name(section_list_get(sec, id)); + struct requirement_vector *reqs; + const char **slist; + int j; + + reqs = lookup_req_list(file, compat, sec_name, "reqs", goods_rule_name(pgood)); + if (reqs == NULL) { ok = FALSE; break; - } else { - BV_SET(pgood->flags, flag); - } - } - free(slist); - } goods_type_iterate_end; + } + requirement_vector_copy(&pgood->reqs, reqs); + + slist = secfile_lookup_str_vec(file, &nval, "%s.flags", sec_name); + BV_CLR_ALL(pgood->flags); + for (j = 0; j < nval; j++) { + enum goods_flag_id flag; + + sval = slist[j]; + flag = goods_flag_id_by_name(sval, fc_strcasecmp); + if (!goods_flag_id_is_valid(flag)) { + ruleset_error(LOG_ERROR, "\"%s\" good \"%s\": unknown flag \"%s\".", + filename, + goods_rule_name(pgood), + sval); + ok = FALSE; + break; + } else { + BV_SET(pgood->flags, flag); + } + } + free(slist); + } goods_type_iterate_end; + } } /* secfile_check_unused() is not here, but only after also settings section _______________________________________________ Freeciv-commits mailing list Freeciv-commits@gna.org https://mail.gna.org/listinfo/freeciv-commits