const gchar *schema_path;
settings->priv->schema = g_settings_schema_new (settings->priv->schema_name);
+
+ if (settings->priv->schema == NULL)
+ goto broken;
+
schema_path = g_settings_schema_get_path (settings->priv->schema);
if (settings->priv->path && schema_path && strcmp (settings->priv->path, schema_path) != 0)
- g_error ("settings object created with schema '%s' and path '%s', but "
- "path '%s' is specified by schema",
- settings->priv->schema_name, settings->priv->path, schema_path);
+ {
+ g_critical ("settings object created with schema '%s' and path '%s', but "
+ "path '%s' is specified by schema",
+ settings->priv->schema_name, settings->priv->path, schema_path);
+ goto broken;
+ }
if (settings->priv->path == NULL)
{
if (schema_path == NULL)
- g_error ("attempting to create schema '%s' without a path",
- settings->priv->schema_name);
+ {
+ g_critical ("attempting to create schema '%s' without a path",
+ settings->priv->schema_name);
+ goto broken;
+ }
settings->priv->path = g_strdup (schema_path);
}
settings->priv->main_context);
g_settings_backend_subscribe (settings->priv->backend,
settings->priv->path);
+ return;
+
+broken:
+ if (settings->priv->schema != NULL)
+ g_object_unref (settings->priv->schema);
+ settings->priv->schema = NULL;
+
+ g_free (settings->priv->path);
+ settings->priv->path = NULL;
+
+ if (settings->priv->backend != NULL)
+ g_object_unref (settings->priv->backend);
+ settings->priv->backend = NULL;
}
static void
#endif
}
-static void
+static gboolean
g_settings_get_key_info (GSettingsKeyInfo *info,
GSettings *settings,
const gchar *key)
GVariant *data;
guchar code;
+ g_return_val_if_fail (settings->priv->schema != NULL, FALSE);
+
memset (info, 0, sizeof *info);
iter = g_settings_schema_get_value (settings->priv->schema, key);
}
g_variant_iter_free (iter);
+
+ return TRUE;
}
static void
g_return_val_if_fail (G_IS_SETTINGS (settings), NULL);
g_return_val_if_fail (key != NULL, NULL);
- g_settings_get_key_info (&info, settings, key);
+ if (!g_settings_get_key_info (&info, settings, key))
+ return NULL;
+
value = g_settings_read_from_backend (&info);
if (value == NULL)
g_return_val_if_fail (G_IS_SETTINGS (settings), -1);
g_return_val_if_fail (key != NULL, -1);
- g_settings_get_key_info (&info, settings, key);
+ if (!g_settings_get_key_info (&info, settings, key))
+ return 0;
if (!info.is_enum)
{
g_return_val_if_fail (G_IS_SETTINGS (settings), FALSE);
g_return_val_if_fail (key != NULL, FALSE);
- g_settings_get_key_info (&info, settings, key);
+ if (!g_settings_get_key_info (&info, settings, key))
+ return FALSE;
if (!info.is_enum)
{
g_return_val_if_fail (G_IS_SETTINGS (settings), -1);
g_return_val_if_fail (key != NULL, -1);
- g_settings_get_key_info (&info, settings, key);
+ if (!g_settings_get_key_info (&info, settings, key))
+ return 0;
if (!info.is_flags)
{
g_return_val_if_fail (G_IS_SETTINGS (settings), FALSE);
g_return_val_if_fail (key != NULL, FALSE);
- g_settings_get_key_info (&info, settings, key);
+ if (!g_settings_get_key_info (&info, settings, key))
+ return FALSE;
if (!info.is_flags)
{
g_return_val_if_fail (G_IS_SETTINGS (settings), FALSE);
g_return_val_if_fail (key != NULL, FALSE);
- g_settings_get_key_info (&info, settings, key);
+ if (!g_settings_get_key_info (&info, settings, key))
+ return FALSE;
if (!g_settings_type_check (&info, value))
{
g_return_val_if_fail (key != NULL, NULL);
g_return_val_if_fail (mapping != NULL, NULL);
- g_settings_get_key_info (&info, settings, key);
+ if (!g_settings_get_key_info (&info, settings, key))
+ return FALSE;
if ((value = g_settings_read_from_backend (&info)))
{
const gchar *type;
GVariant *range;
- g_settings_get_key_info (&info, settings, key);
+ if (!g_settings_get_key_info (&info, settings, key))
+ return NULL;
if (info.minimum)
{
GSettingsKeyInfo info;
gboolean good;
- g_settings_get_key_info (&info, settings, key);
+ if (!g_settings_get_key_info (&info, settings, key))
+ return FALSE;
+
good = g_settings_type_check (&info, value) &&
g_settings_key_info_range_check (&info, value);
g_settings_free_key_info (&info);
objectclass = G_OBJECT_GET_CLASS (object);
binding = g_slice_new0 (GSettingsBinding);
- g_settings_get_key_info (&binding->info, settings, key);
+ if (!g_settings_get_key_info (&binding->info, settings, key))
+ {
+ if (destroy)
+ (* destroy) (user_data);
+ g_slice_free (GSettingsBinding, binding);
+ return;
+ }
+
binding->object = object;
binding->property = g_object_class_find_property (objectclass, property);
binding->user_data = user_data;