From 98c024f5a7096266b99cba09293c0b474e76d2d6 Mon Sep 17 00:00:00 2001 From: Patrick McDermott Date: Thu, 05 Oct 2017 15:25:23 -0400 Subject: mq_config_get_string(), mq_config_set_string(): New functions --- (limited to 'src/config.c') diff --git a/src/config.c b/src/config.c index d28b939..96c193c 100644 --- a/src/config.c +++ b/src/config.c @@ -34,12 +34,14 @@ enum type { TYPE_BOOLEAN, TYPE_INTEGER, TYPE_DOUBLE, + TYPE_STRING, }; union callback { void (*boolean_cb)(const gchar *, gboolean, gpointer); void (*integer_cb)(const gchar *, gint, gpointer); void (*double_cb)(const gchar *, gdouble, gpointer); + void (*string_cb)(const gchar *, gchar *, gpointer); }; struct callbacks { @@ -85,6 +87,11 @@ set_type_or_run_callbacks(MqConfig *config, const gchar *name, gpointer value, *((gdouble *) value), cbs->user_data); break; + case TYPE_STRING: + cbs->cb.string_cb(name, + (gchar *) value, + cbs->user_data); + break; } } } @@ -93,7 +100,7 @@ set_type_or_run_callbacks(MqConfig *config, const gchar *name, gpointer value, #define SET_BOOL(NAME, VALUE) mq_config_set_boolean(config, NAME, VALUE) #define SET_INT( NAME, VALUE) mq_config_set_integer(config, NAME, VALUE) #define SET_DBL( NAME, VALUE) mq_config_set_double (config, NAME, VALUE) -#define SET_STR( NAME, VALUE) do { *NAME = *NAME; *VALUE = *VALUE; } while (0) +#define SET_STR( NAME, VALUE) mq_config_set_string (config, NAME, VALUE) #define SET_STRL(NAME, VALUE) do { *NAME = *NAME; *VALUE = *VALUE; } while (0) static void @@ -300,6 +307,23 @@ mq_config_get_double(MqConfig *config, const gchar *name) return value; } +gchar * +mq_config_get_string(MqConfig *config, const gchar *name) +{ + gchar *group; + gchar *key; + gchar *value; + + split_name(name, &group, &key); + + /* TODO: Handle value parsing errors? */ + value = g_key_file_get_string(config->key_file, group, key, NULL); + + g_free(group); + + return value; +} + void mq_config_set_boolean(MqConfig *config, const gchar *name, gboolean value) { @@ -345,6 +369,21 @@ mq_config_set_double(MqConfig *config, const gchar *name, gdouble value) set_type_or_run_callbacks(config, name, &value, TYPE_DOUBLE); } +void +mq_config_set_string(MqConfig *config, const gchar *name, const gchar *value) +{ + gchar *group; + gchar *key; + + split_name(name, &group, &key); + + g_key_file_set_string(config->key_file, group, key, value); + + g_free(group); + + set_type_or_run_callbacks(config, name, value, TYPE_STRING); +} + gboolean mq_config_set(MqConfig *config, const gchar *name, const gchar *value) { @@ -377,6 +416,9 @@ mq_config_set(MqConfig *config, const gchar *name, const gchar *value) } mq_config_set_double(config, name, double_value); return TRUE; + case TYPE_STRING: + mq_config_set_string(config, name, value); + return TRUE; } g_assert_not_reached(); -- cgit v0.9.1