* Copyright 1998 Owen Taylor
*
* This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
+ * 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
- * Library General Public License for more details.
+ * Lesser General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
+ * 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.
*/
+/*
+ * Modified by the GLib Team and others 1997-2000. See the AUTHORS
+ * file for a list of people on the GLib Team. See the ChangeLog
+ * files for a list of changes. These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
/*
* MT safe
*/
typedef struct _GIOUnixWatch GIOUnixWatch;
struct _GIOUnixChannel {
+ GIOChannel channel;
gint fd;
};
GDestroyNotify notify);
static gboolean g_io_unix_prepare (gpointer source_data,
GTimeVal *current_time,
- gint *timeout);
+ gint *timeout,
+ gpointer user_data);
static gboolean g_io_unix_check (gpointer source_data,
- GTimeVal *current_time);
+ GTimeVal *current_time,
+ gpointer user_data);
static gboolean g_io_unix_dispatch (gpointer source_data,
GTimeVal *current_time,
gpointer user_data);
static gboolean
g_io_unix_prepare (gpointer source_data,
GTimeVal *current_time,
- gint *timeout)
+ gint *timeout,
+ gpointer user_data)
{
*timeout = -1;
return FALSE;
static gboolean
g_io_unix_check (gpointer source_data,
- GTimeVal *current_time)
+ GTimeVal *current_time,
+ gpointer user_data)
{
GIOUnixWatch *data = source_data;
{
GIOUnixWatch *data = source_data;
- g_main_poll_remove (&data->pollfd);
+ g_main_remove_poll (&data->pollfd);
g_io_channel_unref (data->channel);
g_free (data);
}
guint count,
guint *bytes_read)
{
- GIOUnixChannel *unix_channel = channel->channel_data;
+ GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
gint result;
result = read (unix_channel->fd, buf, count);
case EINVAL:
return G_IO_ERROR_INVAL;
case EAGAIN:
+ case EINTR:
return G_IO_ERROR_AGAIN;
default:
return G_IO_ERROR_UNKNOWN;
guint count,
guint *bytes_written)
{
- GIOUnixChannel *unix_channel = channel->channel_data;
+ GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
gint result;
result = write (unix_channel->fd, buf, count);
case EINVAL:
return G_IO_ERROR_INVAL;
case EAGAIN:
+ case EINTR:
return G_IO_ERROR_AGAIN;
default:
return G_IO_ERROR_UNKNOWN;
gint offset,
GSeekType type)
{
- GIOUnixChannel *unix_channel = channel->channel_data;
+ GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
int whence;
off_t result;
static void
g_io_unix_close (GIOChannel *channel)
{
- GIOUnixChannel *unix_channel = channel->channel_data;
+ GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
close (unix_channel->fd);
}
static void
g_io_unix_free (GIOChannel *channel)
{
- GIOUnixChannel *unix_channel = channel->channel_data;
+ GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
g_free (unix_channel);
}
GDestroyNotify notify)
{
GIOUnixWatch *watch = g_new (GIOUnixWatch, 1);
- GIOUnixChannel *unix_channel = channel->channel_data;
+ GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
watch->channel = channel;
g_io_channel_ref (channel);
watch->pollfd.fd = unix_channel->fd;
watch->pollfd.events = condition;
- g_main_poll_add (priority, &watch->pollfd);
+ g_main_add_poll (&watch->pollfd, priority);
return g_source_add (priority, TRUE, &unix_watch_funcs, watch, user_data, notify);
}
g_io_channel_unix_new (gint fd)
{
GIOUnixChannel *unix_channel = g_new (GIOUnixChannel, 1);
+ GIOChannel *channel = (GIOChannel *)unix_channel;
+
+ g_io_channel_init (channel);
+ channel->funcs = &unix_channel_funcs;
unix_channel->fd = fd;
- return g_io_channel_new (&unix_channel_funcs, unix_channel);
+ return channel;
}
gint
g_io_channel_unix_get_fd (GIOChannel *channel)
{
- GIOUnixChannel *unix_channel = channel->channel_data;
+ GIOUnixChannel *unix_channel = (GIOUnixChannel *)channel;
return unix_channel->fd;
}