We now have a working preference screen and can rebind the interface!
[dhcpcd-ui] / dhcpcd-config.c
index 77122d36f2174eaff798f2effe9ef626fc74d875..19934fefbeaabf24654c1a9a3c592a1ec151cb6a 100644 (file)
@@ -42,7 +42,7 @@ free_config(GPtrArray **config)
 }      
 
 GPtrArray *
-read_config(const char *block, const char *name)
+load_config(const char *block, const char *name)
 {
        GType otype;
        GError *error;
@@ -63,8 +63,8 @@ read_config(const char *block, const char *name)
        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;
@@ -94,13 +94,20 @@ get_config(GPtrArray *config, int idx, const char *opt, const char **value)
 }
 
 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);
@@ -112,40 +119,8 @@ get_static_config(GPtrArray *config, const char *var, const char **value)
        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;
@@ -153,12 +128,12 @@ set_option(GPtrArray *array, bool sopt, const char *var, const char *val)
        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 {
@@ -166,22 +141,43 @@ set_option(GPtrArray *array, bool sopt, const char *var, const char *val)
                        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;
+}