[libsecret] Rework how we strip remote DBus errors



commit a23ee598c7634a7bc1c6d2090856dd465d46835f
Author: Stef Walter <stefw gnome org>
Date:   Wed Nov 14 10:57:10 2012 +0100

    Rework how we strip remote DBus errors
    
     * This is necessary because sometimes we don't want to complain,
       for expected errors, when running nested operations.
     * The fact that we have to do this is silly, and soon there
       will be a solution in glib itself.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=688165

 libsecret/secret-collection.c |   12 ++++++------
 libsecret/secret-item.c       |   18 +++++++-----------
 libsecret/secret-methods.c    |   12 ++++++------
 libsecret/secret-paths.c      |   22 ++++++++--------------
 libsecret/secret-private.h    |    3 +++
 libsecret/secret-prompt.c     |    4 +---
 libsecret/secret-service.c    |    8 ++++----
 libsecret/secret-session.c    |    4 +---
 libsecret/secret-util.c       |   17 +++++++++++++----
 9 files changed, 49 insertions(+), 51 deletions(-)
---
diff --git a/libsecret/secret-collection.c b/libsecret/secret-collection.c
index 24942b7..ad668f3 100644
--- a/libsecret/secret-collection.c
+++ b/libsecret/secret-collection.c
@@ -714,7 +714,7 @@ secret_collection_async_initable_init_finish (GAsyncInitable *initable,
 	g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (initable),
 	                      secret_collection_async_initable_init_async), FALSE);
 
-	if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
+	if (_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
 		return FALSE;
 
 	self->pv->constructing = FALSE;
@@ -865,7 +865,7 @@ secret_collection_load_items_finish (SecretCollection *self,
 	g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (self),
 	                      secret_collection_load_items), FALSE);
 
-	if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
+	if (_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
 		return FALSE;
 
 	return TRUE;
@@ -1146,7 +1146,7 @@ secret_collection_create_finish (GAsyncResult *result,
 
 	res = G_SIMPLE_ASYNC_RESULT (result);
 
-	if (g_simple_async_result_propagate_error (res, error))
+	if (_secret_util_propagate_error (res, error))
 		return NULL;
 
 	closure = g_simple_async_result_get_op_res_gpointer (res);
@@ -1487,7 +1487,7 @@ secret_collection_search_finish (SecretCollection *self,
 	                      secret_collection_search), NULL);
 
 	async = G_SIMPLE_ASYNC_RESULT (result);
-	if (g_simple_async_result_propagate_error (async, error))
+	if (_secret_util_propagate_error (async, error))
 		return NULL;
 
 	search = g_simple_async_result_get_op_res_gpointer (async);
@@ -1681,7 +1681,7 @@ secret_collection_delete_finish (SecretCollection *self,
 	g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (self),
 	                      secret_collection_delete), FALSE);
 
