controller link as operation
[oweals/gnunet.git] / src / include / gnunet_common.h
index e0a827911b4598a6271b4d3a8cf4eab479131018..dae3d4945aed75b348e5391d6a7bd58e940a0d69 100644 (file)
 #include <stdarg.h>
 #endif
 
+#ifdef __cplusplus
+extern "C"
+{
+#if 0                           /* keep Emacsens' auto-indent happy */
+}
+#endif
+#endif
+
 /**
  * Version of the API (for entire gnunetutil.so library).
  */
  */
 #define GNUNET_NORETURN __attribute__((noreturn))
 
+#if MINGW
 #if __GNUC__ > 3
 /**
- * gcc 4.x-ism to pack structures even on W32 (to be used before structs)
+ * gcc 4.x-ism to pack structures even on W32 (to be used before structs);
+ * Using this would cause structs to be unaligned on the stack on Sparc,
+ * so we *only* use this on W32 (see #670578 from Debian); fortunately,
+ * W32 doesn't run on sparc anyway.
  */
 #define GNUNET_NETWORK_STRUCT_BEGIN \
   _Pragma("pack(push)") \
 
 /**
  * gcc 4.x-ism to pack structures even on W32 (to be used after structs)
+ * Using this would cause structs to be unaligned on the stack on Sparc,
+ * so we *only* use this on W32 (see #670578 from Debian); fortunately,
+ * W32 doesn't run on sparc anyway.
  */
 #define GNUNET_NETWORK_STRUCT_END _Pragma("pack(pop)")
+
 #else
-#ifdef MINGW
 #error gcc 4.x or higher required on W32 systems
 #endif
+#else
 /**
- * Good luck, GNUNET_PACKED should suffice, but this won't work on W32
+ * Define as empty, 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 as empty, GNUNET_PACKED should suffice, but this won't work on W32;
  */
 #define GNUNET_NETWORK_STRUCT_END
 #endif
@@ -857,4 +873,17 @@ GNUNET_copy_message (const struct GNUNET_MessageHeader *msg);
 #endif
 #endif
 
+
+
+
+#if 0                           /* keep Emacsens' auto-indent happy */
+{
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+
+
+
 #endif /*GNUNET_COMMON_H_ */