Add g_simple_async_result_is_valid(). Implementation by Dan Winship.

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
This commit is contained in:
Ryan Lortie 2009-01-05 06:57:16 +00:00 committed by Ryan Lortie
parent 0b1f4e5080
commit 876f03f807
5 changed files with 55 additions and 0 deletions

View 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

View 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:

View 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

View File

@ -692,6 +692,48 @@ g_simple_async_result_run_in_thread (GSimpleAsyncResult *simple,
g_io_scheduler_push_job (run_in_thread, data, NULL, io_priority, cancellable);
}
/**
* 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.

View 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,