Author: cazfi
Date: Mon Sep  7 21:45:17 2015
New Revision: 29809

URL: http://svn.gna.org/viewcvs/freeciv?rev=29809&view=rev
Log:
Added setting_is_free_to_change() and used it instead of 
setting_is_changeable() when determining
if a setting should be saved as one that must not change even if freeciv 
version changes between
save and load.

See bug #23844

Modified:
    trunk/server/settings.c

Modified: trunk/server/settings.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/settings.c?rev=29809&r1=29808&r2=29809&view=diff
==============================================================================
--- trunk/server/settings.c     (original)
+++ trunk/server/settings.c     Mon Sep  7 21:45:17 2015
@@ -2754,30 +2754,13 @@
 
 /****************************************************************************
   Returns whether the specified server setting (option) can currently
-  be changed by the caller. If it returns FALSE, the reason of the failure
-  is available by the function setting_error().
-****************************************************************************/
-bool setting_is_changeable(const struct setting *pset,
-                           struct connection *caller, char *reject_msg,
-                           size_t reject_msg_len)
-{
-  if (caller
-      && (caller->access_level < ALLOW_BASIC
-          || (caller->access_level < ALLOW_HACK && !pset->to_client))) {
-    settings_snprintf(reject_msg, reject_msg_len,
-                      _("You are not allowed to change the setting '%s'."),
-                      setting_name(pset));
-    return FALSE;
-  }
-
-  if (setting_locked(pset)) {
-    /* setting is locked by the ruleset */
-    settings_snprintf(reject_msg, reject_msg_len,
-                      _("The setting '%s' is locked by the ruleset."),
-                      setting_name(pset));
-    return FALSE;
-  }
-
+  be changed without breaking data consistency (map dimension options
+  can't change when map has already been created with certain dimensions)
+****************************************************************************/
+static bool setting_is_free_to_change(const struct setting *pset,
+                                      char *reject_msg,
+                                      size_t reject_msg_len)
+{
   switch (pset->sclass) {
   case SSET_MAP_SIZE:
   case SSET_MAP_GEN:
@@ -2819,6 +2802,35 @@
   settings_snprintf(reject_msg, reject_msg_len, _("Internal error."));
 
   return FALSE;
+}
+
+/****************************************************************************
+  Returns whether the specified server setting (option) can currently
+  be changed by the caller. If it returns FALSE, the reason of the failure
+  is available by the function setting_error().
+****************************************************************************/
+bool setting_is_changeable(const struct setting *pset,
+                           struct connection *caller, char *reject_msg,
+                           size_t reject_msg_len)
+{
+  if (caller
+      && (caller->access_level < ALLOW_BASIC
+          || (caller->access_level < ALLOW_HACK && !pset->to_client))) {
+    settings_snprintf(reject_msg, reject_msg_len,
+                      _("You are not allowed to change the setting '%s'."),
+                      setting_name(pset));
+    return FALSE;
+  }
+
+  if (setting_locked(pset)) {
+    /* setting is locked by the ruleset */
+    settings_snprintf(reject_msg, reject_msg_len,
+                      _("The setting '%s' is locked by the ruleset."),
+                      setting_name(pset));
+    return FALSE;
+  }
+
+  return setting_is_free_to_change(pset, reject_msg, reject_msg_len);
 }
 
 /****************************************************************************
@@ -4033,7 +4045,7 @@
         setting_get_setdef(pset) == SETDEF_CHANGED
          /* It must be same at loading time as it was saving time, even if
           * freeciv's default has changed. */
-        || !setting_is_changeable(pset, NULL, errbuf, sizeof(errbuf))) {
+        || !setting_is_free_to_change(pset, errbuf, sizeof(errbuf))) {
       secfile_insert_str(file, setting_name(pset),
                          "%s.set%d.name", section, set_count);
       switch (setting_type(pset)) {


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to