GIOChannel * g_io_channel_win32_new_fd (gint fd) { GIOWin32Channel *win32_channel; GIOChannel *channel; struct stat st; if (fstat (fd, &st) == -1) { g_warning (G_STRLOC ": %d isn't a (emulated) file descriptor", fd); return NULL; } win32_channel = g_new (GIOWin32Channel, 1); channel = (GIOChannel *)win32_channel; g_io_channel_init (channel); g_io_channel_win32_init (win32_channel); if (win32_channel->debug) g_print ("g_io_channel_win32_new_fd: %u\n", fd); channel->funcs = &win32_channel_fd_funcs; win32_channel->type = G_IO_WIN32_FILE_DESC; win32_channel->fd = fd; /* fstat doesn't deliver senseful values, but * fcntl isn't available, so guess ... */ if (st.st_mode & _S_IFIFO) { channel->is_readable = TRUE; channel->is_writeable = TRUE; channel->is_seekable = FALSE; } else { channel->is_readable = !!(st.st_mode & _S_IREAD); channel->is_writeable = !!(st.st_mode & _S_IWRITE); /* XXX What about "device files" (COM1: and the like) */ channel->is_seekable = TRUE; } return channel; }
static GIOChannel * g_io_channel_win32_new_fd_internal (gint fd, struct stat *st) { GIOWin32Channel *win32_channel; GIOChannel *channel; win32_channel = g_new (GIOWin32Channel, 1); channel = (GIOChannel *)win32_channel; g_io_channel_init (channel); g_io_channel_win32_init (win32_channel); channel->funcs = &win32_channel_fd_funcs; win32_channel->type = G_IO_WIN32_FILE_DESC; win32_channel->fd = fd; g_io_win32_fd_get_flags_internal (channel, st); return channel; }
GIOChannel * g_io_channel_win32_new_messages (guint hwnd) { GIOWin32Channel *win32_channel = g_new (GIOWin32Channel, 1); GIOChannel *channel = (GIOChannel *)win32_channel; g_io_channel_init (channel); g_io_channel_win32_init (win32_channel); channel->funcs = &win32_channel_msg_funcs; win32_channel->type = G_IO_WIN32_WINDOWS_MESSAGES; win32_channel->hwnd = (HWND) hwnd; /* XXX: check this. */ channel->is_readable = IsWindow (win32_channel->hwnd); channel->is_writeable = IsWindow (win32_channel->hwnd); channel->is_seekable = FALSE; return channel; }
GIOChannel * g_io_channel_win32_new_socket (int socket) { GIOWin32Channel *win32_channel = g_new (GIOWin32Channel, 1); GIOChannel *channel = (GIOChannel *)win32_channel; g_io_channel_init (channel); g_io_channel_win32_init (win32_channel); if (win32_channel->debug) g_print ("g_io_channel_win32_new_socket: sockfd:%d\n", socket); channel->funcs = &win32_channel_sock_funcs; win32_channel->type = G_IO_WIN32_SOCKET; win32_channel->fd = socket; /* XXX: check this */ channel->is_readable = TRUE; channel->is_writeable = TRUE; channel->is_seekable = FALSE; return channel; }