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
00042
00043
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);
00091
00092
00093 #endif