Misc: Ensure the 'os_priv' member of structures is pointer aligned
authorChris Dickens <christopher.a.dickens@gmail.com>
Wed, 5 Jul 2017 20:15:21 +0000 (13:15 -0700)
committerChris Dickens <christopher.a.dickens@gmail.com>
Thu, 6 Jul 2017 21:26:46 +0000 (14:26 -0700)
Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
libusb/libusbi.h
libusb/version_nano.h

index 3ae4635..da9da28 100644 (file)
 #include "libusb.h"
 #include "version.h"
 
+/* Attribute to ensure that a structure member is aligned to a natural
+ * pointer alignment. Used for os_priv member. */
+#if defined(_MSC_VER)
+#if defined(_WIN64)
+#define PTR_ALIGNED __declspec(align(8))
+#else
+#define PTR_ALIGNED __declspec(align(4))
+#endif
+#elif defined(__GNUC__)
+#define PTR_ALIGNED __attribute__((aligned(sizeof(void *))))
+#else
+#define PTR_ALIGNED
+#endif
+
 /* Inside the libusb code, mark all public functions as follows:
  *   return_type API_EXPORTED function_name(params) { ... }
  * But if the function returns a pointer, mark it as follows:
@@ -396,12 +410,7 @@ struct libusb_device {
        struct libusb_device_descriptor device_descriptor;
        int attached;
 
-       unsigned char os_priv[ZERO_SIZED_ARRAY]
-#if defined(OS_SUNOS)
-       __attribute__ ((aligned (8)));
-#else
-       ;
-#endif
+       PTR_ALIGNED unsigned char os_priv[ZERO_SIZED_ARRAY];
 };
 
 struct libusb_device_handle {
@@ -413,12 +422,7 @@ struct libusb_device_handle {
        struct libusb_device *dev;
        int auto_detach_kernel_driver;
 
-       unsigned char os_priv[ZERO_SIZED_ARRAY]
-#if defined(OS_SUNOS)
-       __attribute__ ((aligned (8)));
-#else
-       ;
-#endif
+       PTR_ALIGNED unsigned char os_priv[ZERO_SIZED_ARRAY];
 };
 
 enum {
index 90736cc..c32e2e8 100644 (file)
@@ -1 +1 @@
-#define LIBUSB_NANO 11204
+#define LIBUSB_NANO 11205