diff options
Diffstat (limited to 'libusb/os/haiku_pollfs.cpp')
-rw-r--r-- | libusb/os/haiku_pollfs.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/libusb/os/haiku_pollfs.cpp b/libusb/os/haiku_pollfs.cpp index e0c7713..cb4fda8 100644 --- a/libusb/os/haiku_pollfs.cpp +++ b/libusb/os/haiku_pollfs.cpp @@ -97,7 +97,7 @@ WatchedEntry::WatchedEntry(BMessenger *messenger, entry_ref *ref) unsigned long session_id = (unsigned long)&fDevice; usbi_mutex_lock(&active_contexts_lock); - list_for_each_entry(ctx, &active_contexts_list, list, struct libusb_context) { + for_each_context(ctx) { struct libusb_device *dev = usbi_get_device_by_session_id(ctx, session_id); if (dev) { usbi_dbg("using previously allocated device with location %lu", session_id); @@ -110,7 +110,7 @@ WatchedEntry::WatchedEntry(BMessenger *messenger, entry_ref *ref) usbi_dbg("device allocation failed"); continue; } - *((USBDevice **)dev->os_priv) = fDevice; + *((USBDevice **)usbi_get_device_priv(dev)) = fDevice; // Calculate pseudo-device-address int addr, tmp; @@ -125,9 +125,14 @@ WatchedEntry::WatchedEntry(BMessenger *messenger, entry_ref *ref) addr += tmp + 1; parent_path.GetParent(&parent_path); } - sscanf(path.Path(), "/dev/bus/usb/%d", &dev->bus_number); + sscanf(path.Path(), "/dev/bus/usb/%hhu", &dev->bus_number); dev->device_address = addr - (dev->bus_number + 1); + static_assert(sizeof(dev->device_descriptor) == sizeof(usb_device_descriptor), + "mismatch between libusb and OS device descriptor sizes"); + memcpy(&dev->device_descriptor, fDevice->Descriptor(), LIBUSB_DT_DEVICE_SIZE); + usbi_localize_device_descriptor(&dev->device_descriptor); + if (usbi_sanitize_device(dev) < 0) { usbi_dbg("device sanitization failed"); libusb_unref_device(dev); @@ -167,7 +172,7 @@ WatchedEntry::~WatchedEntry() unsigned long session_id = (unsigned long)&fDevice; usbi_mutex_lock(&active_contexts_lock); - list_for_each_entry(ctx, &active_contexts_list, list, struct libusb_context) { + for_each_context(ctx) { dev = usbi_get_device_by_session_id(ctx, session_id); if (dev != NULL) { usbi_disconnect_device(dev); |