summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/settings.c2
-rw-r--r--src/fe-common/core/fe-settings.c20
2 files changed, 17 insertions, 5 deletions
diff --git a/src/core/settings.c b/src/core/settings.c
index 9871ad30..8509a9ff 100644
--- a/src/core/settings.c
+++ b/src/core/settings.c
@@ -386,7 +386,7 @@ gboolean settings_set_choice(const char *key, const char *value)
SETTINGS_REC *rec;
rec = settings_get_record(key);
- /* XXX: The leading/trailing whitespace makes the test fail */
+
if (rec != NULL && strarray_find(rec->choices, value) < 0) {
char *msg = g_strjoinv(",", rec->choices);
g_warning("Invalid value for '%s', must be one of: %s", key, msg);
diff --git a/src/fe-common/core/fe-settings.c b/src/fe-common/core/fe-settings.c
index e25886ec..ca1f871d 100644
--- a/src/fe-common/core/fe-settings.c
+++ b/src/fe-common/core/fe-settings.c
@@ -67,6 +67,7 @@ static void set_print_pattern(const char *pattern)
static void set_boolean(const char *key, const char *value)
{
char *stripped_value;
+
stripped_value = g_strdup(value);
g_strstrip(stripped_value);
@@ -79,7 +80,7 @@ static void set_boolean(const char *key, const char *value)
else
printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, TXT_NOT_TOGGLE);
- g_free(stripped_value);
+ g_free(stripped_value);
}
static void set_int(const char *key, const char *value)
@@ -99,6 +100,16 @@ static void set_int(const char *key, const char *value)
settings_set_int(key, (int)longval);
}
+static void set_choice(const char *key, const char *value)
+{
+ char *stripped_value;
+
+ stripped_value = g_strdup(value);
+ g_strstrip(stripped_value);
+ settings_set_choice(key, stripped_value);
+ g_free(stripped_value);
+}
+
/* SYNTAX: SET [-clear | -default] [<key> [<value>]] */
static void cmd_set(char *data)
{
@@ -143,9 +154,10 @@ static void cmd_set(char *data)
set_int(key, value);
break;
case SETTING_TYPE_CHOICE:
- settings_set_choice(key, clear ? "" :
- set_default ? rec->choices[rec->default_value.v_int] :
- value);
+ if (clear || set_default)
+ settings_set_choice(key, rec->choices[rec->default_value.v_int]);
+ else
+ set_choice(key, value);
break;
case SETTING_TYPE_STRING:
settings_set_str(key, clear ? "" :