diff options
author | Chris Dickens <christopher.a.dickens@gmail.com> | 2020-02-26 15:55:10 -0800 |
---|---|---|
committer | Chris Dickens <christopher.a.dickens@gmail.com> | 2020-02-26 15:55:10 -0800 |
commit | 281ca64c8ac9b9ee6ec72f2b776016aa98e964ba (patch) | |
tree | 896ad067c8c31f24adbf47a00470efe49e0f76cd /libusb/os/openbsd_usb.c | |
parent | 0e8f3997bd7b11390e9ec7b7de7eb31f403c1c83 (diff) | |
download | libusb-281ca64c8ac9b9ee6ec72f2b776016aa98e964ba.tar.gz |
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>
Diffstat (limited to 'libusb/os/openbsd_usb.c')
-rw-r--r-- | libusb/os/openbsd_usb.c | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/libusb/os/openbsd_usb.c b/libusb/os/openbsd_usb.c index 508d283..4788267 100644 --- a/libusb/os/openbsd_usb.c +++ b/libusb/os/openbsd_usb.c @@ -183,7 +183,7 @@ obsd_get_device_list(struct libusb_context * ctx, dev->device_address = di.udi_addr; dev->speed = di.udi_speed; - dpriv = (struct device_priv *)dev->os_priv; + dpriv = usbi_get_device_priv(dev); dpriv->fd = -1; dpriv->cdesc = NULL; dpriv->devname = udevname; @@ -227,7 +227,7 @@ obsd_get_device_list(struct libusb_context * ctx, int obsd_open(struct libusb_device_handle *handle) { - struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv; + struct device_priv *dpriv = usbi_get_device_priv(handle->dev); char devnode[16]; if (dpriv->devname) { @@ -250,7 +250,7 @@ obsd_open(struct libusb_device_handle *handle) void obsd_close(struct libusb_device_handle *handle) { - struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv; + struct device_priv *dpriv = usbi_get_device_priv(handle->dev); if (dpriv->devname) { usbi_dbg("close: fd %d", dpriv->fd); @@ -264,7 +264,7 @@ int obsd_get_device_descriptor(struct libusb_device *dev, unsigned char *buf, int *host_endian) { - struct device_priv *dpriv = (struct device_priv *)dev->os_priv; + struct device_priv *dpriv = usbi_get_device_priv(dev); usbi_dbg(" "); @@ -279,7 +279,7 @@ int obsd_get_active_config_descriptor(struct libusb_device *dev, unsigned char *buf, size_t len, int *host_endian) { - struct device_priv *dpriv = (struct device_priv *)dev->os_priv; + struct device_priv *dpriv = usbi_get_device_priv(dev); usb_config_descriptor_t *ucd = (usb_config_descriptor_t *)dpriv->cdesc; len = MIN(len, UGETW(ucd->wTotalLength)); @@ -326,7 +326,7 @@ obsd_get_config_descriptor(struct libusb_device *dev, uint8_t idx, int obsd_get_configuration(struct libusb_device_handle *handle, int *config) { - struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv; + struct device_priv *dpriv = usbi_get_device_priv(handle->dev); usb_config_descriptor_t *ucd = (usb_config_descriptor_t *)dpriv->cdesc; *config = ucd->bConfigurationValue; @@ -339,7 +339,7 @@ obsd_get_configuration(struct libusb_device_handle *handle, int *config) int obsd_set_configuration(struct libusb_device_handle *handle, int config) { - struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv; + struct device_priv *dpriv = usbi_get_device_priv(handle->dev); if (dpriv->devname == NULL) return (LIBUSB_ERROR_NOT_SUPPORTED); @@ -355,7 +355,7 @@ obsd_set_configuration(struct libusb_device_handle *handle, int config) int obsd_claim_interface(struct libusb_device_handle *handle, int iface) { - struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv; + struct handle_priv *hpriv = usbi_get_device_handle_priv(handle); int i; for (i = 0; i < USB_MAX_ENDPOINTS; i++) @@ -367,7 +367,7 @@ obsd_claim_interface(struct libusb_device_handle *handle, int iface) int obsd_release_interface(struct libusb_device_handle *handle, int iface) { - struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv; + struct handle_priv *hpriv = usbi_get_device_handle_priv(handle); int i; for (i = 0; i < USB_MAX_ENDPOINTS; i++) @@ -381,7 +381,7 @@ int obsd_set_interface_altsetting(struct libusb_device_handle *handle, int iface, int altsetting) { - struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv; + struct device_priv *dpriv = usbi_get_device_priv(handle->dev); struct usb_alt_interface intf; if (dpriv->devname == NULL) @@ -439,7 +439,7 @@ obsd_reset_device(struct libusb_device_handle *handle) void obsd_destroy_device(struct libusb_device *dev) { - struct device_priv *dpriv = (struct device_priv *)dev->os_priv; + struct device_priv *dpriv = usbi_get_device_priv(dev); usbi_dbg(" "); @@ -457,7 +457,7 @@ obsd_submit_transfer(struct usbi_transfer *itransfer) usbi_dbg(" "); transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - hpriv = (struct handle_priv *)transfer->dev_handle->os_priv; + hpriv = usbi_get_device_handle_priv(transfer->dev_handle); switch (transfer->type) { case LIBUSB_TRANSFER_TYPE_CONTROL: @@ -543,7 +543,7 @@ _errno_to_libusb(int err) int _cache_active_config_descriptor(struct libusb_device *dev) { - struct device_priv *dpriv = (struct device_priv *)dev->os_priv; + struct device_priv *dpriv = usbi_get_device_priv(dev); struct usb_device_cdesc udc; struct usb_device_fdesc udf; unsigned char* buf; @@ -602,7 +602,7 @@ _sync_control_transfer(struct usbi_transfer *itransfer) struct usb_ctl_request req; transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - dpriv = (struct device_priv *)transfer->dev_handle->dev->os_priv; + dpriv = usbi_get_device_priv(transfer->dev_handle->dev); setup = (struct libusb_control_setup *)transfer->buffer; usbi_dbg("type %x request %x value %x index %d length %d timeout %d", @@ -664,8 +664,8 @@ _access_endpoint(struct libusb_transfer *transfer) int fd, endpt; mode_t mode; - hpriv = (struct handle_priv *)transfer->dev_handle->os_priv; - dpriv = (struct device_priv *)transfer->dev_handle->dev->os_priv; + hpriv = usbi_get_device_handle_priv(transfer->dev_handle); + dpriv = usbi_get_device_priv(transfer->dev_handle->dev); endpt = UE_GET_ADDR(transfer->endpoint); mode = IS_XFERIN(transfer) ? O_RDONLY : O_WRONLY; @@ -696,7 +696,7 @@ _sync_gen_transfer(struct usbi_transfer *itransfer) int fd, nr = 1; transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - dpriv = (struct device_priv *)transfer->dev_handle->dev->os_priv; + dpriv = usbi_get_device_priv(transfer->dev_handle->dev); if (dpriv->devname == NULL) return (LIBUSB_ERROR_NOT_SUPPORTED); |