X-Git-Url: https://git.distorted.org.uk/~mdw/secnet/blobdiff_plain/55e96f163095fc9286e0566fdaa1b1df45631fe3..d613fd78298a9911b7917c06f3ea11de45462e76:/secnet.h diff --git a/secnet.h b/secnet.h index 7d1edb0..e79352b 100644 --- a/secnet.h +++ b/secnet.h @@ -13,12 +13,15 @@ #include #include #include +#include #include #include #include #include #include +#include + #define MAX_PEER_ADDRS 5 /* send at most this many copies; honour at most that many addresses */ @@ -162,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 */ @@ -198,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.