[gnio] Update to use GIOStream from gio
- From: Alexander Larsson <alexl src gnome org>
- To: svn-commits-list gnome org
- Subject: [gnio] Update to use GIOStream from gio
- Date: Wed, 13 May 2009 08:51:38 -0400 (EDT)
commit 712f8f8613c2ae396da43ba93cf514f53761e5b1
Author: Alexander Larsson <alexl redhat com>
Date: Wed May 13 14:50:55 2009 +0200
Update to use GIOStream from gio
GIOStream was added to gio, require a new glib and use it from there.
---
configure.ac | 2 +-
gio/Makefile.am | 2 -
gio/giostream.c | 563 -------------------------------------------------------
gio/giostream.h | 113 -----------
gio/gtls.h | 2 +-
5 files changed, 2 insertions(+), 680 deletions(-)
diff --git a/configure.ac b/configure.ac
index c2c1f8d..5f8b36f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -16,7 +16,7 @@ PKG_CHECK_MODULES(gnutls, gnutls, [
PKG_CHECK_MODULES(gio, gio-unix-2.0)
gnio_saved_libs="$LIBS"
LIBS="$LIBS $gio_LIBS"
-AC_CHECK_FUNC(g_socket_connectable_enumerate,,
+AC_CHECK_FUNC(g_io_stream_close,,
AC_MSG_ERROR([gnio requires a new glib (git://git.gnome.org/glib)]))
LIBS="$gnio_saved_libs"
diff --git a/gio/Makefile.am b/gio/Makefile.am
index 1381a5a..351b962 100644
--- a/gio/Makefile.am
+++ b/gio/Makefile.am
@@ -9,7 +9,6 @@ libgnio_la_LIBADD = $(gio_LIBS) $(gnutls_LIBS)
sources = \
gasynchelper.c \
gasynchelper.h \
- giostream.c \
gnio-marshal.c \
gnio-marshal.h \
gnioenums.c \
@@ -49,7 +48,6 @@ endif
gioincludedir = $(includedir)/gnio/gio
headers = \
- giostream.h \
gnio.h \
gnioconfig.h \
gnioerror.h \
diff --git a/gio/giostream.c b/gio/giostream.c
deleted file mode 100644
index 90f74e4..0000000
--- a/gio/giostream.c
+++ /dev/null
@@ -1,563 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright © 2008 codethink
- * Copyright © 2009 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * 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.
- *
- * Authors: Ryan Lortie <desrt desrt ca>
- * Alexander Larsson <alexl redhat com>
- */
-
-#include "config.h"
-#include "giostream.h"
-#include <gio/gsimpleasyncresult.h>
-#include <gio/gasyncresult.h>
-
-G_DEFINE_TYPE (GIOStream, g_io_stream, G_TYPE_OBJECT);
-
-/**
- * SECTION:ginputstream
- * @short_description: Base class for implementing readwrite streams
- * @include: gio/gio.h
- *
- * GIOStream represents an object that has both read and write streams.
- * Generally the two streams acts as separate input and output streams,
- * but they share some common resources and state. For instance, for
- * seekable streams they may use the same position in both streams.
- *
- * To do the actual reading and writing you need to get the substreams
- * with g_io_stream_get_input_stream() and g_io_stream_get_output_stream().
- *
- * To close a stream use g_io_stream_close() which will close the common
- * stream object and also the individual substreams. You can also close
- * the substreams themselves. In most cases this only marks the
- * substream as closed, so further I/O on it fails. However, some streams
- * may support "half-closed" states where one direction of the stream
- * is actually shut down.
- **/
-
-enum
-{
- PROP_0,
- PROP_INPUT_STREAM,
- PROP_OUTPUT_STREAM,
- PROP_CLOSED
-};
-
-struct _GIOStreamPrivate {
- guint closed : 1;
- guint pending : 1;
- GAsyncReadyCallback outstanding_callback;
-};
-
-static gboolean g_io_stream_real_close (GIOStream *stream,
- GCancellable *cancellable,
- GError **error);
-static void g_io_stream_real_close_async (GIOStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-static gboolean g_io_stream_real_close_finish (GIOStream *stream,
- GAsyncResult *result,
- GError **error);
-
-static void
-g_io_stream_finalize (GObject *object)
-{
- GIOStream *stream;
-
- stream = G_IO_STREAM (object);
-
- if (!stream->priv->closed)
- g_io_stream_close (stream, NULL, NULL);
-
- G_OBJECT_CLASS (g_io_stream_parent_class)->finalize (object);
-}
-
-static void
-g_io_stream_dispose (GObject *object)
-{
- GIOStream *stream;
-
- stream = G_IO_STREAM (object);
-
- if (!stream->priv->closed)
- g_io_stream_close (stream, NULL, NULL);
-
- G_OBJECT_CLASS (g_io_stream_parent_class)->dispose (object);
-}
-
-static void
-g_io_stream_init (GIOStream *stream)
-{
- stream->priv = G_TYPE_INSTANCE_GET_PRIVATE (stream,
- G_TYPE_IO_STREAM,
- GIOStreamPrivate);
-}
-
-static void
-g_io_stream_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GIOStream *stream = G_IO_STREAM (object);
-
- switch (prop_id)
- {
- case PROP_CLOSED:
- g_value_set_boolean (value, stream->priv->closed);
- break;
-
- case PROP_INPUT_STREAM:
- g_value_set_object (value, g_io_stream_get_input_stream (stream));
- break;
-
- case PROP_OUTPUT_STREAM:
- g_value_set_object (value, g_io_stream_get_output_stream (stream));
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- }
-}
-
-static void
-g_io_stream_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- switch (prop_id)
- {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- }
-}
-
-static void
-g_io_stream_class_init (GIOStreamClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (GIOStreamPrivate));
-
- gobject_class->finalize = g_io_stream_finalize;
- gobject_class->dispose = g_io_stream_dispose;
- gobject_class->set_property = g_io_stream_set_property;
- gobject_class->get_property = g_io_stream_get_property;
-
- klass->close_fn = g_io_stream_real_close;
- klass->close_async = g_io_stream_real_close_async;
- klass->close_finish = g_io_stream_real_close_finish;
-
- g_object_class_install_property (gobject_class, PROP_CLOSED,
- g_param_spec_boolean ("closed",
- P_("Closed"),
- P_("Is the stream closed"),
- FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (gobject_class, PROP_INPUT_STREAM,
- g_param_spec_object ("input-stream",
- P_("Input stream"),
- P_("The GInputStream to read from"),
- G_TYPE_INPUT_STREAM,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, PROP_OUTPUT_STREAM,
- g_param_spec_object ("output-stream",
- P_("Output stream"),
- P_("The GOutputStream to write to"),
- G_TYPE_OUTPUT_STREAM,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-}
-
-/**
- * g_io_stream_get_input_stream:
- * @stream: input #GIOStream.
- *
- * Gets the input stream for this object. This is used
- * for reading.
- *
- * Returns: a #GInputStream, owned by the #GIOStream do not free.
- **/
-GInputStream *
-g_io_stream_get_input_stream (GIOStream *io_stream)
-{
- GIOStreamClass *klass;
-
- klass = G_IO_STREAM_GET_CLASS (io_stream);
-
- g_assert (klass->get_input_stream != NULL);
-
- return klass->get_input_stream (io_stream);
-}
-
-/**
- * g_io_stream_get_output_stream:
- * @stream: input #GIOStream.
- *
- * Gets the output stream for this object. This is used for
- * writing.
- *
- * Returns: a #GOutputStream, owned by the #GIOStream do not free.
- **/
-GOutputStream *
-g_io_stream_get_output_stream (GIOStream *io_stream)
-{
- GIOStreamClass *klass;
-
- klass = G_IO_STREAM_GET_CLASS (io_stream);
-
- g_assert (klass->get_output_stream != NULL);
- return klass->get_output_stream (io_stream);
-}
-
-/**
- * g_io_stream_has_pending:
- * @stream: a #GIOStream.
- *
- * Checks if a stream has pending actions.
- *
- * Returns: %TRUE if @stream has pending actions.
- **/
-gboolean
-g_io_stream_has_pending (GIOStream *stream)
-{
- g_return_val_if_fail (G_IS_IO_STREAM (stream), FALSE);
-
- return stream->priv->pending;
-}
-
-/**
- * g_io_stream_set_pending:
- * @stream: a #GIOStream.
- * @error: a #GError location to store the error occuring, or %NULL to
- * ignore.
- *
- * Sets @stream to have actions pending. If the pending flag is
- * already set or @stream is closed, it will return %FALSE and set
- * @error.
- *
- * Return value: %TRUE if pending was previously unset and is now set.
- **/
-gboolean
-g_io_stream_set_pending (GIOStream *stream,
- GError **error)
-{
- g_return_val_if_fail (G_IS_IO_STREAM (stream), FALSE);
-
- if (stream->priv->closed)
- {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_CLOSED,
- _("Stream is already closed"));
- return FALSE;
- }
-
- if (stream->priv->pending)
- {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_PENDING,
- /* Translators: This is an error you get if there is
- * already an operation running against this stream when
- * you try to start one */
- _("Stream has outstanding operation"));
- return FALSE;
- }
-
- stream->priv->pending = TRUE;
- return TRUE;
-}
-
-/**
- * g_io_stream_clear_pending:
- * @stream: output stream
- *
- * Clears the pending flag on @stream.
- **/
-void
-g_io_stream_clear_pending (GIOStream *stream)
-{
- g_return_if_fail (G_IS_IO_STREAM (stream));
-
- stream->priv->pending = FALSE;
-}
-
-static gboolean
-g_io_stream_real_close (GIOStream *stream,
- GCancellable *cancellable,
- GError **error)
-{
- gboolean res;
-
- res = g_output_stream_close (g_io_stream_get_output_stream (stream),
- cancellable, error);
-
- /* If this errored out, unset error so that we don't report
- further errors, but still do the following ops */
- if (error != NULL && *error != NULL)
- error = NULL;
-
- res &= g_input_stream_close (g_io_stream_get_input_stream (stream),
- cancellable, error);
-
- return res;
-}
-
-/**
- * g_io_stream_close:
- * @stream: A #GIOStream.
- * @cancellable: optional #GCancellable object, %NULL to ignore.
- * @error: location to store the error occuring, or %NULL to ignore
- *
- * Closes the stream, releasing resources related to it. This will also
- * closes the individual input and output streams, if they are not already
- * closed.
- *
- * Once the stream is closed, all other operations will return %G_IO_ERROR_CLOSED.
- * Closing a stream multiple times will not return an error.
- *
- * Closing a stream will automatically flush any outstanding buffers in the
- * stream.
- *
- * Streams will be automatically closed when the last reference
- * is dropped, but you might want to call this function to make sure
- * resources are released as early as possible.
- *
- * Some streams might keep the backing store of the stream (e.g. a file descriptor)
- * open after the stream is closed. See the documentation for the individual
- * stream for details.
- *
- * On failure the first error that happened will be reported, but the close
- * operation will finish as much as possible. A stream that failed to
- * close will still return %G_IO_ERROR_CLOSED for all operations. Still, it
- * is important to check and report the error to the user, otherwise
- * there might be a loss of data as all data might not be written.
- *
- * 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 returned.
- * Cancelling a close will still leave the stream closed, but some streams
- * can use a faster close that doesn't block to e.g. check errors.
- *
- * The default implementation of this method just calls close on the
- * individual input/output streams.
- *
- * Return value: %TRUE on success, %FALSE on failure
- **/
-gboolean
-g_io_stream_close (GIOStream *stream,
- GCancellable *cancellable,
- GError **error)
-{
- GIOStreamClass *class;
- gboolean res;
-
- g_return_val_if_fail (G_IS_IO_STREAM (stream), FALSE);
-
- class = G_IO_STREAM_GET_CLASS (stream);
-
- if (stream->priv->closed)
- return TRUE;
-
- if (!g_io_stream_set_pending (stream, error))
- return FALSE;
-
- if (cancellable)
- g_cancellable_push_current (cancellable);
-
- res = TRUE;
- if (class->close_fn)
- res = class->close_fn (stream, cancellable, error);
-
- if (cancellable)
- g_cancellable_pop_current (cancellable);
-
- stream->priv->closed = TRUE;
- g_io_stream_clear_pending (stream);
-
- return res;
-}
-
-static void
-async_ready_close_callback_wrapper (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GIOStream *stream = G_IO_STREAM (source_object);
-
- stream->priv->closed = TRUE;
- g_io_stream_clear_pending (stream);
- if (stream->priv->outstanding_callback)
- (*stream->priv->outstanding_callback) (source_object, res, user_data);
- g_object_unref (stream);
-}
-
-/**
- * g_io_stream_close_async:
- * @stream: A #GIOStream.
- * @io_priority: the io priority of the request.
- * @callback: callback to call when the request is satisfied
- * @user_data: the data to pass to callback function
- * @cancellable: optional cancellable object
- *
- * Requests an asynchronous close of the stream, releasing resources
- * related to it. When the operation is finished @callback will be
- * called. You can then call g_io_stream_close_finish() to get
- * the result of the operation.
- *
- * For behaviour details see g_io_stream_close().
- *
- * The asyncronous methods have a default fallback that uses threads
- * to implement asynchronicity, so they are optional for inheriting
- * classes. However, if you override one you must override all.
- **/
-void
-g_io_stream_close_async (GIOStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GIOStreamClass *class;
- GSimpleAsyncResult *simple;
- GError *error = NULL;
-
- g_return_if_fail (G_IS_IO_STREAM (stream));
-
- if (stream->priv->closed)
- {
- simple = g_simple_async_result_new (G_OBJECT (stream),
- callback,
- user_data,
- g_io_stream_close_async);
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
- return;
- }
-
- if (!g_io_stream_set_pending (stream, &error))
- {
- g_simple_async_report_gerror_in_idle (G_OBJECT (stream),
- callback,
- user_data,
- error);
- g_error_free (error);
- return;
- }
-
- class = G_IO_STREAM_GET_CLASS (stream);
- stream->priv->outstanding_callback = callback;
- g_object_ref (stream);
- class->close_async (stream, io_priority, cancellable,
- async_ready_close_callback_wrapper, user_data);
-}
-
-/**
- * g_io_stream_close_finish:
- * @stream: a #GIOStream.
- * @result: a #GAsyncResult.
- * @error: a #GError location to store the error occuring, or %NULL to
- * ignore.
- *
- * Closes a stream.
- *
- * Returns: %TRUE if stream was successfully closed, %FALSE otherwise.
- **/
-gboolean
-g_io_stream_close_finish (GIOStream *stream,
- GAsyncResult *result,
- GError **error)
-{
- GSimpleAsyncResult *simple;
- GIOStreamClass *class;
-
- g_return_val_if_fail (G_IS_IO_STREAM (stream), FALSE);
- g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
-
- if (G_IS_SIMPLE_ASYNC_RESULT (result))
- {
- simple = G_SIMPLE_ASYNC_RESULT (result);
- if (g_simple_async_result_propagate_error (simple, error))
- return FALSE;
-
- /* Special case already closed */
- if (g_simple_async_result_get_source_tag (simple) == g_io_stream_close_async)
- return TRUE;
- }
-
- class = G_IO_STREAM_GET_CLASS (stream);
- return class->close_finish (stream, result, error);
-}
-
-
-static void
-close_async_thread (GSimpleAsyncResult *res,
- GObject *object,
- GCancellable *cancellable)
-{
- GIOStreamClass *class;
- GError *error = NULL;
- gboolean result;
-
- /* Auto handling of cancelation disabled, and ignore
- cancellation, since we want to close things anyway, although
- possibly in a quick-n-dirty way. At least we never want to leak
- open handles */
-
- class = G_IO_STREAM_GET_CLASS (object);
- result = class->close_fn (G_IO_STREAM (object), cancellable, &error);
- if (!result)
- {
- g_simple_async_result_set_from_error (res, error);
- g_error_free (error);
- }
-}
-
-static void
-g_io_stream_real_close_async (GIOStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *res;
-
- res = g_simple_async_result_new (G_OBJECT (stream),
- callback,
- user_data,
- g_io_stream_real_close_async);
-
- g_simple_async_result_set_handle_cancellation (res, FALSE);
-
- g_simple_async_result_run_in_thread (res,
- close_async_thread,
- io_priority,
- cancellable);
- g_object_unref (res);
-}
-
-static gboolean
-g_io_stream_real_close_finish (GIOStream *stream,
- GAsyncResult *result,
- GError **error)
-{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) ==
- g_io_stream_real_close_async);
- return TRUE;
-}
diff --git a/gio/giostream.h b/gio/giostream.h
deleted file mode 100644
index 679d94d..0000000
--- a/gio/giostream.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/* GIO - GLib Input, Output and Streaming Library
- *
- * Copyright © 2008, 2009 Codethink Limited
- * Copyright © 2009 Red Hat, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation; either version 2 of the licence or (at
- * your option) any later version.
- *
- * See the included COPYING file for more information.
- *
- * Authors: Ryan Lortie <desrt desrt ca>
- * Alexander Larsson <alexl redhat com>
- */
-
-#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
-#error "Only <gio/gio.h> can be included directly."
-#endif
-
-#ifndef __G_IO_STREAM_H__
-#define __G_IO_STREAM_H__
-
-#include <gio/ginputstream.h>
-#include <gio/goutputstream.h>
-#include <gio/gcancellable.h>
-#include <gio/gioerror.h>
-
-G_BEGIN_DECLS
-
-#define G_TYPE_IO_STREAM (g_io_stream_get_type ())
-#define G_IO_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_IO_STREAM, GIOStream))
-#define G_IO_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_IO_STREAM, GIOStreamClass))
-#define G_IS_IO_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_IO_STREAM))
-#define G_IS_IO_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_IO_STREAM))
-#define G_IO_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_IO_STREAM, GIOStreamClass))
-
-typedef struct _GIOStream GIOStream;
-typedef struct _GIOStreamPrivate GIOStreamPrivate;
-typedef struct _GIOStreamClass GIOStreamClass;
-
-/**
- * GIOStream:
- *
- * Base class for read-write streams.
- **/
-struct _GIOStream
-{
- GObject parent_instance;
-
- /*< private >*/
- GIOStreamPrivate *priv;
-};
-
-struct _GIOStreamClass
-{
- GObjectClass parent_class;
-
- GInputStream * (*get_input_stream) (GIOStream *stream);
- GOutputStream * (*get_output_stream) (GIOStream *stream);
-
- gboolean (* close_fn) (GIOStream *stream,
- GCancellable *cancellable,
- GError **error);
- void (* close_async) (GIOStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
- gboolean (* close_finish) (GIOStream *stream,
- GAsyncResult *result,
- GError **error);
- /*< private >*/
- /* Padding for future expansion */
- void (*_g_reserved1) (void);
- void (*_g_reserved2) (void);
- void (*_g_reserved3) (void);
- void (*_g_reserved4) (void);
- void (*_g_reserved5) (void);
- void (*_g_reserved6) (void);
- void (*_g_reserved7) (void);
- void (*_g_reserved8) (void);
- void (*_g_reserved9) (void);
- void (*_g_reserved10) (void);
-};
-
-GType g_io_stream_get_type (void);
-
-GInputStream * g_io_stream_get_input_stream (GIOStream *stream);
-GOutputStream *g_io_stream_get_output_stream (GIOStream *stream);
-
-gboolean g_io_stream_close (GIOStream *stream,
- GCancellable *cancellable,
- GError **error);
-
-void g_io_stream_close_async (GIOStream *stream,
- int io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-gboolean g_io_stream_close_finish (GIOStream *stream,
- GAsyncResult *result,
- GError **error);
-
-gboolean g_io_stream_is_closed (GIOStream *stream);
-gboolean g_io_stream_has_pending (GIOStream *stream);
-gboolean g_io_stream_set_pending (GIOStream *stream,
- GError **error);
-void g_io_stream_clear_pending (GIOStream *stream);
-
-G_END_DECLS
-
-#endif /* __G_IO_STREAM_H__ */
diff --git a/gio/gtls.h b/gio/gtls.h
index 9d4e51c..0ffb3ed 100644
--- a/gio/gtls.h
+++ b/gio/gtls.h
@@ -1,7 +1,7 @@
#ifndef _g_tls_h_
#define _g_tls_h_
-#include "giostream.h"
+#include <gio/giostream.h>
#define G_TYPE_TLS_CONNECTION (g_tls_connection_get_type ())
#define G_TYPE_TLS_SESSION (g_tls_session_get_type ())
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]