00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef __G_IOCHANNEL_H__
00029 #define __G_IOCHANNEL_H__
00030
00031 #include <_ansi.h>
00032 #include <glib/gconvert.h>
00033 #include <glib/gmain.h>
00034 #include <glib/gstring.h>
00035
00036 G_BEGIN_DECLS
00037
00038
00039
00040
00041 typedef struct _GIOChannel GIOChannel;
00042 typedef struct _GIOFuncs GIOFuncs;
00043
00044 typedef enum
00045 {
00046 G_IO_ERROR_NONE,
00047 G_IO_ERROR_AGAIN,
00048 G_IO_ERROR_INVAL,
00049 G_IO_ERROR_UNKNOWN
00050 } GIOError;
00051
00052 #define G_IO_CHANNEL_ERROR g_io_channel_error_quark()
00053
00054 typedef enum
00055 {
00056
00057 G_IO_CHANNEL_ERROR_FBIG,
00058 G_IO_CHANNEL_ERROR_INVAL,
00059 G_IO_CHANNEL_ERROR_IO,
00060 G_IO_CHANNEL_ERROR_ISDIR,
00061 G_IO_CHANNEL_ERROR_NOSPC,
00062 G_IO_CHANNEL_ERROR_NXIO,
00063 G_IO_CHANNEL_ERROR_OVERFLOW,
00064 G_IO_CHANNEL_ERROR_PIPE,
00065
00066 G_IO_CHANNEL_ERROR_FAILED
00067 } GIOChannelError;
00068
00069 typedef enum
00070 {
00071 G_IO_STATUS_ERROR,
00072 G_IO_STATUS_NORMAL,
00073 G_IO_STATUS_EOF,
00074 G_IO_STATUS_AGAIN
00075 } GIOStatus;
00076
00077 typedef enum
00078 {
00079 G_SEEK_CUR,
00080 G_SEEK_SET,
00081 G_SEEK_END
00082 } GSeekType;
00083
00084 typedef enum
00085 {
00086 G_IO_IN GLIB_SYSDEF_POLLIN,
00087 G_IO_OUT GLIB_SYSDEF_POLLOUT,
00088 G_IO_PRI GLIB_SYSDEF_POLLPRI,
00089 G_IO_ERR GLIB_SYSDEF_POLLERR,
00090 G_IO_HUP GLIB_SYSDEF_POLLHUP,
00091 G_IO_NVAL GLIB_SYSDEF_POLLNVAL
00092 } GIOCondition;
00093
00094 typedef enum
00095 {
00096 G_IO_FLAG_APPEND = 1 << 0,
00097 G_IO_FLAG_NONBLOCK = 1 << 1,
00098 G_IO_FLAG_IS_READABLE = 1 << 2,
00099 G_IO_FLAG_IS_WRITEABLE = 1 << 3,
00100 G_IO_FLAG_IS_SEEKABLE = 1 << 4,
00101 G_IO_FLAG_MASK = (1 << 5) - 1,
00102 G_IO_FLAG_GET_MASK = G_IO_FLAG_MASK,
00103 G_IO_FLAG_SET_MASK = G_IO_FLAG_APPEND | G_IO_FLAG_NONBLOCK
00104 } GIOFlags;
00105
00106 struct _GIOChannel
00107 {
00108
00109 guint ref_count;
00110 GIOFuncs *funcs;
00111
00112 gchar *encoding;
00113 GIConv read_cd;
00114 GIConv write_cd;
00115 gchar *line_term;
00116 guint line_term_len;
00117
00118 gsize buf_size;
00119 GString *read_buf;
00120 GString *encoded_read_buf;
00121 GString *write_buf;
00122 gchar partial_write_buf[6];
00123
00124
00125
00126 guint use_buffer : 1;
00127 guint do_encode : 1;
00128 guint close_on_unref : 1;
00129 guint is_readable : 1;
00130 guint is_writeable : 1;
00131 guint is_seekable : 1;
00132
00133 gpointer reserved1;
00134 gpointer reserved2;
00135 };
00136
00137 typedef gboolean (*GIOFunc) (GIOChannel *source,
00138 GIOCondition condition,
00139 gpointer data);
00140 struct _GIOFuncs
00141 {
00142 GIOStatus (*io_read) (GIOChannel *channel,
00143 gchar *buf,
00144 gsize count,
00145 gsize *bytes_read,
00146 GError **err);
00147 GIOStatus (*io_write) (GIOChannel *channel,
00148 const gchar *buf,
00149 gsize count,
00150 gsize *bytes_written,
00151 GError **err);
00152 GIOStatus (*io_seek) (GIOChannel *channel,
00153 gint64 offset,
00154 GSeekType type,
00155 GError **err);
00156 GIOStatus (*io_close) (GIOChannel *channel,
00157 GError **err);
00158 GSource* (*io_create_watch) (GIOChannel *channel,
00159 GIOCondition condition);
00160 void (*io_free) (GIOChannel *channel);
00161 GIOStatus (*io_set_flags) (GIOChannel *channel,
00162 GIOFlags flags,
00163 GError **err);
00164 GIOFlags (*io_get_flags) (GIOChannel *channel);
00165 };
00166
00167 IMPORT_C void g_io_channel_init (GIOChannel *channel);
00168 IMPORT_C GIOChannel *g_io_channel_ref (GIOChannel *channel);
00169 IMPORT_C void g_io_channel_unref (GIOChannel *channel);
00170
00171 #ifndef G_DISABLE_DEPRECATED
00172 IMPORT_C GIOError g_io_channel_read (GIOChannel *channel,
00173 gchar *buf,
00174 gsize count,
00175 gsize *bytes_read);
00176 IMPORT_C GIOError g_io_channel_write (GIOChannel *channel,
00177 const gchar *buf,
00178 gsize count,
00179 gsize *bytes_written);
00180 IMPORT_C GIOError g_io_channel_seek (GIOChannel *channel,
00181 gint64 offset,
00182 GSeekType type);
00183 IMPORT_C void g_io_channel_close (GIOChannel *channel);
00184 #endif
00185
00186 IMPORT_C GIOStatus g_io_channel_shutdown (GIOChannel *channel,
00187 gboolean flush,
00188 GError **err);
00189 IMPORT_C guint g_io_add_watch_full (GIOChannel *channel,
00190 gint priority,
00191 GIOCondition condition,
00192 GIOFunc func,
00193 gpointer user_data,
00194 GDestroyNotify notify);
00195 IMPORT_C GSource * g_io_create_watch (GIOChannel *channel,
00196 GIOCondition condition);
00197 IMPORT_C guint g_io_add_watch (GIOChannel *channel,
00198 GIOCondition condition,
00199 GIOFunc func,
00200 gpointer user_data);
00201
00202
00203
00204
00205 IMPORT_C void g_io_channel_set_buffer_size (GIOChannel *channel,
00206 gsize size);
00207 IMPORT_C gsize g_io_channel_get_buffer_size (GIOChannel *channel);
00208 IMPORT_C GIOCondition g_io_channel_get_buffer_condition (GIOChannel *channel);
00209 IMPORT_C GIOStatus g_io_channel_set_flags (GIOChannel *channel,
00210 GIOFlags flags,
00211 GError **error);
00212 IMPORT_C GIOFlags g_io_channel_get_flags (GIOChannel *channel);
00213 IMPORT_C void g_io_channel_set_line_term (GIOChannel *channel,
00214 const gchar *line_term,
00215 gint length);
00216 IMPORT_C G_CONST_RETURN gchar* g_io_channel_get_line_term (GIOChannel *channel,
00217 gint *length);
00218 IMPORT_C void g_io_channel_set_buffered (GIOChannel *channel,
00219 gboolean buffered);
00220 IMPORT_C gboolean g_io_channel_get_buffered (GIOChannel *channel);
00221 IMPORT_C GIOStatus g_io_channel_set_encoding (GIOChannel *channel,
00222 const gchar *encoding,
00223 GError **error);
00224 IMPORT_C G_CONST_RETURN gchar* g_io_channel_get_encoding (GIOChannel *channel);
00225 IMPORT_C void g_io_channel_set_close_on_unref (GIOChannel *channel,
00226 gboolean do_close);
00227 IMPORT_C gboolean g_io_channel_get_close_on_unref (GIOChannel *channel);
00228
00229
00230 IMPORT_C GIOStatus g_io_channel_flush (GIOChannel *channel,
00231 GError **error);
00232 IMPORT_C GIOStatus g_io_channel_read_line (GIOChannel *channel,
00233 gchar **str_return,
00234 gsize *length,
00235 gsize *terminator_pos,
00236 GError **error);
00237 IMPORT_C GIOStatus g_io_channel_read_line_string (GIOChannel *channel,
00238 GString *buffer,
00239 gsize *terminator_pos,
00240 GError **error);
00241 IMPORT_C GIOStatus g_io_channel_read_to_end (GIOChannel *channel,
00242 gchar **str_return,
00243 gsize *length,
00244 GError **error);
00245 IMPORT_C GIOStatus g_io_channel_read_chars (GIOChannel *channel,
00246 gchar *buf,
00247 gsize count,
00248 gsize *bytes_read,
00249 GError **error);
00250 IMPORT_C GIOStatus g_io_channel_read_unichar (GIOChannel *channel,
00251 gunichar *thechar,
00252 GError **error);
00253 IMPORT_C GIOStatus g_io_channel_write_chars (GIOChannel *channel,
00254 const gchar *buf,
00255 gssize count,
00256 gsize *bytes_written,
00257 GError **error);
00258 IMPORT_C GIOStatus g_io_channel_write_unichar (GIOChannel *channel,
00259 gunichar thechar,
00260 GError **error);
00261 IMPORT_C GIOStatus g_io_channel_seek_position (GIOChannel *channel,
00262 gint64 offset,
00263 GSeekType type,
00264 GError **error);
00265 #ifdef G_OS_WIN32
00266 #define g_io_channel_new_file g_io_channel_new_file_utf8
00267 #endif
00268
00269 IMPORT_C GIOChannel* g_io_channel_new_file (const gchar *filename,
00270 const gchar *mode,
00271 GError **error);
00272
00273
00274
00275 IMPORT_C GQuark g_io_channel_error_quark (void);
00276 IMPORT_C GIOChannelError g_io_channel_error_from_errno (gint en);
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296 IMPORT_C GIOChannel* g_io_channel_unix_new (int fd);
00297 IMPORT_C gint g_io_channel_unix_get_fd (GIOChannel *channel);
00298
00299
00300
00301 GLIB_VAR GSourceFuncs g_io_watch_funcs;
00302
00303 #ifdef SYMBIAN
00304 IMPORT_C GSourceFuncs * _g_io_watch_funcs();
00305 #endif
00306
00307 #ifdef G_OS_WIN32
00308
00309
00310
00311
00312
00313 #define G_WIN32_MSG_HANDLE 19981206
00314
00315
00316
00317
00318
00319
00320
00321 void g_io_channel_win32_make_pollfd (GIOChannel *channel,
00322 GIOCondition condition,
00323 GPollFD *fd);
00324
00325
00326
00327
00328 gint g_io_channel_win32_poll (GPollFD *fds,
00329 gint n_fds,
00330 gint timeout_);
00331
00332
00333 GIOChannel *g_io_channel_win32_new_messages (guint hwnd);
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344 GIOChannel* g_io_channel_win32_new_fd (gint fd);
00345
00346
00347 gint g_io_channel_win32_get_fd (GIOChannel *channel);
00348
00349
00350
00351
00352
00353
00354 GIOChannel *g_io_channel_win32_new_socket (gint socket);
00355
00356 #endif
00357
00358 G_END_DECLS
00359
00360 #endif