X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=secnet.git;a=blobdiff_plain;f=util.h;h=de1aaa51b8fd99ed0ecc8afbcc32b1ed5eae95ea;hp=a5a82a431e8eed383e24b6d55f122ac2ea779154;hb=94ca562bb14422940ff1986ce8dfca87c222cb59;hpb=c9c047dcc6d21b98144fb15f654e4d8f4f10f2de diff --git a/util.h b/util.h index a5a82a4..de1aaa5 100644 --- a/util.h +++ b/util.h @@ -23,6 +23,7 @@ extern void buffer_assert_used(struct buffer_if *buffer, cstring_t file, int line); extern void buffer_new(struct buffer_if *buffer, int32_t len); extern void buffer_init(struct buffer_if *buffer, int32_t max_start_pad); +extern void buffer_destroy(struct buffer_if *buffer); extern void buffer_copy(struct buffer_if *dst, const struct buffer_if *src); extern void *buf_append(struct buffer_if *buf, int32_t amount); extern void *buf_prepend(struct buffer_if *buf, int32_t amount); @@ -88,6 +89,21 @@ void string_item_to_iaddr(const item_t *item, uint16_t port, union iaddr *ia, const char *desc); +/* + * SBUF_DEFINE(int nbufs, size_t size); + * // Generates a number of definitions and statements organising + * // nbufs rotating char[size] buffers such that subsequent code + * // may refer to: + * char *const SBUF; + */ +#define SBUF_DEFINE(nbufs, size) \ + static int static_bufs__bufnum; \ + static char static_bufs__bufs[(nbufs)][(size)]; \ + static_bufs__bufnum++; \ + static_bufs__bufnum %= (nbufs); \ + static_bufs__bufs[static_bufs__bufnum] +#define SBUF (static_bufs__bufs[static_bufs__bufnum]) + /*----- line-buffered asynch input -----*/ enum async_linebuf_result { @@ -97,6 +113,8 @@ enum async_linebuf_result { async_linebuf_broken, }; +const char *pollbadbit(int revents); /* returns 0, or bad bit description */ + enum async_linebuf_result async_linebuf_read(struct pollfd *pfd, struct buffer_if *buf, const char **emsg_out);