00001 #ifndef IO_BUF__COMMON__H__ 00002 #define IO_BUF__COMMON__H__ 00003 00004 #include <fcntl.h> 00005 00006 #define LF ((char)10) 00007 #define CR ((char)13) 00008 #define CRLF "\015\012" 00009 00010 struct str; 00011 00025 #define IOBUF_EOF 1 00026 00027 #define IOBUF_ERROR 2 00028 00029 #define IOBUF_TIMEOUT 4 00030 00031 #define IOBUF_BADFLAGS 0xf 00032 00033 #define IOBUF_SEEKABLE 0x10 00034 00035 #define IOBUF_NEEDSCLOSE 0x20 00036 00037 #define IOBUF_NEEDSFREE 0x40 00038 00039 #define IOBUF_NEEDSMUNMAP 0x80 00040 extern unsigned iobuf_bufsize; 00041 00048 struct iobuf 00049 { 00051 int fd; 00053 char* buffer; 00055 unsigned bufsize; 00057 unsigned buflen; 00059 unsigned bufstart; 00061 unsigned offset; 00063 unsigned timeout; 00065 unsigned flags; 00067 int errnum; 00068 }; 00069 typedef struct iobuf iobuf; 00070 00072 #define IOBUF_SET_ERROR(io) \ 00073 do{ \ 00074 io->flags |= IOBUF_ERROR; \ 00075 io->errnum = errno; \ 00076 return 0; \ 00077 }while(0) 00078 00079 int iobuf_init(iobuf* io, int fd, unsigned bufsize, char* buffer, 00080 unsigned flags); 00081 int iobuf_close(iobuf* io); 00083 #define iobuf_closed(io) ((io)->fd == -1) 00084 00085 #define iobuf_error(io) ((io)->flags & IOBUF_ERROR) 00086 00087 #define iobuf_timedout(io) ((io)->flags & IOBUF_TIMEOUT) 00088 00089 #define iobuf_bad(io) ((io)->flags & IOBUF_BADFLAGS) 00090 int iobuf_timeout(iobuf* io, int poll_out); 00095 #endif