diff --git a/src/lceasy.c b/src/lceasy.c index 4864e0d..3445594 100644 --- a/src/lceasy.c +++ b/src/lceasy.c @@ -1593,9 +1593,11 @@ void lcurl_easy_initlib(lua_State *L, int nup){ /* Hack. We ensure that lcurl_easy_t and lcurl_hpost_stream_t compatiable for readfunction */ - LCURL_STATIC_ASSERT(offsetof(lcurl_easy_t, magic) == offsetof(lcurl_hpost_stream_t, magic)); - LCURL_STATIC_ASSERT(offsetof(lcurl_easy_t, L) == offsetof(lcurl_hpost_stream_t, L)); - LCURL_STATIC_ASSERT(offsetof(lcurl_easy_t, rd) == offsetof(lcurl_hpost_stream_t, rd)); + LCURL_ASSERT_SAME_OFFSET(lcurl_easy_t, magic, lcurl_hpost_stream_t, magic); + LCURL_ASSERT_SAME_OFFSET(lcurl_easy_t, L, lcurl_hpost_stream_t, L); + LCURL_ASSERT_SAME_OFFSET(lcurl_easy_t, rd, lcurl_hpost_stream_t, rd); + LCURL_ASSERT_SAME_OFFSET(lcurl_easy_t, rbuffer, lcurl_hpost_stream_t, rbuffer); + LCURL_ASSERT_SAME_FIELD_SIZE(lcurl_easy_t, rbuffer, lcurl_hpost_stream_t, rbuffer); if(!lutil_createmetap(L, LCURL_EASY, lcurl_easy_methods, nup)) lua_pop(L, nup); diff --git a/src/lcutils.h b/src/lcutils.h index cb6417b..d8a1187 100644 --- a/src/lcutils.h +++ b/src/lcutils.h @@ -28,8 +28,14 @@ #define LCURL_MAKE_VERSION(MIN, MAJ, PAT) ((MIN<<16) + (MAJ<<8) + PAT) #define LCURL_CURL_VER_GE(MIN, MAJ, PAT) (LIBCURL_VERSION_NUM >= LCURL_MAKE_VERSION(MIN, MAJ, PAT)) -//! @fixme on mingw32 (gcc 4.8.1) this does not work -#define LCURL_STATIC_ASSERT(A) {(void)(int(*)[(A)?1:0])0;} +//! @todo test on mingw32 (gcc 4.8.1) +#define LCURL_CONCAT_STATIC_ASSERT_IMPL_(x, y) LCURL_CONCAT1_STATIC_ASSERT_IMPL_ (x, y) +#define LCURL_CONCAT1_STATIC_ASSERT_IMPL_(x, y) x##y +#define LCURL_STATIC_ASSERT(expr) typedef char LCURL_CONCAT_STATIC_ASSERT_IMPL_(static_assert_failed_at_line_, __LINE__) [(expr) ? 1 : -1] + +#define LCURL_ASSERT_SAME_SIZE(a, b) LCURL_STATIC_ASSERT( sizeof(a) == sizeof(b) ) +#define LCURL_ASSERT_SAME_OFFSET(a, am, b, bm) LCURL_STATIC_ASSERT( (offsetof(a,am)) == (offsetof(b,bm)) ) +#define LCURL_ASSERT_SAME_FIELD_SIZE(a, am, b, bm) LCURL_ASSERT_SAME_SIZE(((a*)0)->am, ((b*)0)->bm) typedef struct lcurl_const_tag{ const char *name;