diff --git a/libsipc/include/sipc.h b/libsipc/include/sipc.h index 0cabc3f..bf7fcee 100644 --- a/libsipc/include/sipc.h +++ b/libsipc/include/sipc.h @@ -28,7 +28,13 @@ typedef enum { #define _SI_HEADER_CHECK 0xbeefbeefabad1dealu -typedef struct { +#ifdef __GNUC__ +#define __pack __attribute__((packed)) +#else +#define __pack +#endif + +typedef struct __pack { union { si_type type; uint32_t __pad; @@ -39,7 +45,7 @@ typedef struct { uint64_t check0; uint64_t check; uint8_t data[]; -} si_message; +} si_message ; _Static_assert(sizeof(union { si_type t0; uint32_t pad;}) == sizeof(uint32_t), "packing error: sizeof(enum)!=sizeof(uint32_t)"); _Static_assert(sizeof(si_message) == (sizeof(uint32_t)*4) + (sizeof(uint64_t)*2), "packing error: bad size, header padded size != 32 bytes?");