#ifndef LIGHTNING_COMMON_UTILS_H #define LIGHTNING_COMMON_UTILS_H #include "config.h" #include #include #include #include #include #include extern secp256k1_context *secp256k1_ctx; /* Allocate and fill in a hex-encoded string of this data. */ char *tal_hexstr(const tal_t *ctx, const void *data, size_t len); /* Allocate and fill a hex-encoding of this tal pointer. */ char *tal_hex(const tal_t *ctx, const tal_t *data); /* Allocate and fill a buffer with the data of this hex string. */ u8 *tal_hexdata(const tal_t *ctx, const void *str, size_t len); /* Helper macro to extend tal_arr and return pointer new last element. */ #if HAVE_STATEMENT_EXPR /* More efficient version calls tal_count() once */ #define tal_arr_expand(p) \ ({ size_t n = tal_count(*p); tal_resize((p), n+1); *(p) + n; }) #else #define tal_arr_expand(p) \ (tal_resize((p), tal_count(*(p))+1), (*p) + tal_count(*(p))-1) #endif /** * Remove an element from an array * * This will shift the elements past the removed element, changing * their position in memory, so only use this for arrays of pointers. */ #define tal_arr_remove(p, n) tal_arr_remove_((p), sizeof(**p), (n)) void tal_arr_remove_(void *p, size_t elemsize, size_t n); /* Use the POSIX C locale. */ void setup_locale(void); /* Global temporary convenience context: children freed in io loop core. */ extern const tal_t *tmpctx; /* Initial creation of tmpctx. */ void setup_tmpctx(void); /* Free any children of tmpctx. */ void clean_tmpctx(void); /* Define sha256_eq. */ STRUCTEQ_DEF(sha256, 0, u); /* Define ripemd160_eq. */ STRUCTEQ_DEF(ripemd160, 0, u); #endif /* LIGHTNING_COMMON_UTILS_H */