core: Introduce accessor functions for structure private data
authorChris Dickens <christopher.a.dickens@gmail.com>
Wed, 26 Feb 2020 23:55:10 +0000 (15:55 -0800)
committerChris Dickens <christopher.a.dickens@gmail.com>
Wed, 26 Feb 2020 23:55:10 +0000 (15:55 -0800)
commit281ca64c8ac9b9ee6ec72f2b776016aa98e964ba
tree896ad067c8c31f24adbf47a00470efe49e0f76cd
parent0e8f3997bd7b11390e9ec7b7de7eb31f403c1c83
core: Introduce accessor functions for structure private data

The backend private data for the internal library structures has been
accessed through a zero-length os_priv array of type unsigned char.
This approach had two particular disadvantages:

  1) A special attribute was needed on the 'os_priv' member to ensure
     that the field was properly aligned to a natural pointer alignment.
     The support needed for this is not available in every compiler.

  2) Each access to the private data areas required an explicit cast
     from unsigned char to the type required by the backend.

This change reworks the way the private data is accessed by the
backends. New accessor functions return the private data as a void
pointer type, removing the need for an explicit cast (except for Haiku,
which is C++). The special alignment attribute trickery is also replaced
by simple pointer arithmetic.

Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
17 files changed:
libusb/core.c
libusb/io.c
libusb/libusbi.h
libusb/os/darwin_usb.c
libusb/os/haiku_pollfs.cpp
libusb/os/haiku_usb_backend.cpp
libusb/os/haiku_usb_raw.cpp
libusb/os/linux_usbfs.c
libusb/os/netbsd_usb.c
libusb/os/openbsd_usb.c
libusb/os/sunos_usb.c
libusb/os/windows_common.c
libusb/os/windows_common.h
libusb/os/windows_usbdk.c
libusb/os/windows_winusb.c
libusb/os/windows_winusb.h
libusb/version_nano.h