glib r7735 - in trunk: docs/reference docs/reference/gio gio



Author: matthiasc
Date: Mon Dec  8 05:41:43 2008
New Revision: 7735
URL: http://svn.gnome.org/viewvc/glib?rev=7735&view=rev

Log:
        * gio.symbols:
        * gunixinputstream.[hc]:
        * gunixoutputstream.[hc]: Add "fd" and "close-fd" properties
        including getters and setters. Patch by Maciej Piechotka



Modified:
   trunk/docs/reference/ChangeLog
   trunk/docs/reference/gio/gio-sections.txt
   trunk/gio/ChangeLog
   trunk/gio/gio.symbols
   trunk/gio/gunixinputstream.c
   trunk/gio/gunixinputstream.h
   trunk/gio/gunixoutputstream.c
   trunk/gio/gunixoutputstream.h

Modified: trunk/docs/reference/gio/gio-sections.txt
==============================================================================
--- trunk/docs/reference/gio/gio-sections.txt	(original)
+++ trunk/docs/reference/gio/gio-sections.txt	Mon Dec  8 05:41:43 2008
@@ -536,6 +536,9 @@
 <TITLE>GUnixInputStream</TITLE>
 GUnixInputStream
 g_unix_input_stream_new
+g_unix_input_stream_set_close_fd
+g_unix_input_stream_get_close_fd
+g_unix_input_stream_get_fd
 <SUBSECTION Standard>
 GUnixInputStreamClass
 G_UNIX_INPUT_STREAM
@@ -783,6 +786,9 @@
 <TITLE>GUnixOutputStream</TITLE>
 GUnixOutputStream
 g_unix_output_stream_new
+g_unix_output_stream_set_close_fd
+g_unix_output_stream_get_close_fd
+g_unix_output_stream_get_fd
 <SUBSECTION Standard>
 GUnixOutputStreamClass
 G_UNIX_OUTPUT_STREAM

Modified: trunk/gio/gio.symbols
==============================================================================
--- trunk/gio/gio.symbols	(original)
+++ trunk/gio/gio.symbols	Mon Dec  8 05:41:43 2008
@@ -694,6 +694,9 @@
 #ifdef G_OS_UNIX
 g_unix_input_stream_get_type  G_GNUC_CONST
 g_unix_input_stream_new 
+g_unix_input_stream_set_close_fd
+g_unix_input_stream_get_close_fd
+g_unix_input_stream_get_fd
 #endif /* G_OS_UNIX */
 #endif
 #endif
@@ -703,6 +706,9 @@
 #ifdef G_OS_UNIX
 g_unix_output_stream_get_type  G_GNUC_CONST
 g_unix_output_stream_new 
+g_unix_output_stream_set_close_fd
+g_unix_output_stream_get_close_fd
+g_unix_output_stream_get_fd
 #endif /* G_OS_UNIX */
 #endif
 #endif

Modified: trunk/gio/gunixinputstream.c
==============================================================================
--- trunk/gio/gunixinputstream.c	(original)
+++ trunk/gio/gunixinputstream.c	Mon Dec  8 05:41:43 2008
@@ -42,22 +42,36 @@
 
 /**
  * SECTION:gunixinputstream
- * @short_description: Streaming input operations for Unix file descriptors
+ * @short_description: Streaming input operations for UNIX file descriptors
  * @include: gio/gunixinputstream.h
  * @see_also: #GInputStream
  *
  * #GUnixInputStream implements #GInputStream for reading from a
- * unix file descriptor, including asynchronous operations. The file
+ * UNIX file descriptor, including asynchronous operations. The file
  * descriptor must be selectable, so it doesn't work with opened files.
  **/
 
+enum {
+  PROP_0,
+  PROP_FD,
+  PROP_CLOSE_FD
+};
+
 G_DEFINE_TYPE (GUnixInputStream, g_unix_input_stream, G_TYPE_INPUT_STREAM);
 
 struct _GUnixInputStreamPrivate {
   int fd;
-  gboolean close_fd_at_close;
+  gboolean close_fd;
 };
 
