X-Git-Url: https://git.distorted.org.uk/~mdw/secnet/blobdiff_plain/6bad2cd5cbafb51279823c45ad6264b4b0958ca4..d613fd78298a9911b7917c06f3ea11de45462e76:/secnet.h diff --git a/secnet.h b/secnet.h index 629851b..e79352b 100644 --- a/secnet.h +++ b/secnet.h @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -164,6 +165,8 @@ extern uint32_t string_list_to_word(list_t *l, struct flagstr *f, extern char *safe_strdup(const char *string, const char *message); extern void *safe_malloc(size_t size, const char *message); extern void *safe_malloc_ary(size_t size, size_t count, const char *message); +extern void *safe_realloc_ary(void *p, size_t size, size_t count, + const char *message); void setcloexec(int fd); /* cannot fail */ void pipe_cloexec(int fd[2]); /* pipe(), setcloexec() twice; cannot fail */ @@ -200,6 +203,16 @@ typedef int beforepoll_fn(void *st, struct pollfd *fds, int *nfds_io, int *timeout_io); typedef void afterpoll_fn(void *st, struct pollfd *fds, int nfds); +/* void BEFOREPOLL_WANT_FDS(int want); + * Expects: int *nfds_io; + * Can perform non-local exit. + * Checks whether there is space for want fds. If so, sets *nfds_io. + * If not, sets *nfds_io and returns. */ +#define BEFOREPOLL_WANT_FDS(want) do{ \ + if (*nfds_io<(want)) { *nfds_io=(want); return ERANGE; } \ + *nfds_io=(want); \ + }while(0) + /* Register interest in the main loop of the program. Before a call to poll() your supplied beforepoll function will be called. After the call to poll() the supplied afterpoll function will be called.