}
GPtrArray *
-read_config(const char *block, const char *name)
+load_config(const char *block, const char *name)
{
GType otype;
GError *error;
return config;
}
-int
-get_config(GPtrArray *config, int idx, const char *opt, const char **value)
+static int
+_get_config(GPtrArray *config, int idx, const char *opt, const char **value)
{
GValueArray *c;
GValue *val;
}
int
-get_static_config(GPtrArray *config, const char *var, const char **value)
+get_config(GPtrArray *config, const char *opt, const char **value)
+{
+
+ return _get_config(config, 0, opt, value);
+}
+
+int
+get_config_static(GPtrArray *config, const char *var, const char **value)
{
int idx;
const char *val;
idx = -1;
- while ((idx = get_config(config, idx + 1, "static", &val)) != -1) {
+ while ((idx = _get_config(config, idx + 1, "static", &val)) != -1) {
if (g_str_has_prefix(val, var)) {
if (value)
*value = val + strlen(var);
return -1;
}
-GPtrArray *
-save_config(const char *block, const char *name, GPtrArray *config)
-{
- GError *error;
- GType otype;
-
- error = NULL;
- otype = dbus_g_type_get_struct("GValueArray",
- G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
- otype = dbus_g_type_get_collection("GPtrArray", otype);
- if (!dbus_g_proxy_call(dbus, "SetConfig", &error,
- G_TYPE_STRING, block,
- G_TYPE_STRING, name,
- otype, config,
- G_TYPE_INVALID,
- G_TYPE_INVALID))
- {
- g_critical("SetConfig: %s", error->message);
- g_clear_error(&error);
- return NULL;
- }
- return config;
-}
-
-GPtrArray *
-load_config(const char *block, const char *name, GPtrArray *array)
-{
-
- free_config(&array);
- return read_config(block, name);
-}
-
void
-set_option(GPtrArray *array, bool sopt, const char *var, const char *val)
+set_option(GPtrArray *config, bool sopt, const char *var, const char *val)
{
int i;
GValueArray *va;
char *n;
if (sopt)
- i = get_static_config(array, var, NULL);
+ i = get_config_static(config, var, NULL);
else
- i = get_config(array, 0, var, NULL);
+ i = get_config(config, var, NULL);
if (val == NULL) {
if (i != -1) {
- va = g_ptr_array_remove_index(array, i);
+ va = g_ptr_array_remove_index(config, i);
g_value_array_free(va);
}
} else {
n = g_strconcat(var, val, NULL);
else
n = NULL;
+ memset(&nv, 0, sizeof(v));
+ g_value_init(&nv, G_TYPE_STRING);
if (i == -1) {
va = g_value_array_new(2);
- memset(&nv, 0, sizeof(v));
- g_value_init(&nv, G_TYPE_STRING);
+ g_ptr_array_add(config, va);
g_value_set_static_string(&nv, sopt ? "static" : var);
va = g_value_array_append(va, &nv);
- g_value_set_static_string(&nv, sopt ? n : val);
- va = g_value_array_append(va, &nv);
- g_ptr_array_add(array, va);
- } else if (val != NULL) {
- va = g_ptr_array_index(array, i);
- v = g_value_array_get_nth(va, 1);
- g_value_unset(v);
- g_value_init(v, G_TYPE_STRING);
- g_value_set_static_string(v, sopt ? n : val);
+ } else {
+ va = g_ptr_array_index(config, i);
+ va = g_value_array_remove(va, 1);
}
+ g_value_set_static_string(&nv, sopt ? n : val);
+ va = g_value_array_append(va, &nv);
g_free(n);
}
}
+
+bool
+save_config(const char *block, const char *name, GPtrArray *config)
+{
+ GError *error;
+ GType otype;
+
+ error = NULL;
+ otype = dbus_g_type_get_struct("GValueArray",
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+ otype = dbus_g_type_get_collection("GPtrArray", otype);
+ if (!dbus_g_proxy_call(dbus, "SetConfig", &error,
+ G_TYPE_STRING, block,
+ G_TYPE_STRING, name,
+ otype, config,
+ G_TYPE_INVALID,
+ G_TYPE_INVALID))
+ {
+ g_critical("SetConfig: %s", error->message);
+ g_clear_error(&error);
+ return false;
+ }
+ return true;
+}