1 /* GIO - GLib Input, Output and Streaming Library
3 * Copyright (C) 2006-2007 Red Hat, Inc.
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General
16 * Public License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
18 * Boston, MA 02111-1307, USA.
20 * Author: Christian Kellner <gicmo@gnome.org>
24 #include "gfilterinputstream.h"
25 #include "ginputstream.h"
31 * SECTION:gfilterinputstream
32 * @short_description: Filter Input Stream
42 static void g_filter_input_stream_set_property (GObject *object,
47 static void g_filter_input_stream_get_property (GObject *object,
51 static void g_filter_input_stream_finalize (GObject *object);
54 static gssize g_filter_input_stream_read (GInputStream *stream,
57 GCancellable *cancellable,
59 static gssize g_filter_input_stream_skip (GInputStream *stream,
61 GCancellable *cancellable,
63 static gboolean g_filter_input_stream_close (GInputStream *stream,
64 GCancellable *cancellable,
66 static void g_filter_input_stream_read_async (GInputStream *stream,
70 GCancellable *cancellable,
71 GAsyncReadyCallback callback,
73 static gssize g_filter_input_stream_read_finish (GInputStream *stream,
76 static void g_filter_input_stream_skip_async (GInputStream *stream,
79 GCancellable *cancellabl,
80 GAsyncReadyCallback callback,
82 static gssize g_filter_input_stream_skip_finish (GInputStream *stream,
85 static void g_filter_input_stream_close_async (GInputStream *stream,
87 GCancellable *cancellabl,
88 GAsyncReadyCallback callback,
90 static gboolean g_filter_input_stream_close_finish (GInputStream *stream,
94 G_DEFINE_TYPE (GFilterInputStream, g_filter_input_stream, G_TYPE_INPUT_STREAM)
98 g_filter_input_stream_class_init (GFilterInputStreamClass *klass)
100 GObjectClass *object_class;
101 GInputStreamClass *istream_class;
103 object_class = G_OBJECT_CLASS (klass);
104 object_class->get_property = g_filter_input_stream_get_property;
105 object_class->set_property = g_filter_input_stream_set_property;
106 object_class->finalize = g_filter_input_stream_finalize;
108 istream_class = G_INPUT_STREAM_CLASS (klass);
109 istream_class->read_fn = g_filter_input_stream_read;
110 istream_class->skip = g_filter_input_stream_skip;
111 istream_class->close_fn = g_filter_input_stream_close;
113 istream_class->read_async = g_filter_input_stream_read_async;
114 istream_class->read_finish = g_filter_input_stream_read_finish;
115 istream_class->skip_async = g_filter_input_stream_skip_async;
116 istream_class->skip_finish = g_filter_input_stream_skip_finish;
117 istream_class->close_async = g_filter_input_stream_close_async;
118 istream_class->close_finish = g_filter_input_stream_close_finish;
120 g_object_class_install_property (object_class,
122 g_param_spec_object ("base-stream",
123 P_("The Filter Base Stream"),
124 P_("The underlying base stream the io ops will be done on"),
126 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
127 G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
132 g_filter_input_stream_set_property (GObject *object,
137 GFilterInputStream *filter_stream;
140 filter_stream = G_FILTER_INPUT_STREAM (object);
144 case PROP_BASE_STREAM:
145 obj = g_value_dup_object (value);
146 filter_stream->base_stream = G_INPUT_STREAM (obj);
150 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
157 g_filter_input_stream_get_property (GObject *object,
162 GFilterInputStream *filter_stream;
164 filter_stream = G_FILTER_INPUT_STREAM (object);
168 case PROP_BASE_STREAM:
169 g_value_set_object (value, filter_stream->base_stream);
173 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
180 g_filter_input_stream_finalize (GObject *object)
182 GFilterInputStream *stream;
184 stream = G_FILTER_INPUT_STREAM (object);
186 g_object_unref (stream->base_stream);
188 if (G_OBJECT_CLASS (g_filter_input_stream_parent_class)->finalize)
189 (*G_OBJECT_CLASS (g_filter_input_stream_parent_class)->finalize) (object);
193 g_filter_input_stream_init (GFilterInputStream *stream)
199 * g_filter_input_stream_get_base_stream:
200 * @stream: a #GFilterInputStream.
202 * Gets the base stream for the filter stream.
204 * Returns: a #GInputStream.
207 g_filter_input_stream_get_base_stream (GFilterInputStream *stream)
209 g_return_val_if_fail (G_IS_FILTER_INPUT_STREAM (stream), NULL);
211 return stream->base_stream;
215 g_filter_input_stream_read (GInputStream *stream,
218 GCancellable *cancellable,
221 GFilterInputStream *filter_stream;
222 GInputStream *base_stream;
225 filter_stream = G_FILTER_INPUT_STREAM (stream);
226 base_stream = filter_stream->base_stream;
228 nread = g_input_stream_read (base_stream,
238 g_filter_input_stream_skip (GInputStream *stream,
240 GCancellable *cancellable,
243 GFilterInputStream *filter_stream;
244 GInputStream *base_stream;
247 filter_stream = G_FILTER_INPUT_STREAM (stream);
248 base_stream = filter_stream->base_stream;
250 nskipped = g_input_stream_skip (base_stream,
258 g_filter_input_stream_close (GInputStream *stream,
259 GCancellable *cancellable,
262 GFilterInputStream *filter_stream;
263 GInputStream *base_stream;
266 filter_stream = G_FILTER_INPUT_STREAM (stream);
267 base_stream = filter_stream->base_stream;
269 res = g_input_stream_close (base_stream,
277 g_filter_input_stream_read_async (GInputStream *stream,
281 GCancellable *cancellable,
282 GAsyncReadyCallback callback,
285 GFilterInputStream *filter_stream;
286 GInputStream *base_stream;
288 filter_stream = G_FILTER_INPUT_STREAM (stream);
289 base_stream = filter_stream->base_stream;
291 g_input_stream_read_async (base_stream,
301 g_filter_input_stream_read_finish (GInputStream *stream,
302 GAsyncResult *result,
305 GFilterInputStream *filter_stream;
306 GInputStream *base_stream;
309 filter_stream = G_FILTER_INPUT_STREAM (stream);
310 base_stream = filter_stream->base_stream;
312 nread = g_input_stream_read_finish (base_stream,
320 g_filter_input_stream_skip_async (GInputStream *stream,
323 GCancellable *cancellable,
324 GAsyncReadyCallback callback,
327 GFilterInputStream *filter_stream;
328 GInputStream *base_stream;
330 filter_stream = G_FILTER_INPUT_STREAM (stream);
331 base_stream = filter_stream->base_stream;
333 g_input_stream_skip_async (base_stream,
343 g_filter_input_stream_skip_finish (GInputStream *stream,
344 GAsyncResult *result,
347 GFilterInputStream *filter_stream;
348 GInputStream *base_stream;
351 filter_stream = G_FILTER_INPUT_STREAM (stream);
352 base_stream = filter_stream->base_stream;
354 nskipped = g_input_stream_skip_finish (base_stream,
362 g_filter_input_stream_close_async (GInputStream *stream,
364 GCancellable *cancellable,
365 GAsyncReadyCallback callback,
368 GFilterInputStream *filter_stream;
369 GInputStream *base_stream;
371 filter_stream = G_FILTER_INPUT_STREAM (stream);
372 base_stream = filter_stream->base_stream;
374 g_input_stream_close_async (base_stream,
382 g_filter_input_stream_close_finish (GInputStream *stream,
383 GAsyncResult *result,
386 GFilterInputStream *filter_stream;
387 GInputStream *base_stream;
390 filter_stream = G_FILTER_INPUT_STREAM (stream);
391 base_stream = filter_stream->base_stream;
393 res = g_input_stream_close_finish (stream,
400 #define __G_FILTER_INPUT_STREAM_C__
401 #include "gioaliasdef.c"