+static void     g_unix_input_stream_set_property (GObject              *object,
+						  guint                 prop_id,
+						  const GValue         *value,
+						  GParamSpec           *pspec);
+static void     g_unix_input_stream_get_property (GObject              *object,
+						  guint                 prop_id,
+						  GValue               *value,
+						  GParamSpec           *pspec);
 static gssize   g_unix_input_stream_read         (GInputStream         *stream,
 						  void                 *buffer,
 						  gsize                 count,
@@ -112,7 +126,9 @@
   GInputStreamClass *stream_class = G_INPUT_STREAM_CLASS (klass);
   
   g_type_class_add_private (klass, sizeof (GUnixInputStreamPrivate));
-  
+
+  gobject_class->get_property = g_unix_input_stream_get_property;
+  gobject_class->set_property = g_unix_input_stream_set_property;
   gobject_class->finalize = g_unix_input_stream_finalize;
 
   stream_class->read_fn = g_unix_input_stream_read;
@@ -127,6 +143,83 @@
     }
   stream_class->close_async = g_unix_input_stream_close_async;
   stream_class->close_finish = g_unix_input_stream_close_finish;
+
+  /**
+   * GUnixInputStream:fd:
+   *
+   * The file descriptor that the stream reads from.
+   *
+   * Since: 2.20
+   */
+  g_object_class_install_property (gobject_class,
+				   PROP_FD,
+				   g_param_spec_int ("fd",
+						     _("File descriptor"),
+						     _("The file descriptor to read from"),
+						     G_MININT, G_MAXINT, -1,
+						     G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+  /**
+   * GUnixInputStream:close-fd:
+   *
+   * Whether to close the file descriptor when the stream is closed.
+   *
+   * Since: 2.20
+   */
+  g_object_class_install_property (gobject_class,
+				   PROP_CLOSE_FD,
+				   g_param_spec_boolean ("close-fd",
+							 _("Close file descriptor"),
+							 _("Whether to close the file descriptor when the stream is closed"),
+							 TRUE,
+							 G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+}
+
+static void
+g_unix_input_stream_set_property (GObject         *object,
+				  guint            prop_id,
+				  const GValue    *value,
+				  GParamSpec      *pspec)
+{
+  GUnixInputStream *unix_stream;
+  
+  unix_stream = G_UNIX_INPUT_STREAM (object);
+
+  switch (prop_id)
+    {
+    case PROP_FD:
+      unix_stream->priv->fd = g_value_get_int (value);
+      break;
+    case PROP_CLOSE_FD:
+      unix_stream->priv->close_fd = g_value_get_boolean (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+g_unix_input_stream_get_property (GObject    *object,
+				  guint       prop_id,
+				  GValue     *value,
+				  GParamSpec *pspec)
+{
+  GUnixInputStream *unix_stream;
+
+  unix_stream = G_UNIX_INPUT_STREAM (object);
+
+  switch (prop_id)
+    {
+    case PROP_FD:
+      g_value_set_int (value, unix_stream->priv->fd);
+      break;
+    case PROP_CLOSE_FD:
+      g_value_set_boolean (value, unix_stream->priv->close_fd);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
 }
 
 static void
@@ -135,34 +228,100 @@
   unix_stream->priv = G_TYPE_INSTANCE_GET_PRIVATE (unix_stream,
 						   G_TYPE_UNIX_INPUT_STREAM,
 						   GUnixInputStreamPrivate);
+
+  unix_stream->priv->fd = -1;
+  unix_stream->priv->close_fd = TRUE;
 }
 
 /**
  * g_unix_input_stream_new:
- * @fd: unix file descriptor.
- * @close_fd_at_close: a #gboolean.
+ * @fd: a UNIX file descriptor
+ * @close_fd: %TRUE to close the file descriptor when done
  * 
- * Creates a new #GUnixInputStream for the given @fd. If @close_fd_at_close
- * is %TRUE, the file descriptor will be closed when the stream is closed.
+ * Creates a new #GUnixInputStream for the given @fd. 
+ *
+ * If @close_fd is %TRUE, the file descriptor will be closed 
+ * when the stream is closed.
  * 
- * Returns: a #GUnixInputStream. 
+ * Returns: a new #GUnixInputStream
  **/
 GInputStream *
-g_unix_input_stream_new (int      fd,
-			 gboolean close_fd_at_close)
+g_unix_input_stream_new (gint     fd,
+			 gboolean close_fd)
 {
   GUnixInputStream *stream;
 
   g_return_val_if_fail (fd != -1, NULL);
 
-  stream = g_object_new (G_TYPE_UNIX_INPUT_STREAM, NULL);
+  stream = g_object_new (G_TYPE_UNIX_INPUT_STREAM,
+			 "fd", fd,
+			 "close-fd", close_fd,
+			 NULL);
 
-  stream->priv->fd = fd;
-  stream->priv->close_fd_at_close = close_fd_at_close;
-  
   return G_INPUT_STREAM (stream);
 }
 
+/**
+ * g_unix_input_stream_set_close_fd:
+ * @stream: a #GUnixInputStream
+ * @close_fd: %TRUE to close the file descriptor when done
+ *
+ * Sets whether the file descriptor of @stream shall be closed
+ * when the stream is closed.
+ *
+ * Since: 2.20
+ */
+void
+g_unix_input_stream_set_close_fd (GUnixInputStream *stream,
+				  gboolean          close_fd)
+{
+  g_return_if_fail (G_IS_UNIX_INPUT_STREAM (stream));
+
+  close_fd = close_fd != FALSE;
+  if (stream->priv->close_fd != close_fd)
+    {
+      stream->priv->close_fd = close_fd;
+      g_object_notify (G_OBJECT (stream), "close-fd");
+    }
+}
+
+/**
+ * g_unix_input_stream_get_close_fd:
+ * @stream: a #GUnixInputStream
+ *
+ * Returns whether the file descriptor of @stream will be
+ * closed when the stream is closed.
+ *
+ * Return value: %TRUE if the file descriptor is closed when done
+ *
+ * Since: 2.20
+ */
+gboolean
+g_unix_input_stream_get_close_fd (GUnixInputStream *stream)
+{
+  g_return_val_if_fail (G_IS_UNIX_INPUT_STREAM (stream), FALSE);
+
+  return stream->priv->close_fd;
+}
+
+/**
+ * g_unix_input_stream_get_fd:
+ * @stream: a #GUnixInputStream
+ *
+ * Return the UNIX file descriptor that the stream reads from.
+ *
+ * Return value: The file descriptor of @stream
+ *
+ * Since: 2.20
+ */
+gint
+g_unix_input_stream_get_fd (GUnixInputStream *stream)
+{
+  g_return_val_if_fail (G_IS_UNIX_INPUT_STREAM (stream), -1);
+  
+  return stream->priv->fd;
+}
+
 static gssize
 g_unix_input_stream_read (GInputStream  *stream,
 			  void          *buffer,
@@ -232,7 +391,7 @@
 
   unix_stream = G_UNIX_INPUT_STREAM (stream);
 
-  if (!unix_stream->priv->close_fd_at_close)
+  if (!unix_stream->priv->close_fd)
     return TRUE;
   
   while (1)
@@ -412,7 +571,7 @@
 
   unix_stream = G_UNIX_INPUT_STREAM (data->stream);
 
-  if (!unix_stream->priv->close_fd_at_close)
+  if (!unix_stream->priv->close_fd)
     {
       result = TRUE;
       goto out;

Modified: trunk/gio/gunixinputstream.h
==============================================================================
--- trunk/gio/gunixinputstream.h	(original)
+++ trunk/gio/gunixinputstream.h	Mon Dec  8 05:41:43 2008
@@ -64,10 +64,14 @@
   void (*_g_reserved5) (void);
 };
 
-GType          g_unix_input_stream_get_type (void) G_GNUC_CONST;
+GType          g_unix_input_stream_get_type     (void) G_GNUC_CONST;
 
-GInputStream * g_unix_input_stream_new      (int      fd,
-                                             gboolean close_fd_at_close);
+GInputStream * g_unix_input_stream_new          (gint              fd,
+                                                 gboolean          close_fd);
+void           g_unix_input_stream_set_close_fd (GUnixInputStream *stream,
+                                                 gboolean          close_fd);
+gboolean       g_unix_input_stream_get_close_fd (GUnixInputStream *stream);
+gint           g_unix_input_stream_get_fd       (GUnixInputStream *stream);
 
 G_END_DECLS
 

Modified: trunk/gio/gunixoutputstream.c
==============================================================================
--- trunk/gio/gunixoutputstream.c	(original)
+++ trunk/gio/gunixoutputstream.c	Mon Dec  8 05:41:43 2008
@@ -51,14 +51,28 @@
  * descriptor must be selectable, so it doesn't work with opened files.
  **/
 
+enum {
+  PROP_0,
+  PROP_FD,
+  PROP_CLOSE_FD
+};
+
 G_DEFINE_TYPE (GUnixOutputStream, g_unix_output_stream, G_TYPE_OUTPUT_STREAM);
 
 
 struct _GUnixOutputStreamPrivate {
   int fd;
-  gboolean close_fd_at_close;
+  gboolean close_fd;
 };
 
+static void     g_unix_output_stream_set_property (GObject              *object,
+						   guint                 prop_id,
+						   const GValue         *value,
+						   GParamSpec           *pspec);
+static void     g_unix_output_stream_get_property (GObject              *object,
+						   guint                 prop_id,
+						   GValue               *value,
+						   GParamSpec           *pspec);
 static gssize   g_unix_output_stream_write        (GOutputStream        *stream,
 						   const void           *buffer,
 						   gsize                 count,
@@ -104,7 +118,9 @@
   GOutputStreamClass *stream_class = G_OUTPUT_STREAM_CLASS (klass);
   
   g_type_class_add_private (klass, sizeof (GUnixOutputStreamPrivate));
-  
+
+  gobject_class->get_property = g_unix_output_stream_get_property;
+  gobject_class->set_property = g_unix_output_stream_set_property;
   gobject_class->finalize = g_unix_output_stream_finalize;
 
   stream_class->write_fn = g_unix_output_stream_write;
@@ -113,6 +129,83 @@
   stream_class->write_finish = g_unix_output_stream_write_finish;
   stream_class->close_async = g_unix_output_stream_close_async;
   stream_class->close_finish = g_unix_output_stream_close_finish;
+
+   /**
+   * GUnixOutputStream:fd:
+   *
+   * The file descriptor that the stream writes to.
+   *
+   * Since: 2.20
+   */
+  g_object_class_install_property (gobject_class,
+				   PROP_FD,
+				   g_param_spec_int ("fd",
+						     _("File descriptor"),
+						     _("The file descriptor to write to"),
+						     G_MININT, G_MAXINT, -1,
+						     G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+  /**
+   * GUnixOutputStream:close-fd:
+   *
+   * Whether to close the file descriptor when the stream is closed.
+   *
+   * Since: 2.20
+   */
+  g_object_class_install_property (gobject_class,
+				   PROP_CLOSE_FD,
+				   g_param_spec_boolean ("close-fd",
+							 _("Close file descriptor"),
+							 _("Whether to close the file descriptor when the stream is closed"),
+							 TRUE,
+							 G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+}
+
+static void
+g_unix_output_stream_set_property (GObject         *object,
+				   guint            prop_id,
+				   const GValue    *value,
+				   GParamSpec      *pspec)
+{
+  GUnixOutputStream *unix_stream;
+
+  unix_stream = G_UNIX_OUTPUT_STREAM (object);
+
+  switch (prop_id)
+    {
+    case PROP_FD:
+      unix_stream->priv->fd = g_value_get_int (value);
+      break;
+    case PROP_CLOSE_FD:
+      unix_stream->priv->close_fd = g_value_get_boolean (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+g_unix_output_stream_get_property (GObject    *object,
+				   guint       prop_id,
+				   GValue     *value,
+				   GParamSpec *pspec)
+{
+  GUnixOutputStream *unix_stream;
+
+  unix_stream = G_UNIX_OUTPUT_STREAM (object);
+
+  switch (prop_id)
+    {
+    case PROP_FD:
+      g_value_set_int (value, unix_stream->priv->fd);
+      break;
+    case PROP_CLOSE_FD:
+      g_value_set_boolean (value, unix_stream->priv->close_fd);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
 }
 
 static void
@@ -121,36 +214,100 @@
   unix_stream->priv = G_TYPE_INSTANCE_GET_PRIVATE (unix_stream,
 						   G_TYPE_UNIX_OUTPUT_STREAM,
 						   GUnixOutputStreamPrivate);
-}
 
+  unix_stream->priv->fd = -1;
+  unix_stream->priv->close_fd = TRUE;
+}
 
 /**
  * g_unix_output_stream_new:
- * @fd: unix's file descriptor.
- * @close_fd_at_close: a #gboolean.
+ * @fd: a UNIX file descriptor
+ * @close_fd: %TRUE to close the file descriptor when done
+ * 
+ * Creates a new #GUnixOutputStream for the given @fd. 
  * 
- * Creates a new unix output stream for @fd. If @close_fd_at_close
- * is %TRUE, the fd will be closed when the output stream is destroyed.
+ * If @close_fd, is %TRUE, the file descriptor will be closed when 
+ * the output stream is destroyed.
  * 
- * Returns: #GOutputStream. If @close_fd_at_close is %TRUE, then
- * @fd will be closed when the #GOutputStream is closed.
+ * Returns: a new #GOutputStream
  **/
 GOutputStream *
-g_unix_output_stream_new (int      fd,
-			  gboolean close_fd_at_close)
+g_unix_output_stream_new (gint     fd,
+			  gboolean close_fd)
 {
   GUnixOutputStream *stream;
 
   g_return_val_if_fail (fd != -1, NULL);
 
-  stream = g_object_new (G_TYPE_UNIX_OUTPUT_STREAM, NULL);
-
-  stream->priv->fd = fd;
-  stream->priv->close_fd_at_close = close_fd_at_close;
+  stream = g_object_new (G_TYPE_UNIX_OUTPUT_STREAM,
+			 "fd", fd,
+			 "close-fd", close_fd,
+			 NULL);
   
   return G_OUTPUT_STREAM (stream);
 }
 
+/**
+ * g_unix_output_stream_set_close_fd:
+ * @stream: a #GUnixOutputStream
+ * @close_fd: %TRUE to close the file descriptor when done
+ *
+ * Sets whether the file descriptor of @stream shall be closed
+ * when the stream is closed.
+ *
+ * Since: 2.20
+ */
+void
+g_unix_output_stream_set_close_fd (GUnixOutputStream *stream,
+                                   gboolean           close_fd)
+{
+  g_return_if_fail (G_IS_UNIX_OUTPUT_STREAM (stream));
+
+  close_fd = close_fd != FALSE;
+  if (stream->priv->close_fd != close_fd)
+    {
+      stream->priv->close_fd = close_fd;
+      g_object_notify (G_OBJECT (stream), "close-fd");
+    }
+}
+
+/**
+ * g_unix_output_stream_get_close_fd:
+ * @stream: a #GUnixOutputStream
+ *
+ * Returns whether the file descriptor of @stream will be
+ * closed when the stream is closed.
+ *
+ * Return value: %TRUE if the file descriptor is closed when done
+ *
+ * Since: 2.20
+ */
+gboolean
+g_unix_output_stream_get_close_fd (GUnixOutputStream *stream)
+{
+  g_return_val_if_fail (G_IS_UNIX_OUTPUT_STREAM (stream), FALSE);
+
+  return stream->priv->close_fd;
+}
+
+/**
+ * g_unix_output_stream_get_fd:
+ * @stream: a #GUnixOutputStream
+ *
+ * Return the UNIX file descriptor that the stream writes to.
+ *
+ * Return value: The file descriptor of @stream
+ *
+ * Since: 2.20
+ */
+gint
+g_unix_output_stream_get_fd (GUnixOutputStream *stream)
+{
+  g_return_val_if_fail (G_IS_UNIX_OUTPUT_STREAM (stream), -1);
+
+  return stream->priv->fd;
+}
+
 static gssize
 g_unix_output_stream_write (GOutputStream  *stream,
 			    const void     *buffer,
@@ -221,7 +378,7 @@
 
   unix_stream = G_UNIX_OUTPUT_STREAM (stream);
 
-  if (!unix_stream->priv->close_fd_at_close)
+  if (!unix_stream->priv->close_fd)
     return TRUE;
   
   while (1)
@@ -370,7 +527,7 @@
 
   unix_stream = G_UNIX_OUTPUT_STREAM (data->stream);
 
-  if (!unix_stream->priv->close_fd_at_close)
+  if (!unix_stream->priv->close_fd)
     {
       result = TRUE;
       goto out;

Modified: trunk/gio/gunixoutputstream.h
==============================================================================
--- trunk/gio/gunixoutputstream.h	(original)
+++ trunk/gio/gunixoutputstream.h	Mon Dec  8 05:41:43 2008
@@ -64,11 +64,14 @@
   void (*_g_reserved5) (void);
 };
 
-GType           g_unix_output_stream_get_type (void) G_GNUC_CONST;
-
-GOutputStream * g_unix_output_stream_new      (int      fd,
-                                               gboolean close_fd_at_close);
+GType           g_unix_output_stream_get_type     (void) G_GNUC_CONST;
 
+GOutputStream * g_unix_output_stream_new          (gint     fd,
+                                                   gboolean close_fd);
+void            g_unix_output_stream_set_close_fd (GUnixOutputStream *stream,
+                                                   gboolean           close_fd);
+gboolean        g_unix_output_stream_get_close_fd (GUnixOutputStream *stream);
+gint            g_unix_output_stream_get_fd       (GUnixOutputStream *stream);
 G_END_DECLS
 
 #endif /* __G_UNIX_OUTPUT_STREAM_H__ */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]