Add g_simple_async_result_is_valid(). Implementation by Dan Winship.
authorRyan Lortie <desrt@desrt.ca>
Mon, 5 Jan 2009 06:57:16 +0000 (06:57 +0000)
committerRyan Lortie <ryanl@src.gnome.org>
Mon, 5 Jan 2009 06:57:16 +0000 (06:57 +0000)
2009-01-05  Ryan Lortie  <desrt@desrt.ca>

        * gio.symbols:
        * ../docs/reference/gio/gio-sections.txt:
        * gsimpleasyncresult.h:
        * gsimpleasyncresult.c: Add g_simple_async_result_is_valid().
        Implementation by Dan Winship.  Closes #566170.

svn path=/trunk/; revision=7766

docs/reference/gio/gio-sections.txt
gio/ChangeLog
gio/gio.symbols
gio/gsimpleasyncresult.c
gio/gsimpleasyncresult.h

index af76e42..b2754bd 100644 (file)
@@ -1002,6 +1002,7 @@ g_simple_async_result_get_op_res_gssize
 g_simple_async_result_set_op_res_gboolean
 g_simple_async_result_get_op_res_gboolean
 g_simple_async_result_get_source_tag
+g_simple_async_result_is_valid
 g_simple_async_result_set_handle_cancellation
 g_simple_async_result_complete
 g_simple_async_result_complete_in_idle
index 499fb17..69bea0e 100644 (file)
@@ -1,3 +1,11 @@
+2009-01-05  Ryan Lortie  <desrt@desrt.ca>
+
+       * gio.symbols:
+       * ../docs/reference/gio/gio-sections.txt:
+       * gsimpleasyncresult.h:
+       * gsimpleasyncresult.c: Add g_simple_async_result_is_valid().
+       Implementation by Dan Winship.  Closes #566170.
+
 2008-12-31  Matthias Clasen <mclasen@redhat.com>
 
        * gdesktopappinfo.c:
index f074ee2..de2268b 100644 (file)
@@ -634,6 +634,7 @@ g_simple_async_result_set_from_error
 g_simple_async_result_propagate_error 
 g_simple_async_result_set_error 
 g_simple_async_result_set_error_va 
+g_simple_async_result_is_valid
 g_simple_async_report_error_in_idle 
 g_simple_async_report_gerror_in_idle 
 #endif
index c3c1ae0..7664fd3 100644 (file)
@@ -693,6 +693,48 @@ g_simple_async_result_run_in_thread (GSimpleAsyncResult     *simple,
 }
 
 /**
+ * g_simple_async_result_is_valid:
+ * @result: the #GAsyncResult passed to the _finish function.
+ * @source: the #GObject passed to the _finish function.
+ * @source_tag: the asynchronous function.
+ *
+ * Ensures that the data passed to the _finish function of an async
+ * operation is consistent.  Three checks are performed.
+ * 
+ * First, @result is checked to ensure that it is really a
+ * #GSimpleAsyncResult.  Second, @source is checked to ensure that it
+ * matches the source object of @result.  Third, @source_tag is
+ * checked to ensure that it is equal to the source_tag argument given
+ * to g_simple_async_result_new() (which, by convention, is a pointer
+ * to the _async function corresponding to the _finish function from
+ * which this function is called).
+ *
+ * Returns: #TRUE if all checks passed or #FALSE if any failed.
+ **/ 
+gboolean
+g_simple_async_result_is_valid (GAsyncResult *result,
+                                GObject      *source,
+                                gpointer      source_tag)
+{
+  GSimpleAsyncResult *simple;
+  GObject *cmp_source;
+
+  if (!G_IS_SIMPLE_ASYNC_RESULT (result))
+    return FALSE;
+  simple = (GSimpleAsyncResult *)result;
+
+  cmp_source = g_async_result_get_source_object (result);
+  if (cmp_source != source)
+    {
+      g_object_unref (cmp_source);
+      return FALSE;
+    }
+  g_object_unref (cmp_source);
+
+  return source_tag == g_simple_async_result_get_source_tag (simple);
+}
+
+/**
  * g_simple_async_report_error_in_idle:
  * @object: a #GObject.
  * @callback: a #GAsyncReadyCallback. 
index 0d7ea75..7259a97 100644 (file)
@@ -102,6 +102,9 @@ void                g_simple_async_result_set_error_va     (GSimpleAsyncResult
                                                            gint                     code,
                                                            const char              *format,
                                                            va_list                  args);
+gboolean            g_simple_async_result_is_valid         (GAsyncResult            *result,
+                                                            GObject                 *source,
+                                                            gpointer                 source_tag);
 
 void g_simple_async_report_error_in_idle  (GObject            *object,
                                           GAsyncReadyCallback callback,