adding crc16 to gnunet_crypto_lib.h
[oweals/gnunet.git] / src / include / gnunet_common.h
index 665697a976ed4e382dd7a0485d6be369d4eaa7f5..cecc94c9edc5787b9aee02b2ea2bf5e1d5bd97f1 100644 (file)
@@ -49,7 +49,7 @@
 /**
  * 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_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.
  */
@@ -137,7 +165,7 @@ struct GNUNET_MessageHeader
   uint16_t type GNUNET_PACKED;
 
 };
-
+GNUNET_NETWORK_STRUCT_END
 
 /**
  * @brief 512-bit hashcode
@@ -149,6 +177,8 @@ typedef struct
 GNUNET_HashCode;
 
 
+GNUNET_NETWORK_STRUCT_BEGIN
+
 /**
  * The identity of the host (basically the SHA-512 hashcode of
  * it's public key).
@@ -157,7 +187,7 @@ struct GNUNET_PeerIdentity
 {
   GNUNET_HashCode hashPubKey GNUNET_PACKED;
 };
-
+GNUNET_NETWORK_STRUCT_END
 
 /**
  * Function called with a filename.