X-Git-Url: https://git.distorted.org.uk/~mdw/secnet/blobdiff_plain/100683441c5b1445a8d6c970aea6c7fa92e974e0..45a14422b2f842667486ce171917e2d9019fdf63:/secnet.h?ds=sidebyside diff --git a/secnet.h b/secnet.h index 194341c..28aff0f 100644 --- a/secnet.h +++ b/secnet.h @@ -9,6 +9,8 @@ #include #include #include +#include +#include #include #include #include @@ -136,6 +138,9 @@ 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); +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, ...); extern uint64_t now_global; @@ -333,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. */ @@ -546,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 */