[glib] GSimpleAsyncResult: add error-taking variants
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] GSimpleAsyncResult: add error-taking variants
- Date: Mon, 1 Nov 2010 02:41:35 +0000 (UTC)
commit 85ba8596e235f5f7f351447d20a3bc1baa8402b8
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Oct 31 22:38:38 2010 -0400
GSimpleAsyncResult: add error-taking variants
Add g_simple_async_result_new_take_error and
g_simple_async_result_take_error, which take over ownership of the
given error. Based on a patch by Christian Persch.
https://bugzilla.gnome.org/show_bug.cgi?id=629247
gio/gio.symbols | 2 +
gio/gsimpleasyncresult.c | 62 +++++++++++++++++++++++++++++++++++++++++++--
gio/gsimpleasyncresult.h | 6 ++++
3 files changed, 67 insertions(+), 3 deletions(-)
---
diff --git a/gio/gio.symbols b/gio/gio.symbols
index b8fa2a5..19fa68c 100644
--- a/gio/gio.symbols
+++ b/gio/gio.symbols
@@ -790,6 +790,7 @@ g_simple_async_result_get_type G_GNUC_CONST
g_simple_async_result_new
g_simple_async_result_new_error
g_simple_async_result_new_from_error
+g_simple_async_result_new_take_error
g_simple_async_result_set_op_res_gpointer
g_simple_async_result_get_op_res_gpointer
g_simple_async_result_set_op_res_gssize
@@ -802,6 +803,7 @@ g_simple_async_result_complete
g_simple_async_result_complete_in_idle
g_simple_async_result_run_in_thread
g_simple_async_result_set_from_error
+g_simple_async_result_take_error
g_simple_async_result_propagate_error
g_simple_async_result_set_error
g_simple_async_result_set_error_va
diff --git a/gio/gsimpleasyncresult.c b/gio/gsimpleasyncresult.c
index c9563f4..eaada17 100644
--- a/gio/gsimpleasyncresult.c
+++ b/gio/gsimpleasyncresult.c
@@ -72,7 +72,8 @@
*
* To create a new #GSimpleAsyncResult, call g_simple_async_result_new().
* If the result needs to be created for a #GError, use
- * g_simple_async_result_new_from_error(). If a #GError is not available
+ * g_simple_async_result_new_from_error() or
+ * g_simple_async_result_new_take_error(). If a #GError is not available
* (e.g. the asynchronous operation's doesn't take a #GError argument),
* but the result still needs to be created for an error condition, use
* g_simple_async_result_new_error() (or g_simple_async_result_set_error_va()
@@ -335,7 +336,7 @@ g_simple_async_result_new (GObject *source_object,
* @source_object: a #GObject, or %NULL.
* @callback: a #GAsyncReadyCallback.
* @user_data: user data passed to @callback.
- * @error: a #GError location.
+ * @error: a #GError
*
* Creates a #GSimpleAsyncResult from an error condition.
*
@@ -345,7 +346,7 @@ GSimpleAsyncResult *
g_simple_async_result_new_from_error (GObject *source_object,
GAsyncReadyCallback callback,
gpointer user_data,
- GError *error)
+ const GError *error)
{
GSimpleAsyncResult *simple;
@@ -360,6 +361,38 @@ g_simple_async_result_new_from_error (GObject *source_object,
}
/**
+ * g_simple_async_result_new_take_error:
+ * @source_object: (allow-none): a #GObject, or %NULL
+ * @callback: a #GAsyncReadyCallback
+ * @user_data: (allow-none): user data passed to @callback
+ * @error: a #GError
+ *
+ * Creates a #GSimpleAsyncResult from an error condition, and takes over the
+ * caller's ownership of @error, so the caller does not need to free it anymore.
+ *
+ * Returns: a #GSimpleAsyncResult
+ *
+ * Since: 2.26
+ **/
+GSimpleAsyncResult *
+g_simple_async_result_new_take_error (GObject *source_object,
+ GAsyncReadyCallback callback,
+ gpointer user_data,
+ GError *error)
+{
+ GSimpleAsyncResult *simple;
+
+ g_return_val_if_fail (!source_object || G_IS_OBJECT (source_object), NULL);
+
+ simple = g_simple_async_result_new (source_object,
+ callback,
+ user_data, NULL);
+ g_simple_async_result_take_error (simple, error);
+
+ return simple;
+}
+
+/**
* g_simple_async_result_new_error:
* @source_object: a #GObject, or %NULL.
* @callback: a #GAsyncReadyCallback.
@@ -599,6 +632,29 @@ g_simple_async_result_set_from_error (GSimpleAsyncResult *simple,
}
/**
+ * g_simple_async_result_take_error:
+ * @simple: a #GSimpleAsyncResult
+ * @error: a #GError
+ *
+ * Sets the result from @error, and takes over the caller's ownership
+ * of @error, so the caller does not need to free it any more.
+ *
+ * Since: 2.26
+ **/
+void
+g_simple_async_result_take_error (GSimpleAsyncResult *simple,
+ GError *error)
+{
+ g_return_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple));
+ g_return_if_fail (error != NULL);
+
+ if (simple->error)
+ g_error_free (simple->error);
+ simple->error = error;
+ simple->failed = TRUE;
+}
+
+/**
* g_simple_async_result_set_error_va:
* @simple: a #GSimpleAsyncResult.
* @domain: a #GQuark (usually #G_IO_ERROR).
diff --git a/gio/gsimpleasyncresult.h b/gio/gsimpleasyncresult.h
index 073796c..0abbd67 100644
--- a/gio/gsimpleasyncresult.h
+++ b/gio/gsimpleasyncresult.h
@@ -62,6 +62,10 @@ GSimpleAsyncResult *g_simple_async_result_new_error (GObject
GSimpleAsyncResult *g_simple_async_result_new_from_error (GObject *source_object,
GAsyncReadyCallback callback,
gpointer user_data,
+ const GError *error);
+GSimpleAsyncResult *g_simple_async_result_new_take_error (GObject *source_object,
+ GAsyncReadyCallback callback,
+ gpointer user_data,
GError *error);
void g_simple_async_result_set_op_res_gpointer (GSimpleAsyncResult *simple,
@@ -90,6 +94,8 @@ void g_simple_async_result_run_in_thread (GSimpleAsyncResult
GCancellable *cancellable);
void g_simple_async_result_set_from_error (GSimpleAsyncResult *simple,
const GError *error);
+void g_simple_async_result_take_error (GSimpleAsyncResult *simple,
+ GError *error);
gboolean g_simple_async_result_propagate_error (GSimpleAsyncResult *simple,
GError **dest);
void g_simple_async_result_set_error (GSimpleAsyncResult *simple,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]