diff options
author | Darkvater <Darkvater@openttd.org> | 2006-08-12 22:56:45 +0000 |
---|---|---|
committer | Darkvater <Darkvater@openttd.org> | 2006-08-12 22:56:45 +0000 |
commit | bc5de7808a70246d110e3032d7f12c65383c7c7d (patch) | |
tree | 777f080b4836af7c585e67cfed624533e20c5e47 /settings.c | |
parent | f0a476e7cae49de89c0fd081fa267dfac9b60471 (diff) | |
download | openttd-bc5de7808a70246d110e3032d7f12c65383c7c7d.tar.xz |
(svn r5871) -Feature: Add a possibility to handle pointer strings without a buffer from the configuration file. Handy for variables that will never be changed during runtime
Diffstat (limited to 'settings.c')
-rw-r--r-- | settings.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/settings.c b/settings.c index 4e8cc5cf1..5e7faae11 100644 --- a/settings.c +++ b/settings.c @@ -695,9 +695,16 @@ static void ini_load_settings(IniFile *ini, const SettingDesc *sd, const char *g case SDT_STRING: switch (GetVarMemType(sld->conv)) { case SLE_VAR_STRB: - case SLE_VAR_STRQ: + case SLE_VAR_STRBQ: if (p != NULL) ttd_strlcpy((char*)ptr, p, sld->length); break; + case SLE_VAR_STR: + case SLE_VAR_STRQ: + if (p != NULL) { + free(*(char**)ptr); + *(char**)ptr = strdup((const char*)p); + } + break; case SLE_VAR_CHAR: *(char*)ptr = *(char*)p; break; default: NOT_REACHED(); break; } @@ -806,7 +813,9 @@ static void ini_save_settings(IniFile *ini, const SettingDesc *sd, const char *g case SDT_STRING: switch (GetVarMemType(sld->conv)) { case SLE_VAR_STRB: strcpy(buf, (char*)ptr); break; - case SLE_VAR_STRQ: sprintf(buf, "\"%s\"", (char*)ptr); break; + case SLE_VAR_STRBQ:sprintf(buf, "\"%s\"", (char*)ptr); break; + case SLE_VAR_STR: strcpy(buf, *(char**)ptr); break; + case SLE_VAR_STRQ: sprintf(buf, "\"%s\"", *(char**)ptr); break; case SLE_VAR_CHAR: sprintf(buf, "\"%c\"", *(char*)ptr); break; default: NOT_REACHED(); } @@ -1431,8 +1440,8 @@ static const SettingDesc _currency_settings[] = { SDT_VAR(CurrencySpec, rate, SLE_UINT16, S, 0, 1, 0, 100, STR_NULL, NULL), SDT_CHR(CurrencySpec, separator, S, 0, ".", STR_NULL, NULL), SDT_VAR(CurrencySpec, to_euro, SLE_UINT16, S, 0, 0, 0,1000, STR_NULL, NULL), - SDT_STR(CurrencySpec, prefix, SLE_STRQ, S, 0, NULL, STR_NULL, NULL), - SDT_STR(CurrencySpec, suffix, SLE_STRQ, S, 0, " credits", STR_NULL, NULL), + SDT_STR(CurrencySpec, prefix, SLE_STRBQ, S, 0, NULL, STR_NULL, NULL), + SDT_STR(CurrencySpec, suffix, SLE_STRBQ, S, 0, " credits", STR_NULL, NULL), SDT_END() }; |