X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fgfileinputstream.c;h=41014d410237b9282d770a1a1def21e698e47854;hb=2138deb07ebb7d7e541c0cd35b966e107d1bf800;hp=771e8ef7c53194d003e0d6c2d1d571a8a332786a;hpb=63adeda0861a26b38ec0adc76255666554c18951;p=platform%2Fupstream%2Fglib.git diff --git a/gio/gfileinputstream.c b/gio/gfileinputstream.c index 771e8ef..41014d4 100644 --- a/gio/gfileinputstream.c +++ b/gio/gfileinputstream.c @@ -13,9 +13,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. + * Public License along with this library; if not, see . * * Author: Alexander Larsson */ @@ -25,9 +23,9 @@ #include #include #include -#include "gsimpleasyncresult.h" #include "gcancellable.h" #include "gasyncresult.h" +#include "gtask.h" #include "gioerror.h" #include "glibintl.h" @@ -45,7 +43,7 @@ * stream to jump to arbitrary positions in the file, provided the * filesystem of the file allows it. To find the position of a file * input stream, use g_seekable_tell(). To find out if a file input - * stream supports seeking, use g_seekable_stream_can_seek(). + * stream supports seeking, use g_seekable_can_seek(). * To position a file input stream, use g_seekable_seek(). **/ @@ -73,19 +71,18 @@ static GFileInfo *g_file_input_stream_real_query_info_finish (GFileInputStream GError **error); -G_DEFINE_TYPE_WITH_CODE (GFileInputStream, g_file_input_stream, G_TYPE_INPUT_STREAM, - G_IMPLEMENT_INTERFACE (G_TYPE_SEEKABLE, - g_file_input_stream_seekable_iface_init)) - struct _GFileInputStreamPrivate { GAsyncReadyCallback outstanding_callback; }; +G_DEFINE_TYPE_WITH_CODE (GFileInputStream, g_file_input_stream, G_TYPE_INPUT_STREAM, + G_ADD_PRIVATE (GFileInputStream) + G_IMPLEMENT_INTERFACE (G_TYPE_SEEKABLE, + g_file_input_stream_seekable_iface_init)) + static void g_file_input_stream_class_init (GFileInputStreamClass *klass) { - g_type_class_add_private (klass, sizeof (GFileInputStreamPrivate)); - klass->query_info_async = g_file_input_stream_real_query_info_async; klass->query_info_finish = g_file_input_stream_real_query_info_finish; } @@ -103,17 +100,15 @@ g_file_input_stream_seekable_iface_init (GSeekableIface *iface) static void g_file_input_stream_init (GFileInputStream *stream) { - stream->priv = G_TYPE_INSTANCE_GET_PRIVATE (stream, - G_TYPE_FILE_INPUT_STREAM, - GFileInputStreamPrivate); + stream->priv = g_file_input_stream_get_instance_private (stream); } /** * g_file_input_stream_query_info: * @stream: a #GFileInputStream. * @attributes: a file attribute query string. - * @cancellable: optional #GCancellable object, %NULL to ignore. - * @error: a #GError location to store the error occuring, or %NULL to + * @cancellable: (allow-none): optional #GCancellable object, %NULL to ignore. + * @error: a #GError location to store the error occurring, or %NULL to * ignore. * * Queries a file input stream the given @attributes. This function blocks @@ -178,11 +173,10 @@ async_ready_callback_wrapper (GObject *source_object, * g_file_input_stream_query_info_async: * @stream: a #GFileInputStream. * @attributes: a file attribute query string. - * @io_priority: the I/O priority - * of the request. - * @cancellable: optional #GCancellable object, %NULL to ignore. - * @callback: callback to call when the request is satisfied - * @user_data: the data to pass to callback function + * @io_priority: the [I/O priority][io-priority] of the request + * @cancellable: (allow-none): optional #GCancellable object, %NULL to ignore. + * @callback: (scope async): callback to call when the request is satisfied + * @user_data: (closure): the data to pass to callback function * * Queries the stream information asynchronously. * When the operation is finished @callback will be called. @@ -215,11 +209,9 @@ g_file_input_stream_query_info_async (GFileInputStream *stream, if (!g_input_stream_set_pending (input_stream, &error)) { - g_simple_async_report_gerror_in_idle (G_OBJECT (stream), - callback, - user_data, - error); - g_error_free (error); + g_task_report_error (stream, callback, user_data, + g_file_input_stream_query_info_async, + error); return; } @@ -228,14 +220,14 @@ g_file_input_stream_query_info_async (GFileInputStream *stream, stream->priv->outstanding_callback = callback; g_object_ref (stream); klass->query_info_async (stream, attributes, io_priority, cancellable, - async_ready_callback_wrapper, user_data); + async_ready_callback_wrapper, user_data); } /** * g_file_input_stream_query_info_finish: * @stream: a #GFileInputStream. * @result: a #GAsyncResult. - * @error: a #GError location to store the error occuring, + * @error: a #GError location to store the error occurring, * or %NULL to ignore. * * Finishes an asynchronous info query operation. @@ -247,18 +239,15 @@ g_file_input_stream_query_info_finish (GFileInputStream *stream, GAsyncResult *result, GError **error) { - GSimpleAsyncResult *simple; GFileInputStreamClass *class; g_return_val_if_fail (G_IS_FILE_INPUT_STREAM (stream), NULL); g_return_val_if_fail (G_IS_ASYNC_RESULT (result), NULL); - if (G_IS_SIMPLE_ASYNC_RESULT (result)) - { - simple = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (simple, error)) - return NULL; - } + if (g_async_result_legacy_propagate_error (result, error)) + return NULL; + else if (g_async_result_is_tagged (result, g_file_input_stream_query_info_async)) + return g_task_propagate_pointer (G_TASK (result), error); class = G_FILE_INPUT_STREAM_GET_CLASS (stream); return class->query_info_finish (stream, result, error); @@ -385,48 +374,29 @@ g_file_input_stream_seekable_truncate (GSeekable *seekable, * Default implementation of async ops * ********************************************/ -typedef struct { - char *attributes; - GFileInfo *info; -} QueryInfoAsyncData; - static void -query_info_data_free (QueryInfoAsyncData *data) -{ - if (data->info) - g_object_unref (data->info); - g_free (data->attributes); - g_free (data); -} - -static void -query_info_async_thread (GSimpleAsyncResult *res, - GObject *object, - GCancellable *cancellable) +query_info_async_thread (GTask *task, + gpointer source_object, + gpointer task_data, + GCancellable *cancellable) { + GFileInputStream *stream = source_object; + const char *attributes = task_data; GFileInputStreamClass *class; GError *error = NULL; - QueryInfoAsyncData *data; - GFileInfo *info; - - data = g_simple_async_result_get_op_res_gpointer (res); + GFileInfo *info = NULL; - info = NULL; - - class = G_FILE_INPUT_STREAM_GET_CLASS (object); + class = G_FILE_INPUT_STREAM_GET_CLASS (stream); if (class->query_info) - info = class->query_info (G_FILE_INPUT_STREAM (object), data->attributes, cancellable, &error); + info = class->query_info (stream, attributes, cancellable, &error); else g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, _("Stream doesn't support query_info")); if (info == NULL) - { - g_simple_async_result_set_from_error (res, error); - g_error_free (error); - } + g_task_return_error (task, error); else - data->info = info; + g_task_return_pointer (task, info, g_object_unref); } static void @@ -437,17 +407,14 @@ g_file_input_stream_real_query_info_async (GFileInputStream *stream, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *res; - QueryInfoAsyncData *data; + GTask *task; - data = g_new0 (QueryInfoAsyncData, 1); - data->attributes = g_strdup (attributes); + task = g_task_new (stream, cancellable, callback, user_data); + g_task_set_task_data (task, g_strdup (attributes), g_free); + g_task_set_priority (task, io_priority); - res = g_simple_async_result_new (G_OBJECT (stream), callback, user_data, g_file_input_stream_real_query_info_async); - g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)query_info_data_free); - - g_simple_async_result_run_in_thread (res, query_info_async_thread, io_priority, cancellable); - g_object_unref (res); + g_task_run_in_thread (task, query_info_async_thread); + g_object_unref (task); } static GFileInfo * @@ -455,14 +422,7 @@ g_file_input_stream_real_query_info_finish (GFileInputStream *stream, GAsyncResult *res, GError **error) { - GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res); - QueryInfoAsyncData *data; - - g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_input_stream_real_query_info_async); + g_return_val_if_fail (g_task_is_valid (res, stream), NULL); - data = g_simple_async_result_get_op_res_gpointer (simple); - if (data->info) - return g_object_ref (data->info); - - return NULL; + return g_task_propagate_pointer (G_TASK (res), error); }