1 #ifndef _VBUF_H_INCLUDED_
2 #define _VBUF_H_INCLUDED_
56 #define VBUF_TO_APPL(vbuf_ptr,app_type,vbuf_member) \
57 ((app_type *) (((char *) (vbuf_ptr)) - offsetof(app_type,vbuf_member)))
62 #define VBUF_FLAG_RD_ERR (1<<0)
63 #define VBUF_FLAG_WR_ERR (1<<1)
64 #define VBUF_FLAG_ERR (VBUF_FLAG_RD_ERR | VBUF_FLAG_WR_ERR)
65 #define VBUF_FLAG_EOF (1<<2)
66 #define VBUF_FLAG_RD_TIMEOUT (1<<3)
67 #define VBUF_FLAG_WR_TIMEOUT (1<<4)
68 #define VBUF_FLAG_TIMEOUT (VBUF_FLAG_RD_TIMEOUT | VBUF_FLAG_WR_TIMEOUT)
69 #define VBUF_FLAG_BAD (VBUF_FLAG_ERR | VBUF_FLAG_EOF | VBUF_FLAG_TIMEOUT)
70 #define VBUF_FLAG_FIXED (1<<5)
72 #define vbuf_rd_error(v) ((v)->flags & (VBUF_FLAG_RD_ERR | VBUF_FLAG_RD_TIMEOUT))
73 #define vbuf_wr_error(v) ((v)->flags & (VBUF_FLAG_WR_ERR | VBUF_FLAG_WR_TIMEOUT))
74 #define vbuf_rd_timeout(v) ((v)->flags & VBUF_FLAG_RD_TIMEOUT)
75 #define vbuf_wr_timeout(v) ((v)->flags & VBUF_FLAG_WR_TIMEOUT)
77 #define vbuf_error(v) ((v)->flags & (VBUF_FLAG_ERR | VBUF_FLAG_TIMEOUT))
78 #define vbuf_eof(v) ((v)->flags & VBUF_FLAG_EOF)
79 #define vbuf_timeout(v) ((v)->flags & VBUF_FLAG_TIMEOUT)
80 #define vbuf_clearerr(v) ((v)->flags &= ~VBUF_FLAG_BAD)
85 #define VBUF_GET(v) ((v)->cnt < 0 ? ++(v)->cnt, \
86 (int) *(v)->ptr++ : vbuf_get(v))
87 #define VBUF_PUT(v,c) ((v)->cnt > 0 ? --(v)->cnt, \
88 (int) (*(v)->ptr++ = (c)) : vbuf_put((v),(c)))
89 #define VBUF_SPACE(v,n) ((v)->space((v),(n)))
int vbuf_unget(VBUF *, int)
VBUF_GET_READY_FN get_ready
int(* VBUF_PUT_READY_FN)(VBUF *)
ssize_t vbuf_read(VBUF *, void *, ssize_t)
int(* VBUF_SPACE_FN)(VBUF *, ssize_t)
int vbuf_put(VBUF *, int)
int(* VBUF_GET_READY_FN)(VBUF *)
ssize_t vbuf_write(VBUF *, const void *, ssize_t)
VBUF_PUT_READY_FN put_ready