#include "gasynchelper.h"
#include "glibintl.h"
-#include "gioalias.h"
/**
* SECTION:gunixoutputstream
- * @short_description: Streaming output operations for Unix file descriptors
+ * @short_description: Streaming output operations for UNIX file descriptors
* @include: gio/gunixoutputstream.h
* @see_also: #GOutputStream
*
* #GUnixOutputStream implements #GOutputStream for writing to 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.
- **/
+ *
+ * Note that <filename><gio/gunixoutputstream.h></filename> belongs
+ * to the UNIX-specific GIO interfaces, thus you have to use the
+ * <filename>gio-unix-2.0.pc</filename> pkg-config file when using it.
+ */
enum {
PROP_0,
static void
g_unix_output_stream_finalize (GObject *object)
{
- GUnixOutputStream *stream;
-
- stream = G_UNIX_OUTPUT_STREAM (object);
-
G_OBJECT_CLASS (g_unix_output_stream_parent_class)->finalize (object);
}
g_object_class_install_property (gobject_class,
PROP_FD,
g_param_spec_int ("fd",
- _("File descriptor"),
- _("The file descriptor to write to"),
+ P_("File descriptor"),
+ P_("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));
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"),
+ P_("Close file descriptor"),
+ P_("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));
}
unix_stream = G_UNIX_OUTPUT_STREAM (stream);
- if (cancellable)
+ if (g_cancellable_make_pollfd (cancellable, &poll_fds[1]))
{
poll_fds[0].fd = unix_stream->priv->fd;
poll_fds[0].events = G_IO_OUT;
- g_cancellable_make_pollfd (cancellable, &poll_fds[1]);
do
poll_ret = g_poll (poll_fds, 2, -1);
while (poll_ret == -1 && errno == EINTR);
+ g_cancellable_release_fd (cancellable);
if (poll_ret == -1)
{
g_set_error (&error, G_IO_ERROR,
g_io_error_from_errno (errsv),
- _("Error reading from unix: %s"),
+ _("Error writing to unix: %s"),
g_strerror (errsv));
}
break;
g_simple_async_result_set_op_res_gssize (simple, count_written);
if (count_written == -1)
- {
- g_simple_async_result_set_from_error (simple, error);
- g_error_free (error);
- }
+ g_simple_async_result_take_error (simple, error);
/* Complete immediately, not in idle, since we're already in a mainloop callout */
g_simple_async_result_complete (simple);
source = _g_fd_source_new (unix_stream->priv->fd,
G_IO_OUT,
cancellable);
+ g_source_set_name (source, "GUnixOutputStream");
g_source_set_callback (source, (GSourceFunc)write_async_cb, data, g_free);
- g_source_attach (source, NULL);
+ g_source_attach (source, g_main_context_get_thread_default ());
g_source_unref (source);
}
g_unix_output_stream_close_async);
if (!result)
- {
- g_simple_async_result_set_from_error (simple, error);
- g_error_free (error);
- }
+ g_simple_async_result_take_error (simple, error);
/* Complete immediately, not in idle, since we're already in a mainloop callout */
g_simple_async_result_complete (simple);
idle = g_idle_source_new ();
g_source_set_callback (idle, (GSourceFunc)close_async_cb, data, g_free);
- g_source_attach (idle, NULL);
+ g_source_attach (idle, g_main_context_get_thread_default ());
g_source_unref (idle);
}
/* Failures handled in generic close_finish code */
return TRUE;
}
-
-#define __G_UNIX_OUTPUT_STREAM_C__
-#include "gioaliasdef.c"