#ifndef __BUFFER_H__ #define __BUFFER_H__ #include #include #include #include #include "compat.h" #include "str.h" #include "auxlib.h" struct poller; struct streambuf_funcs { ssize_t (*write)(void *, const void *, size_t); ssize_t (*read)(void *, void *, size_t); }; struct streambuf { mutex_t lock; GString *buf; void *fd_ptr; struct poller *poller; time_t active; int eof; const struct streambuf_funcs *funcs; }; struct streambuf *streambuf_new(struct poller *, int); struct streambuf *streambuf_new_ptr(struct poller *, void *, const struct streambuf_funcs *); void streambuf_destroy(struct streambuf *); int streambuf_writeable(struct streambuf *); int streambuf_readable(struct streambuf *); char *streambuf_getline(struct streambuf *); unsigned int streambuf_bufsize(struct streambuf *); void streambuf_printf(struct streambuf *, const char *, ...) __attribute__ ((format (printf, 2, 3))); void streambuf_vprintf(struct streambuf *, const char *, va_list); void streambuf_write(struct streambuf *, const char *, unsigned int); INLINE void streambuf_write_str(struct streambuf *b, str *s) { streambuf_write(b, s->s, s->len); } #endif