summaryrefslogtreecommitdiff
path: root/src/settings.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2009-04-23 19:13:41 +0000
committerrubidium <rubidium@openttd.org>2009-04-23 19:13:41 +0000
commit208234a7a04027a2cff511447bc1f0ea2627741b (patch)
tree364d6487e2961c1714dfc111253d56bad04fb09f /src/settings.cpp
parente2a7732151bff77aacdfc0f1a7f231d4be6d5c95 (diff)
downloadopenttd-208234a7a04027a2cff511447bc1f0ea2627741b.tar.xz
(svn r16128) -Change: allow loading (and storing) NULL values for STRQ in openttd.cfg.
Diffstat (limited to 'src/settings.cpp')
-rw-r--r--src/settings.cpp13
1 files changed, 6 insertions, 7 deletions
diff --git a/src/settings.cpp b/src/settings.cpp
index 2b020a679..a37eadf65 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -293,8 +293,9 @@ static void make_manyofmany(char *buf, const char *last, const char *many, uint3
* @param desc SettingDesc struct that holds all information about the variable
* @param str input string that will be parsed based on the type of desc
* @return return the parsed value of the setting */
-static const void *string_to_val(const SettingDescBase *desc, const char *str)
+static const void *string_to_val(const SettingDescBase *desc, const char *orig_str)
{
+ const char *str = orig_str == NULL ? "" : orig_str;
switch (desc->cmd) {
case SDT_NUMX: {
char *end;
@@ -325,7 +326,7 @@ static const void *string_to_val(const SettingDescBase *desc, const char *str)
ShowInfoF("ini: invalid setting value '%s' for '%s'", str, desc->name);
break;
- case SDT_STRING:
+ case SDT_STRING: return orig_str;
case SDT_INTLIST: return str;
default: break;
}
@@ -446,12 +447,10 @@ static void ini_load_settings(IniFile *ini, const SettingDesc *sd, const char *g
break;
case SLE_VAR_STR:
case SLE_VAR_STRQ:
- if (p != NULL) {
- free(*(char**)ptr);
- *(char**)ptr = strdup((const char*)p);
- }
+ free(*(char**)ptr);
+ *(char**)ptr = p == NULL ? NULL : strdup((const char*)p);
break;
- case SLE_VAR_CHAR: *(char*)ptr = *(char*)p; break;
+ case SLE_VAR_CHAR: if (p != NULL) *(char*)ptr = *(char*)p; break;
default: NOT_REACHED(); break;
}
break;