[glib/new-gsettings] type checks



commit 7bb26044ee52605de3afdf46066909aa4e8c5b9f
Author: Ryan Lortie <desrt desrt ca>
Date:   Tue Apr 13 22:25:22 2010 -0400

    type checks

 gio/gsettings.c |   17 +++++++++++------
 1 files changed, 11 insertions(+), 6 deletions(-)
---
diff --git a/gio/gsettings.c b/gio/gsettings.c
index 23e3de2..77d9c76 100644
--- a/gio/gsettings.c
+++ b/gio/gsettings.c
@@ -660,7 +660,6 @@ g_settings_get_value (GSettings   *settings,
                       const gchar *key)
 {
   const GVariantType *type;
-  const gchar *format;
   GVariant *value;
   GVariant *sval;
   gchar *path;
@@ -706,14 +705,20 @@ g_settings_set_value (GSettings   *settings,
                       const gchar *key,
                       GVariant    *value)
 {
+  gboolean correct_type;
+  GVariant *sval;
   GTree *tree;
-  gchar *path;
+
+  sval = g_settings_schema_get_value (settings->priv->schema, key, NULL);
+  correct_type = g_variant_is_of_type (value, g_variant_get_type (sval));
+  g_variant_unref (sval);
+
+  g_return_if_fail (correct_type);
 
   tree = g_settings_backend_create_tree ();
-  path = g_strconcat (settings->priv->base_path, key, NULL);
-  g_tree_insert (tree, g_strdup (""), g_variant_ref_sink (value));
-  g_settings_backend_write (settings->priv->backend, path, tree, NULL);
-  g_free (path);
+  g_tree_insert (tree, strdup (key), g_variant_ref_sink (value));
+  g_settings_backend_write (settings->priv->backend, key, tree, NULL);
+  g_tree_unref (tree);
 }
 
 /**



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]