summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Playfair Cal <daniel.playfair.cal@gmail.com>2020-01-06 12:10:58 +1100
committerDaniel Playfair Cal <daniel.playfair.cal@gmail.com>2020-12-19 12:39:35 +1100
commit6edda52ed45feaaec203e51a23f4b50cc7d4b147 (patch)
tree8fac2182fa05c1cf304a47a863f3916377930d77
parent658af7018a349eb925503f920a3c6b5a948b0cc1 (diff)
downloaddconf-6edda52ed45feaaec203e51a23f4b50cc7d4b147.tar.gz
common: factor out dconf_gvdb_utils_changeset_from_table
-rw-r--r--common/dconf-gvdb-utils.c61
-rw-r--r--common/dconf-gvdb-utils.h2
2 files changed, 36 insertions, 27 deletions
diff --git a/common/dconf-gvdb-utils.c b/common/dconf-gvdb-utils.c
index e70e2dc..56609cc 100644
--- a/common/dconf-gvdb-utils.c
+++ b/common/dconf-gvdb-utils.c
@@ -32,6 +32,37 @@
#include <string.h>
DConfChangeset *
+dconf_gvdb_utils_changeset_from_table (GvdbTable *table)
+{
+ DConfChangeset *database = dconf_changeset_new_database (NULL);
+ gchar **names;
+ gsize n_names;
+ gsize i;
+
+ names = gvdb_table_get_names (table, &n_names);
+ for (i = 0; i < n_names; i++)
+ {
+ if (dconf_is_key (names[i], NULL))
+ {
+ GVariant *value;
+
+ value = gvdb_table_get_value (table, names[i]);
+
+ if (value != NULL)
+ {
+ dconf_changeset_set (database, names[i], value);
+ g_variant_unref (value);
+ }
+ }
+
+ g_free (names[i]);
+ }
+
+ g_free (names);
+ return database;
+}
+
+DConfChangeset *
dconf_gvdb_utils_read_and_back_up_file (const gchar *filename,
gboolean *file_missing,
GError **error)
@@ -95,38 +126,14 @@ dconf_gvdb_utils_read_and_back_up_file (const gchar *filename,
return NULL;
}
- /* Only allocate once we know we are in a non-error situation */
- database = dconf_changeset_new_database (NULL);
-
/* Fill the table up with the initial state */
if (table != NULL)
{
- gchar **names;
- gsize n_names;
- gsize i;
-
- names = gvdb_table_get_names (table, &n_names);
- for (i = 0; i < n_names; i++)
- {
- if (dconf_is_key (names[i], NULL))
- {
- GVariant *value;
-
- value = gvdb_table_get_value (table, names[i]);
-
- if (value != NULL)
- {
- dconf_changeset_set (database, names[i], value);
- g_variant_unref (value);
- }
- }
-
- g_free (names[i]);
- }
-
+ database = dconf_gvdb_utils_changeset_from_table (table);
gvdb_table_free (table);
- g_free (names);
}
+ else
+ database = dconf_changeset_new_database (NULL);
if (file_missing)
*file_missing = (table == NULL);
diff --git a/common/dconf-gvdb-utils.h b/common/dconf-gvdb-utils.h
index 8d73133..4bd4cd9 100644
--- a/common/dconf-gvdb-utils.h
+++ b/common/dconf-gvdb-utils.h
@@ -21,8 +21,10 @@
#ifndef __dconf_gvdb_utils_h__
#define __dconf_gvdb_utils_h__
+#include "../gvdb/gvdb-reader.h"
#include "./dconf-changeset.h"
+DConfChangeset * dconf_gvdb_utils_changeset_from_table (GvdbTable *table);
DConfChangeset * dconf_gvdb_utils_read_and_back_up_file (const gchar *filename,
gboolean *file_missing,
GError **error);