summaryrefslogtreecommitdiff
path: root/libusb/os/openbsd_usb.c
diff options
context:
space:
mode:
authorChris Dickens <christopher.a.dickens@gmail.com>2020-02-26 15:55:10 -0800
committerChris Dickens <christopher.a.dickens@gmail.com>2020-02-26 15:55:10 -0800
commit281ca64c8ac9b9ee6ec72f2b776016aa98e964ba (patch)
tree896ad067c8c31f24adbf47a00470efe49e0f76cd /libusb/os/openbsd_usb.c
parent0e8f3997bd7b11390e9ec7b7de7eb31f403c1c83 (diff)
downloadlibusb-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.c34
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);