X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=util.h;h=de1aaa51b8fd99ed0ecc8afbcc32b1ed5eae95ea;hb=94ca562bb14422940ff1986ce8dfca87c222cb59;hp=3549eb0fa251853c28f5c3aac1cdcd184c9ce180;hpb=46d06c3918b0080af7e87db986612e23bde4a341;p=secnet.git diff --git a/util.h b/util.h index 3549eb0..de1aaa5 100644 --- a/util.h +++ b/util.h @@ -89,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 { @@ -98,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);