/**
* Version of the API (for entire gnunetutil.so library).
*/
-#define GNUNET_UTIL_VERSION 0x00090000
+#define GNUNET_UTIL_VERSION 0x00090100
/**
* Named constants for return values. The following
# define GNUNET_htole64(x) (x)
# define GNUNET_be64toh(x) __bswap_64 (x)
# define GNUNET_le64toh(x) (x)
+#endif
# if __BYTE_ORDER == __BIG_ENDIAN
# define GNUNET_htobe16(x) (x)
# define GNUNET_htole16(x) __bswap_16 (x)
# define GNUNET_htole64(x) __bswap_64 (x)
# define GNUNET_be64toh(x) (x)
# define GNUNET_le64toh(x) __bswap_64 (x)
-# endif
#endif
+
/**
* gcc-ism to get packed structs.
*/
*/
#define GNUNET_UNUSED __attribute__((unused))
+#if __GNUC__ > 3
+/**
+ * gcc 4.x-ism to pack structures even on W32 (to be used before structs)
+ */
+#define GNUNET_NETWORK_STRUCT_BEGIN \
+ _Pragma("pack(push)") \
+ _Pragma("pack(1)")
+
+/**
+ * gcc 4.x-ism to pack structures even on W32 (to be used after structs)
+ */
+#define GNUNET_NETWORK_STRUCT_END _Pragma("pack(pop)")
+#else
+#ifdef MINGW
+#error gcc 4.x or higher required on W32 systems
+#endif
+/**
+ * Good luck, GNUNET_PACKED should suffice, but this won't work on W32
+ */
+#define GNUNET_NETWORK_STRUCT_BEGIN
+
+/**
+ * Good luck, GNUNET_PACKED should suffice, but this won't work on W32
+ */
+#define GNUNET_NETWORK_STRUCT_END
+#endif
/* ************************ super-general types *********************** */
+GNUNET_NETWORK_STRUCT_BEGIN
+
/**
* Header for all communications.
*/
uint16_t type GNUNET_PACKED;
};
-
+GNUNET_NETWORK_STRUCT_END
/**
* @brief 512-bit hashcode
GNUNET_HashCode;
+GNUNET_NETWORK_STRUCT_BEGIN
+
/**
* The identity of the host (basically the SHA-512 hashcode of
* it's public key).
{
GNUNET_HashCode hashPubKey GNUNET_PACKED;
};
-
+GNUNET_NETWORK_STRUCT_END
/**
* Function called with a filename.