Add compilation option to disable struct packing.
authorPetteri Aimonen <jpa@git.mail.kapsi.fi>
Mon, 22 Dec 2014 18:52:40 +0000 (20:52 +0200)
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>
Mon, 22 Dec 2014 18:52:40 +0000 (20:52 +0200)
Update issue 136
Status: FixedInGit

docs/reference.rst
pb.h

index ccbf0a4..8018bdb 100644 (file)
@@ -24,6 +24,9 @@ __BIG_ENDIAN__                 Set this if your platform stores integers and
                                floats in big-endian format. Mixed-endian
                                systems (different layout for ints and floats)
                                are currently not supported.
+PB_NO_PACKED_STRUCTS           Disable packed structs. Increases RAM usage but
+                               is necessary on some platforms that do not
+                               support unaligned memory access.
 PB_ENABLE_MALLOC               Set this to enable dynamic allocation support
                                in the decoder.
 PB_MAX_REQUIRED_FIELDS         Maximum number of required fields to check for
diff --git a/pb.h b/pb.h
index 2582e25..b8a957a 100644 (file)
--- a/pb.h
+++ b/pb.h
  * stores the most-significant byte first. */
 /* #define __BIG_ENDIAN__ 1 */
 
+/* Define this if your CPU / compiler combination does not support
+ * unaligned memory access to packed structures. */
+/* #define PB_NO_PACKED_STRUCTS 1 */
+
 /* Increase the number of required fields that are tracked.
  * A compiler warning will tell if you need this. */
 /* #define PB_MAX_REQUIRED_FIELDS 256 */
 /* Macro for defining packed structures (compiler dependent).
  * This just reduces memory requirements, but is not required.
  */
-#if defined(__GNUC__) || defined(__clang__)
+#if defined(PB_NO_PACKED_STRUCTS)
+    /* Disable struct packing */
+#   define PB_PACKED_STRUCT_START
+#   define PB_PACKED_STRUCT_END
+#   define pb_packed
+#elif defined(__GNUC__) || defined(__clang__)
     /* For GCC and clang */
 #   define PB_PACKED_STRUCT_START
 #   define PB_PACKED_STRUCT_END