The unified diff between revisions [6eed85a7..] and [65f52f37..] is displayed below. It can also be downloaded as a raw diff.

#
#
# patch "sqlite-backend.c"
#  from [c9e70f8c69893d31ff04b8b854824f17e95a2d62]
#    to [af95cdd5712ae796993989b936e174564c6d3c72]
#
============================================================
--- sqlite-backend.c	c9e70f8c69893d31ff04b8b854824f17e95a2d62
+++ sqlite-backend.c	af95cdd5712ae796993989b936e174564c6d3c72
@@ -216,7 +216,7 @@ static SqliteDirectory *
 }

 static SqliteDirectory *
-ss_ensure_directory_exists (SqliteSource *ss, const char *path, GError **error)
+traverse_to_directory (SqliteSource *ss, const char *path, gboolean do_create, GError **error)
 {
 	SqliteDirectory *rv;
 	char **components;
@@ -243,7 +243,7 @@ ss_ensure_directory_exists (SqliteSource
 	while (rv && components[i]) {
 		if (!get_directory (ss, rv, components[i], rv)) {
 			/* not there, so create it.. */
-			if (!create_directory (ss, rv, components[i], rv)) {
+			if (!do_create || !create_directory (ss, rv, components[i], rv)) {
 				g_free (rv);
 				rv = NULL;
 				break;
@@ -256,6 +256,16 @@ ss_ensure_directory_exists (SqliteSource
 	return rv;
 }

+gboolean
+set_value_in_directory (SqliteSource *ss, SqliteDirectory *dir, const char *name, gboolean do_create, GError **error)
+{
+	g_return_val_if_fail (ss != NULL, FALSE);
+	g_return_val_if_fail (dir != NULL, FALSE);
+	g_return_val_if_fail (name != NULL, FALSE);
+
+	return FALSE;
+}
+
 /* check that the database looks about right */
 static gboolean
 verify_database (SqliteSource *ss)
@@ -457,17 +467,24 @@ set_value (GConfSource      *source,
            const GConfValue *value,
            GError          **err)
 {
+	const char *relative_key;
 	char *parent;
 	SqliteDirectory *dir;

 	gconf_log (GCL_DEBUG, "set_value: %s", key);

 	parent = gconf_key_directory (key);
-	dir = ss_ensure_directory_exists ((SqliteSource *)source, parent, err);
-	if (!dir) {
-		update_failure (err);
-		return;
-	}
+	relative_key = gconf_key_key (key);
+	dir = traverse_to_directory ((SqliteSource *)source, parent, TRUE, err);
+	do {
+		if (!dir) {
+			update_failure (err);
+			break;
+		}
+		if (!set_value_in_directory ((SqliteSource *)source, dir, relative_key, TRUE, err)) {
+			update_failure (err);
+		}
+	} while (0);

 	g_free (parent);
 	g_free (dir);