X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=secnet.h;h=28aff0fda99af3c800c6c93425657332846be967;hb=027a218fa84628b1bb8af6f27ef9947d859c535d;hp=ce01d24e31749e1bb8a00db3444f1c5cb449bcab;hpb=4fb0f88d53fc60395a4a87b7a9ca1245ba033ee7;p=secnet.git diff --git a/secnet.h b/secnet.h index ce01d24..28aff0f 100644 --- a/secnet.h +++ b/secnet.h @@ -139,6 +139,7 @@ extern void *safe_malloc(size_t size, const char *message); extern void *safe_malloc_ary(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 */ extern int sys_cmd(const char *file, const char *argc, ...); @@ -337,6 +338,9 @@ typedef void comm_release_notify_fn(void *commst, void *nst, comm_notify_fn *fn); typedef bool_t comm_sendmsg_fn(void *commst, struct buffer_if *buf, const struct comm_addr *dest); + /* Only returns false if (we know that) the local network + * environment is such that this address cannot work; transient + * or unknown/unexpected failures return true. */ typedef const char *comm_addr_to_string_fn(void *commst, const struct comm_addr *ca); /* Returned string is in a static buffer. */ @@ -550,4 +554,17 @@ extern void log_from_fd(int fd, cstring_t prefix, struct log_if *log); #define FILLZERO(obj) (memset(&(obj),0,sizeof((obj)))) +/* + * void COPY_OBJ( OBJECT& dst, const OBJECT& src); + * void COPY_ARRAY(OBJECT *dst, const OBJECT *src, INTEGER count); + * // Typesafe: we check that the type OBJECT is the same in both cases. + * // It is OK to use COPY_OBJ on an array object, provided it's + * // _actually_ the whole array object and not decayed into a + * // pointer (e.g. a formal parameter). + */ +#define COPY_OBJ(dst,src) \ + (&(dst)==&(src), memcpy(&(dst),&(src),sizeof((dst)))) +#define COPY_ARRAY(dst,src,count) \ + (&(dst)[0]==&(src)[0], memcpy((dst),(src),sizeof((dst)[0])*(count))) + #endif /* secnet_h */