15 #if defined(__cplusplus)
26 #if defined(HAVE_STDIO_EXT_H)
27 #include <stdio_ext.h>
30 #include "ruby/config.h"
31 #if defined(HAVE_POLL)
33 # define reqevents events
34 # define rtnevents revents
43 # define RB_WAITFD_IN POLLIN
44 # define RB_WAITFD_PRI POLLPRI
45 # define RB_WAITFD_OUT POLLOUT
47 # define RB_WAITFD_IN 0x001
48 # define RB_WAITFD_PRI 0x002
49 # define RB_WAITFD_OUT 0x004
52 #if defined __GNUC__ && __GNUC__ >= 4
53 #pragma GCC visibility push(default)
101 #define HAVE_RB_IO_T 1
103 #define FMODE_READABLE 0x00000001
104 #define FMODE_WRITABLE 0x00000002
105 #define FMODE_READWRITE (FMODE_READABLE|FMODE_WRITABLE)
106 #define FMODE_BINMODE 0x00000004
107 #define FMODE_SYNC 0x00000008
108 #define FMODE_TTY 0x00000010
109 #define FMODE_DUPLEX 0x00000020
110 #define FMODE_APPEND 0x00000040
111 #define FMODE_CREATE 0x00000080
113 #define FMODE_WSPLIT 0x00000200
114 #define FMODE_WSPLIT_INITIALIZED 0x00000400
115 #define FMODE_TRUNC 0x00000800
116 #define FMODE_TEXTMODE 0x00001000
118 #define FMODE_SETENC_BY_BOM 0x00100000
120 #define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr)
122 #define RB_IO_BUFFER_INIT(buf) do {\
129 #define MakeOpenFile(obj, fp) do {\
130 if (RFILE(obj)->fptr) {\
132 rb_io_fptr_finalize(RFILE(obj)->fptr);\
133 RFILE(obj)->fptr = 0;\
137 RFILE(obj)->fptr = (fp);\
140 #define RB_IO_FPTR_NEW(fp) do {\
141 (fp) = ALLOC(rb_io_t);\
143 (fp)->stdio_file = NULL;\
149 RB_IO_BUFFER_INIT((fp)->wbuf);\
150 RB_IO_BUFFER_INIT((fp)->rbuf);\
151 RB_IO_BUFFER_INIT((fp)->cbuf);\
152 (fp)->readconv = NULL;\
153 (fp)->writeconv = NULL;\
154 (fp)->writeconv_asciicompat = Qnil;\
155 (fp)->writeconv_pre_ecflags = 0;\
156 (fp)->writeconv_pre_ecopts = Qnil;\
157 (fp)->writeconv_initialized = 0;\
158 (fp)->tied_io_for_writing = 0;\
159 (fp)->encs.enc = NULL;\
160 (fp)->encs.enc2 = NULL;\
161 (fp)->encs.ecflags = 0;\
162 (fp)->encs.ecopts = Qnil;\
163 (fp)->write_lock = 0;\
192 #define rb_io_mode_flags(modestr) rb_io_modestr_fmode(modestr)
193 #define rb_io_modenum_flags(oflags) rb_io_oflags_fmode(oflags)
202 #if defined __GNUC__ && __GNUC__ >= 4
203 #pragma GCC visibility pop
206 #if defined(__cplusplus)
void rb_io_check_readable(rb_io_t *)
void rb_io_set_nonblock(rb_io_t *fptr)
void rb_io_synchronized(rb_io_t *)
int rb_io_modestr_oflags(const char *modestr)
void rb_io_check_initialized(rb_io_t *)
ssize_t rb_io_bufwrite(VALUE io, const void *buf, size_t size)
void rb_io_check_byte_readable(rb_io_t *fptr)
int writeconv_pre_ecflags
int rb_io_modestr_fmode(const char *modestr)
int rb_io_fptr_finalize(rb_io_t *)
int writeconv_initialized
VALUE rb_io_taint_check(VALUE)
VALUE writeconv_pre_ecopts
void rb_io_read_check(rb_io_t *)
VALUE rb_io_get_write_io(VALUE io)
VALUE rb_io_check_io(VALUE io)
int rb_io_wait_writable(int)
struct rb_io_t::rb_io_enc_t encs
VALUE writeconv_asciicompat
unsigned char buf[MIME_BUF_SIZE]
int rb_io_extract_encoding_option(VALUE opt, rb_encoding **enc_p, rb_encoding **enc2_p, int *fmode_p)
VALUE rb_io_get_io(VALUE)
VALUE tied_io_for_writing
int rb_wait_for_single_fd(int fd, int events, struct timeval *tv)
int rb_io_oflags_fmode(int oflags)
int rb_io_read_pending(rb_io_t *)
void rb_io_check_char_readable(rb_io_t *fptr)
void(* finalize)(struct rb_io_t *, int)
FILE * rb_fdopen(int, const char *)
FILE * rb_io_stdio_file(rb_io_t *fptr)
void rb_io_check_writable(rb_io_t *)
VALUE rb_io_set_write_io(VALUE io, VALUE w)
int rb_io_wait_readable(int)
void rb_io_check_closed(rb_io_t *)
void rb_read_check(FILE *fp)