-	if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
+	if (_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
 		return FALSE;
 
 	return TRUE;
@@ -2178,7 +2178,7 @@ secret_collection_for_alias_finish (GAsyncResult *result,
 	g_return_val_if_fail (error == NULL || *error == NULL, NULL);
 
 	async = G_SIMPLE_ASYNC_RESULT (result);
-	if (g_simple_async_result_propagate_error (async, error))
+	if (_secret_util_propagate_error (async, error))
 		return NULL;
 	read = g_simple_async_result_get_op_res_gpointer (async);
 	if (read->collection)
diff --git a/libsecret/secret-item.c b/libsecret/secret-item.c
index f93535b..bf9b2e3 100644
--- a/libsecret/secret-item.c
+++ b/libsecret/secret-item.c
@@ -595,7 +595,7 @@ secret_item_async_initable_init_finish (GAsyncInitable *initable,
 	g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (initable),
 	                      secret_item_async_initable_init_async), FALSE);
 
-	if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
+	if (_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
 		return FALSE;
 
 	return TRUE;
@@ -842,7 +842,7 @@ secret_item_create_finish (GAsyncResult *result,
 
 	res = G_SIMPLE_ASYNC_RESULT (result);
 
-	if (g_simple_async_result_propagate_error (res, error))
+	if (_secret_util_propagate_error (res, error))
 		return NULL;
 
 	closure = g_simple_async_result_get_op_res_gpointer (res);
@@ -1002,7 +1002,7 @@ secret_item_delete_finish (SecretItem *self,
 
 	res = G_SIMPLE_ASYNC_RESULT (result);
 
-	if (g_simple_async_result_propagate_error (res, error))
+	if (_secret_util_propagate_error (res, error))
 		return FALSE;
 
 	return g_simple_async_result_get_op_res_gboolean (res);
@@ -1169,7 +1169,6 @@ on_item_load_secret (GObject *source,
 	}
 
 	if (error != NULL) {
-		_secret_util_strip_remote_error (&error);
 		g_simple_async_result_take_error (res, error);
 	}
 
@@ -1271,7 +1270,7 @@ secret_item_load_secret_finish (SecretItem *self,
 	                      secret_item_load_secret), FALSE);
 
 	res = G_SIMPLE_ASYNC_RESULT (result);
-	if (g_simple_async_result_propagate_error (res, error))
+	if (_secret_util_propagate_error (res, error))
 		return FALSE;
 
 	return TRUE;
@@ -1370,10 +1369,8 @@ on_get_secrets_complete (GObject *source,
 		g_variant_unref (retval);
 	}
 
-	if (error != NULL) {
-		_secret_util_strip_remote_error (&error);
+	if (error != NULL)
 		g_simple_async_result_take_error (async, error);
-	}
 
 	g_simple_async_result_complete (async);
 	g_object_unref (async);
@@ -1499,7 +1496,7 @@ secret_item_load_secrets_finish (GAsyncResult *result,
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
 	async = G_SIMPLE_ASYNC_RESULT (result);
-	if (g_simple_async_result_propagate_error (async, error))
+	if (_secret_util_propagate_error (async, error))
 		return FALSE;
 
 	return TRUE;
@@ -1583,7 +1580,6 @@ on_item_set_secret (GObject *source,
 	if (error == NULL) {
 		_secret_item_set_cached_secret (self, set->value);
 	} else {
-		_secret_util_strip_remote_error (&error);
 		g_simple_async_result_take_error (res, error);
 	}
 	if (retval != NULL)
@@ -1688,7 +1684,7 @@ secret_item_set_secret_finish (SecretItem *self,
 	                      secret_item_set_secret), FALSE);
 
 	res = G_SIMPLE_ASYNC_RESULT (result);
-	if (g_simple_async_result_propagate_error (res, error))
+	if (_secret_util_propagate_error (res, error))
 		return FALSE;
 
 	return TRUE;
diff --git a/libsecret/secret-methods.c b/libsecret/secret-methods.c
index 65440c9..9d1a5ab 100644
--- a/libsecret/secret-methods.c
+++ b/libsecret/secret-methods.c
@@ -361,7 +361,7 @@ secret_service_search_finish (SecretService *service,
 
 	res = G_SIMPLE_ASYNC_RESULT (result);
 
-	if (g_simple_async_result_propagate_error (res, error))
+	if (_secret_util_propagate_error (res, error))
 		return FALSE;
 
 	closure = g_simple_async_result_get_op_res_gpointer (res);
@@ -708,7 +708,7 @@ service_xlock_finish (SecretService *service,
 	                                                      service_xlock_async), -1);
 
 	async = G_SIMPLE_ASYNC_RESULT (result);
-	if (g_simple_async_result_propagate_error (async, error))
+	if (_secret_util_propagate_error (async, error))
 		return -1;
 
 	xlock = g_simple_async_result_get_op_res_gpointer (async);
@@ -1181,7 +1181,7 @@ secret_service_store_finish (SecretService *service,
 	                                                      secret_service_store), FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
-	if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
+	if (_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
 		return FALSE;
 
 	return TRUE;
@@ -1476,7 +1476,7 @@ secret_service_lookup_finish (SecretService *service,
 	                      secret_service_lookup), NULL);
 
 	res = G_SIMPLE_ASYNC_RESULT (result);
-	if (g_simple_async_result_propagate_error (res, error))
+	if (_secret_util_propagate_error (res, error))
 		return NULL;
 
 	closure = g_simple_async_result_get_op_res_gpointer (res);
@@ -1728,7 +1728,7 @@ secret_service_clear_finish (SecretService *service,
 	                      secret_service_clear), FALSE);
 
 	res = G_SIMPLE_ASYNC_RESULT (result);
-	if (g_simple_async_result_propagate_error (res, error))
+	if (_secret_util_propagate_error (res, error))
 		return FALSE;
 
 	closure = g_simple_async_result_get_op_res_gpointer (res);
@@ -1933,7 +1933,7 @@ secret_service_set_alias_finish (SecretService *service,
 	                                                      secret_service_set_alias), FALSE);
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
-	if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
+	if (_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
 		return FALSE;
 
 	return TRUE;
diff --git a/libsecret/secret-paths.c b/libsecret/secret-paths.c
index dea7097..dfe968e 100644
--- a/libsecret/secret-paths.c
+++ b/libsecret/secret-paths.c
@@ -300,7 +300,6 @@ on_search_items_complete (GObject *source,
 
 	response = g_dbus_proxy_call_finish (G_DBUS_PROXY (source), result, &error);
 	if (error != NULL) {
-		_secret_util_strip_remote_error (&error);
 		g_simple_async_result_take_error (res, error);
 	} else {
 		g_simple_async_result_set_op_res_gpointer (res, response,
@@ -393,7 +392,7 @@ secret_collection_search_for_dbus_paths_finish (SecretCollection *collection,
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
 	async = G_SIMPLE_ASYNC_RESULT (result);
-	if (g_simple_async_result_propagate_error (async, error))
+	if (_secret_util_propagate_error (async, error))
 		return FALSE;
 
 	retval= g_simple_async_result_get_op_res_gpointer (async);
@@ -564,7 +563,7 @@ secret_service_search_for_dbus_paths_finish (SecretService *self,
 	g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
 	res = G_SIMPLE_ASYNC_RESULT (result);
-	if (g_simple_async_result_propagate_error (res, error))
+	if (_secret_util_propagate_error (res, error))
 		return FALSE;
 
 	if (unlocked || locked) {
@@ -687,7 +686,6 @@ on_get_secrets_complete (GObject *source,
 
 	closure->out = g_dbus_proxy_call_finish (G_DBUS_PROXY (source), result, &error);
 	if (error != NULL) {
-		_secret_util_strip_remote_error (&error);
 		g_simple_async_result_take_error (res, error);
 	}
 	g_simple_async_result_complete (res);
@@ -794,7 +792,7 @@ secret_service_get_secret_for_dbus_path_finish (SecretService *self,
 	g_return_val_if_fail (error == NULL || *error == NULL, NULL);
 
 	res = G_SIMPLE_ASYNC_RESULT (result);
-	if (g_simple_async_result_propagate_error (res, error))
+	if (_secret_util_propagate_error (res, error))
 		return NULL;
 
 	closure = g_simple_async_result_get_op_res_gpointer (res);
@@ -926,7 +924,7 @@ secret_service_get_secrets_for_dbus_paths_finish (SecretService *self,
 	g_return_val_if_fail (error == NULL || *error == NULL, NULL);
 
 	res = G_SIMPLE_ASYNC_RESULT (result);
-	if (g_simple_async_result_propagate_error (res, error))
+	if (_secret_util_propagate_error (res, error))
 		return NULL;
 
 	closure = g_simple_async_result_get_op_res_gpointer (res);
@@ -1047,7 +1045,6 @@ on_xlock_called (GObject *source,
 
 	retval = g_dbus_proxy_call_finish (G_DBUS_PROXY (source), result, &error);
 	if (error != NULL) {
-		_secret_util_strip_remote_error (&error);
 		g_simple_async_result_take_error (res, error);
 		g_simple_async_result_complete (res);
 
@@ -1110,7 +1107,7 @@ _secret_service_xlock_paths_finish (SecretService *self,
 	gint count;
 
 	res = G_SIMPLE_ASYNC_RESULT (result);
-	if (g_simple_async_result_propagate_error (res, error))
+	if (_secret_util_propagate_error (res, error))
 		return -1;
 
 	closure = g_simple_async_result_get_op_res_gpointer (res);
@@ -1442,7 +1439,6 @@ on_delete_complete (GObject *source,
 		g_variant_unref (retval);
 
 	} else {
-		_secret_util_strip_remote_error (&error);
 		g_simple_async_result_take_error (res, error);
 		g_simple_async_result_complete (res);
 	}
@@ -1496,7 +1492,7 @@ _secret_service_delete_path_finish (SecretService *self,
 	                      _secret_service_delete_path), FALSE);
 
 	res = G_SIMPLE_ASYNC_RESULT (result);
-	if (g_simple_async_result_propagate_error (res, error))
+	if (_secret_util_propagate_error (res, error))
 		return FALSE;
 
 	closure = g_simple_async_result_get_op_res_gpointer (res);
@@ -1671,7 +1667,6 @@ on_create_collection_called (GObject *source,
 		g_variant_unref (retval);
 
 	} else {
-		_secret_util_strip_remote_error (&error);
 		g_simple_async_result_take_error (res, error);
 		g_simple_async_result_complete (res);
 	}
@@ -1789,7 +1784,7 @@ secret_service_create_collection_dbus_path_finish (SecretService *self,
 
 	res = G_SIMPLE_ASYNC_RESULT (result);
 
-	if (g_simple_async_result_propagate_error (res, error))
+	if (_secret_util_propagate_error (res, error))
 		return NULL;
 
 	closure = g_simple_async_result_get_op_res_gpointer (res);
@@ -1941,7 +1936,6 @@ on_create_item_called (GObject *source,
 		g_variant_unref (retval);
 
 	} else {
-		_secret_util_strip_remote_error (&error);
 		g_simple_async_result_take_error (res, error);
 		g_simple_async_result_complete (res);
 	}
@@ -2085,7 +2079,7 @@ secret_service_create_item_dbus_path_finish (SecretService *self,
 
 	res = G_SIMPLE_ASYNC_RESULT (result);
 
-	if (g_simple_async_result_propagate_error (res, error))
+	if (_secret_util_propagate_error (res, error))
 		return NULL;
 
 	closure = g_simple_async_result_get_op_res_gpointer (res);
diff --git a/libsecret/secret-private.h b/libsecret/secret-private.h
index 5e05032..1b669ea 100644
--- a/libsecret/secret-private.h
+++ b/libsecret/secret-private.h
@@ -65,6 +65,9 @@ SecretPrompt *       _secret_prompt_instance                  (SecretService *se
 
 void                 _secret_util_strip_remote_error          (GError **error);
 
+gboolean             _secret_util_propagate_error             (GSimpleAsyncResult *async,
+                                                               GError **error);
+
 gchar *              _secret_util_parent_path                 (const gchar *path);
 
 gboolean             _secret_util_empty_path                  (const gchar *path);
diff --git a/libsecret/secret-prompt.c b/libsecret/secret-prompt.c
index 029739a..8671c5f 100644
--- a/libsecret/secret-prompt.c
+++ b/libsecret/secret-prompt.c
@@ -334,7 +334,6 @@ on_prompt_prompted (GObject *source,
 		g_clear_error (&error);
 
 	if (error != NULL) {
-		_secret_util_strip_remote_error (&error);
 		g_simple_async_result_take_error (res, error);
 		perform_prompt_complete (res, TRUE);
 
@@ -381,7 +380,6 @@ on_prompt_dismissed (GObject *source,
 		g_clear_error (&error);
 
 	if (error != NULL) {
-		_secret_util_strip_remote_error (&error);
 		g_simple_async_result_take_error (res, error);
 		perform_prompt_complete (res, TRUE);
 	}
@@ -529,7 +527,7 @@ secret_prompt_perform_finish (SecretPrompt *self,
 
 	res = G_SIMPLE_ASYNC_RESULT (result);
 
-	if (g_simple_async_result_propagate_error (res, error))
+	if (_secret_util_propagate_error (res, error))
 		return NULL;
 
 	closure = g_simple_async_result_get_op_res_gpointer (res);
diff --git a/libsecret/secret-service.c b/libsecret/secret-service.c
index 1d45fc4..171a6c2 100644
--- a/libsecret/secret-service.c
+++ b/libsecret/secret-service.c
@@ -354,7 +354,7 @@ secret_service_real_prompt_finish (SecretService *self,
 	                      secret_service_real_prompt_async), NULL);
 
 	res = G_SIMPLE_ASYNC_RESULT (result);
-	if (g_simple_async_result_propagate_error (res, error))
+	if (_secret_util_propagate_error (res, error))
 		return NULL;
 
 	retval = g_simple_async_result_get_op_res_gpointer (res);
@@ -716,7 +716,7 @@ secret_service_async_initable_init_finish (GAsyncInitable *initable,
 	g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (initable),
 	                      secret_service_async_initable_init_async), FALSE);
 
-	if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
+	if (_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
 		return FALSE;
 
 	return TRUE;
@@ -824,7 +824,7 @@ secret_service_get_finish (GAsyncResult *result,
 
 	/* Just ensuring that the service matches flags */
 	if (g_simple_async_result_is_valid (result, source_object, secret_service_get)) {
-		if (!g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
+		if (!_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
 			service = g_object_ref (source_object);
 
 	/* Creating a whole new service */
@@ -1543,7 +1543,7 @@ secret_service_load_collections_finish (SecretService *self,
 	g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (self),
 	                      secret_service_load_collections), FALSE);
 
-	if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
+	if (_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
 		return FALSE;
 
 	return TRUE;
diff --git a/libsecret/secret-session.c b/libsecret/secret-session.c
index b085bc5..87349f7 100644
--- a/libsecret/secret-session.c
+++ b/libsecret/secret-session.c
@@ -248,7 +248,6 @@ on_service_open_session_plain (GObject *source,
 		g_variant_unref (response);
 
 	} else {
-		_secret_util_strip_remote_error (&error);
 		g_simple_async_result_take_error (res, error);
 		g_simple_async_result_complete (res);
 	}
@@ -297,7 +296,6 @@ on_service_open_session_aes (GObject *source,
 
 		/* Other errors result in a failure */
 		} else {
-			_secret_util_strip_remote_error (&error);
 			g_simple_async_result_take_error (res, error);
 			g_simple_async_result_complete (res);
 		}
@@ -344,7 +342,7 @@ gboolean
 _secret_session_open_finish (GAsyncResult *result,
                               GError **error)
 {
-	if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
+	if (_secret_util_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error))
 		return FALSE;
 
 	return TRUE;
diff --git a/libsecret/secret-util.c b/libsecret/secret-util.c
index b91ad5a..e85d3ee 100644
--- a/libsecret/secret-util.c
+++ b/libsecret/secret-util.c
@@ -96,6 +96,17 @@ secret_error_get_quark (void)
 	return quark;
 }
 
+gboolean
+_secret_util_propagate_error (GSimpleAsyncResult *async,
+                              GError **error)
+{
+	if (!g_simple_async_result_propagate_error (async, error))
+		return FALSE;
+
+	_secret_util_strip_remote_error (error);
+	return TRUE;
+}
+
 void
 _secret_util_strip_remote_error (GError **error)
 {
@@ -206,7 +217,6 @@ on_get_properties (GObject *source,
 	if (error == NULL) {
 		process_get_all_reply (proxy, retval);
 	} else {
-		_secret_util_strip_remote_error (&error);
 		g_simple_async_result_take_error (res, error);
 	}
 	if (retval != NULL)
@@ -256,7 +266,7 @@ _secret_util_get_properties_finish (GDBusProxy *proxy,
 
 	res = G_SIMPLE_ASYNC_RESULT (result);
 
-	if (g_simple_async_result_propagate_error (res, error))
+	if (_secret_util_propagate_error (res, error))
 		return FALSE;
 
 	return TRUE;
@@ -291,7 +301,6 @@ on_set_property (GObject *source,
 	retval = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source),
 	                                        result, &error);
 	if (error != NULL) {
-		_secret_util_strip_remote_error (&error);
 		g_simple_async_result_take_error (res, error);
 	}
 	if (retval != NULL)
@@ -357,7 +366,7 @@ _secret_util_set_property_finish (GDBusProxy *proxy,
 
 	res = G_SIMPLE_ASYNC_RESULT (result);
 
-	if (g_simple_async_result_propagate_error (res, error))
+	if (_secret_util_propagate_error (res, error))
 		return FALSE;
 
 	closure = g_simple_async_result_get_op_res_gpointer (res);



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