From ef8776ddea18ad5d2bf0a9d994c4cbfb6cc6f94d Mon Sep 17 00:00:00 2001 From: Chris Dickens Date: Wed, 5 Jul 2017 13:15:21 -0700 Subject: [PATCH] Misc: Ensure the 'os_priv' member of structures is pointer aligned Signed-off-by: Chris Dickens --- libusb/libusbi.h | 28 ++++++++++++++++------------ libusb/version_nano.h | 2 +- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/libusb/libusbi.h b/libusb/libusbi.h index 3ae4635..da9da28 100644 --- a/libusb/libusbi.h +++ b/libusb/libusbi.h @@ -39,6 +39,20 @@ #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 { diff --git a/libusb/version_nano.h b/libusb/version_nano.h index 90736cc..c32e2e8 100644 --- a/libusb/version_nano.h +++ b/libusb/version_nano.h @@ -1 +1 @@ -#define LIBUSB_NANO 11204 +#define LIBUSB_NANO 11205 -- 2.7.4