X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fgfileinputstream.c;h=502584b85f71c6cbf40584cfb528479a3c373b8b;hb=1b7f64549258c971fcc7c15ebfb532e4bc0b4174;hp=94c02699c6e9c6148e12c65a4ab6a92c92475251;hpb=61582bd91cba508362d0e28db4d6e3f307b27b48;p=platform%2Fupstream%2Fglib.git diff --git a/gio/gfileinputstream.c b/gio/gfileinputstream.c index 94c0269..502584b 100644 --- a/gio/gfileinputstream.c +++ b/gio/gfileinputstream.c @@ -20,21 +20,34 @@ * Author: Alexander Larsson */ -#include +#include "config.h" #include #include #include #include "gsimpleasyncresult.h" +#include "gcancellable.h" +#include "gasyncresult.h" +#include "gioerror.h" #include "glibintl.h" +#include "gioalias.h" + /** * SECTION:gfileinputstream - * @short_description: file input streaming operations + * @short_description: File input streaming operations + * @include: gio/gio.h * @see_also: #GInputStream, #GDataInputStream, #GSeekable - * - * * + * GFileInputStream provides input streams that take their + * content from a file. + * + * GFileInputStream implements #GSeekable, which allows the input + * 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(). + * To position a file input stream, use g_seekable_seek(). **/ static void g_file_input_stream_seekable_iface_init (GSeekableIface *iface); @@ -51,7 +64,7 @@ static gboolean g_file_input_stream_seekable_truncate (GSeekable GCancellable *cancellable, GError **error); static void g_file_input_stream_real_query_info_async (GFileInputStream *stream, - char *attributes, + const char *attributes, int io_priority, GCancellable *cancellable, GAsyncReadyCallback callback, @@ -85,7 +98,7 @@ g_file_input_stream_seekable_iface_init (GSeekableIface *iface) iface->can_seek = g_file_input_stream_seekable_can_seek; iface->seek = g_file_input_stream_seekable_seek; iface->can_truncate = g_file_input_stream_seekable_can_truncate; - iface->truncate = g_file_input_stream_seekable_truncate; + iface->truncate_fn = g_file_input_stream_seekable_truncate; } static void @@ -104,19 +117,19 @@ g_file_input_stream_init (GFileInputStream *stream) * @error: a #GError location to store the error occuring, or %NULL to * ignore. * - * Queries a file input stream the given @attributes.his function blocks while querying - * the stream. For the asynchronous (non-blocking) version of this function, see - * g_file_input_stream_query_info_async(). While the stream is blocked, - * the stream will set the pending flag internally, and any other operations on the - * stream will fail with %G_IO_ERROR_PENDING. + * Queries a file input stream the given @attributes. This function blocks + * while querying the stream. For the asynchronous (non-blocking) version + * of this function, see g_file_input_stream_query_info_async(). While the + * stream is blocked, the stream will set the pending flag internally, and + * any other operations on the stream will fail with %G_IO_ERROR_PENDING. * * Returns: a #GFileInfo, or %NULL on error. **/ GFileInfo * -g_file_input_stream_query_info (GFileInputStream *stream, - char *attributes, - GCancellable *cancellable, - GError **error) +g_file_input_stream_query_info (GFileInputStream *stream, + const char *attributes, + GCancellable *cancellable, + GError **error) { GFileInputStreamClass *class; GInputStream *input_stream; @@ -126,50 +139,37 @@ g_file_input_stream_query_info (GFileInputStream *stream, input_stream = G_INPUT_STREAM (stream); - if (g_input_stream_is_closed (input_stream)) - { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_CLOSED, - _("Stream is already closed")); - return NULL; - } - - if (g_input_stream_has_pending (input_stream)) - { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_PENDING, - _("Stream has outstanding operation")); - return NULL; - } + if (!g_input_stream_set_pending (input_stream, error)) + return NULL; info = NULL; - g_input_stream_set_pending (input_stream, TRUE); - if (cancellable) - g_push_current_cancellable (cancellable); + g_cancellable_push_current (cancellable); class = G_FILE_INPUT_STREAM_GET_CLASS (stream); if (class->query_info) info = class->query_info (stream, attributes, cancellable, error); else - g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, - _("Stream doesn't support query_info")); + g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Stream doesn't support query_info")); if (cancellable) - g_pop_current_cancellable (cancellable); + g_cancellable_pop_current (cancellable); - g_input_stream_set_pending (input_stream, FALSE); + g_input_stream_clear_pending (input_stream); return info; } static void -async_ready_callback_wrapper (GObject *source_object, - GAsyncResult *res, - gpointer user_data) +async_ready_callback_wrapper (GObject *source_object, + GAsyncResult *res, + gpointer user_data) { GFileInputStream *stream = G_FILE_INPUT_STREAM (source_object); - g_input_stream_set_pending (G_INPUT_STREAM (stream), FALSE); + g_input_stream_clear_pending (G_INPUT_STREAM (stream)); if (stream->priv->outstanding_callback) (*stream->priv->outstanding_callback) (source_object, res, user_data); g_object_unref (stream); @@ -179,13 +179,19 @@ 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. + * @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 * - * Queries the stream information asynchronously. For the synchronous version - * of this function, see g_file_input_stream_query_info(). + * Queries the stream information asynchronously. + * When the operation is finished @callback will be called. + * You can then call g_file_input_stream_query_info_finish() + * to get the result of the operation. + * + * For the synchronous version of this function, + * see g_file_input_stream_query_info(). * * If @cancellable is not %NULL, then the operation can be cancelled by * triggering the cancellable object from another thread. If the operation @@ -193,43 +199,33 @@ async_ready_callback_wrapper (GObject *source_object, * **/ void -g_file_input_stream_query_info_async (GFileInputStream *stream, - char *attributes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) +g_file_input_stream_query_info_async (GFileInputStream *stream, + const char *attributes, + int io_priority, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) { GFileInputStreamClass *klass; GInputStream *input_stream; + GError *error = NULL; g_return_if_fail (G_IS_FILE_INPUT_STREAM (stream)); input_stream = G_INPUT_STREAM (stream); - - if (g_input_stream_is_closed (input_stream)) - { - g_simple_async_report_error_in_idle (G_OBJECT (stream), - callback, - user_data, - G_IO_ERROR, G_IO_ERROR_CLOSED, - _("Stream is already closed")); - return; - } - if (g_input_stream_has_pending (input_stream)) + if (!g_input_stream_set_pending (input_stream, &error)) { - g_simple_async_report_error_in_idle (G_OBJECT (stream), - callback, - user_data, - G_IO_ERROR, G_IO_ERROR_PENDING, - _("Stream has outstanding operation")); + g_simple_async_report_gerror_in_idle (G_OBJECT (stream), + callback, + user_data, + error); + g_error_free (error); return; } klass = G_FILE_INPUT_STREAM_GET_CLASS (stream); - g_input_stream_set_pending (input_stream, TRUE); stream->priv->outstanding_callback = callback; g_object_ref (stream); klass->query_info_async (stream, attributes, io_priority, cancellable, @@ -240,17 +236,17 @@ g_file_input_stream_query_info_async (GFileInputStream *stream, * g_file_input_stream_query_info_finish: * @stream: a #GFileInputStream. * @result: a #GAsyncResult. - * @error: a #GError location to store the error occuring, or %NULL to - * ignore. + * @error: a #GError location to store the error occuring, + * or %NULL to ignore. * * Finishes an asynchronous info query operation. * * Returns: #GFileInfo. **/ GFileInfo * -g_file_input_stream_query_info_finish (GFileInputStream *stream, - GAsyncResult *result, - GError **error) +g_file_input_stream_query_info_finish (GFileInputStream *stream, + GAsyncResult *result, + GError **error) { GSimpleAsyncResult *simple; GFileInputStreamClass *class; @@ -269,16 +265,8 @@ g_file_input_stream_query_info_finish (GFileInputStream *stream, return class->query_info_finish (stream, result, error); } -/** - * g_file_input_stream_tell: - * @stream: a #GFileInputStream. - * - * Gets the current position in the stream. - * - * Returns: a #goffset with the position in the stream. - **/ -goffset -g_file_input_stream_tell (GFileInputStream *stream) +static goffset +g_file_input_stream_tell (GFileInputStream *stream) { GFileInputStreamClass *class; goffset offset; @@ -300,16 +288,8 @@ g_file_input_stream_seekable_tell (GSeekable *seekable) return g_file_input_stream_tell (G_FILE_INPUT_STREAM (seekable)); } -/** - * g_file_input_stream_can_seek: - * @stream: a #GFileInputStream. - * - * Checks if a file input stream can be seeked. - * - * Returns: %TRUE if stream can be seeked. %FALSE otherwise. - **/ -gboolean -g_file_input_stream_can_seek (GFileInputStream *stream) +static gboolean +g_file_input_stream_can_seek (GFileInputStream *stream) { GFileInputStreamClass *class; gboolean can_seek; @@ -335,25 +315,7 @@ g_file_input_stream_seekable_can_seek (GSeekable *seekable) return g_file_input_stream_can_seek (G_FILE_INPUT_STREAM (seekable)); } -/** - * g_file_input_stream_seek: - * @stream: a #GFileInputStream. - * @offset: a #goffset to seek. - * @type: a #GSeekType. - * @cancellable: optional #GCancellable object, %NULL to ignore. - * @error: a #GError location to store the error occuring, or %NULL to - * ignore. - * - * Seeks in the file input stream. - * - * If @cancellable is not %NULL, then the operation can be cancelled by - * triggering the cancellable object from another thread. If the operation - * was cancelled, the error %G_IO_ERROR_CANCELLED will be set. - * - * Returns: %TRUE if the stream was successfully seeked to the position. - * %FALSE on error. - **/ -gboolean +static gboolean g_file_input_stream_seek (GFileInputStream *stream, goffset offset, GSeekType type, @@ -369,67 +331,54 @@ g_file_input_stream_seek (GFileInputStream *stream, input_stream = G_INPUT_STREAM (stream); class = G_FILE_INPUT_STREAM_GET_CLASS (stream); - if (g_input_stream_is_closed (input_stream)) - { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_CLOSED, - _("Stream is already closed")); - return FALSE; - } - - if (g_input_stream_has_pending (input_stream)) - { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_PENDING, - _("Stream has outstanding operation")); - return FALSE; - } - if (!class->seek) { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, - _("Seek not supported on stream")); + g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Seek not supported on stream")); return FALSE; } - g_input_stream_set_pending (input_stream, TRUE); + if (!g_input_stream_set_pending (input_stream, error)) + return FALSE; if (cancellable) - g_push_current_cancellable (cancellable); + g_cancellable_push_current (cancellable); res = class->seek (stream, offset, type, cancellable, error); if (cancellable) - g_pop_current_cancellable (cancellable); + g_cancellable_pop_current (cancellable); - g_input_stream_set_pending (input_stream, FALSE); + g_input_stream_clear_pending (input_stream); return res; } static gboolean -g_file_input_stream_seekable_seek (GSeekable *seekable, - goffset offset, - GSeekType type, +g_file_input_stream_seekable_seek (GSeekable *seekable, + goffset offset, + GSeekType type, GCancellable *cancellable, - GError **error) + GError **error) { return g_file_input_stream_seek (G_FILE_INPUT_STREAM (seekable), offset, type, cancellable, error); } static gboolean -g_file_input_stream_seekable_can_truncate (GSeekable *seekable) +g_file_input_stream_seekable_can_truncate (GSeekable *seekable) { return FALSE; } static gboolean -g_file_input_stream_seekable_truncate (GSeekable *seekable, - goffset offset, +g_file_input_stream_seekable_truncate (GSeekable *seekable, + goffset offset, GCancellable *cancellable, - GError **error) + GError **error) { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, - _("Truncate not allowed on input stream")); + g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Truncate not allowed on input stream")); return FALSE; } @@ -453,8 +402,8 @@ query_info_data_free (QueryInfoAsyncData *data) static void query_info_async_thread (GSimpleAsyncResult *res, - GObject *object, - GCancellable *cancellable) + GObject *object, + GCancellable *cancellable) { GFileInputStreamClass *class; GError *error = NULL; @@ -469,8 +418,8 @@ query_info_async_thread (GSimpleAsyncResult *res, if (class->query_info) info = class->query_info (G_FILE_INPUT_STREAM (object), data->attributes, cancellable, &error); else - g_set_error (&error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, - _("Stream doesn't support query_info")); + g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Stream doesn't support query_info")); if (info == NULL) { @@ -482,12 +431,12 @@ query_info_async_thread (GSimpleAsyncResult *res, } static void -g_file_input_stream_real_query_info_async (GFileInputStream *stream, - char *attributes, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) +g_file_input_stream_real_query_info_async (GFileInputStream *stream, + const char *attributes, + int io_priority, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) { GSimpleAsyncResult *res; QueryInfoAsyncData *data; @@ -503,14 +452,14 @@ g_file_input_stream_real_query_info_async (GFileInputStream *stream, } static GFileInfo * -g_file_input_stream_real_query_info_finish (GFileInputStream *stream, - GAsyncResult *res, - GError **error) +g_file_input_stream_real_query_info_finish (GFileInputStream *stream, + GAsyncResult *res, + GError **error) { GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res); QueryInfoAsyncData *data; - g_assert (g_simple_async_result_get_source_tag (simple) == g_file_input_stream_real_query_info_async); + g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_input_stream_real_query_info_async); data = g_simple_async_result_get_op_res_gpointer (simple); if (data->info) @@ -518,3 +467,7 @@ g_file_input_stream_real_query_info_finish (GFileInputStream *stream, return NULL; } + +#define __G_FILE_INPUT_STREAM_C__ +#include "gioaliasdef.c" +