Author: sveinung Date: Tue Mar 29 08:27:49 2016 New Revision: 32269 URL: http://svn.gna.org/viewcvs/freeciv?rev=32269&view=rev Log: rscompat: user extra flag insertion skeleton.
See patch #7076 Modified: trunk/server/rscompat.c Modified: trunk/server/rscompat.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/server/rscompat.c?rev=32269&r1=32268&r2=32269&view=diff ============================================================================== --- trunk/server/rscompat.c (original) +++ trunk/server/rscompat.c Tue Mar 29 08:27:49 2016 @@ -133,6 +133,25 @@ /* All unit type user flags are taken. */ return MAX_NUM_USER_UCLASS_FLAGS; +} + +/************************************************************************** + Find and return the first unused extra user flag. If all extra user + flags are taken MAX_NUM_USER_EXTRA_FLAGS is returned. +**************************************************************************/ +static int first_free_extra_user_flag(void) +{ + int flag; + + /* Find the first unused user defined extra flag. */ + for (flag = 0; flag < MAX_NUM_USER_EXTRA_FLAGS; flag++) { + if (extra_flag_id_name_cb(flag + EF_USER_FLAG_1) == NULL) { + return flag; + } + } + + /* All unit type user flags are taken. */ + return MAX_NUM_USER_EXTRA_FLAGS; } /************************************************************************** @@ -233,6 +252,48 @@ } } + if (info->ver_terrain < 10) { + /* Some extra flags moved to the ruleset between 2.6 and 3.0. + * Add them back as user flags. + * XXX: ruleset might not need all of these, and may have enough + * flags of its own that these additional ones prevent conversion. */ + const struct { + const char *name; + const char *helptxt; + } new_extra_flags_30[] = { + }; + + int first_free; + int i; + + /* Extra flags. */ + first_free = first_free_extra_user_flag() + EF_USER_FLAG_1; + + for (i = 0; i < ARRAY_SIZE(new_extra_flags_30); i++) { + if (EF_USER_FLAG_1 + MAX_NUM_USER_EXTRA_FLAGS <= first_free + i) { + /* Can't add the user extra flags. */ + ruleset_error(LOG_ERROR, + "Can't upgrade the ruleset. Not enough free extra " + "user flags to add user flags for the extra flags " + "that used to be hardcoded."); + return FALSE; + } + + /* Shouldn't be possible for valid old ruleset to have flag names that + * clash with these ones */ + if (extra_flag_id_by_name(new_extra_flags_30[i].name, fc_strcasecmp) + != extra_flag_id_invalid()) { + ruleset_error(LOG_ERROR, + "Ruleset had illegal user extra flag '%s'", + new_extra_flags_30[i].name); + return FALSE; + } + set_user_extra_flag_name(first_free + i, + new_extra_flags_30[i].name, + new_extra_flags_30[i].helptxt); + } + } + /* No errors encountered. */ return TRUE; } _______________________________________________ Freeciv-commits mailing list Freeciv-commits@gna.org https://mail.gna.org/listinfo/freeciv-commits