Misc: Cleanup across multiple backends

Remove the clear_transfer_priv() function from all backends besides
Linux. This function is only needed if the backend calls
usbi_handle_disconnect(), which only Linux does.

Remove the {attach,detach}_kernel_driver() functions from the Darwin
backend. They return LIBUSB_ERROR_NOT_SUPPORTED, but the same result is
achieved by having those functions be NULL.

Remove the init() and exit() functions from the SunOS backend. They are
optional and as no-ops are pointless.

Remove NULL and 0 initializers from usbi_backend structures.

Use named initializers in the NetBSD backend.

Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
diff --git a/libusb/os/darwin_usb.c b/libusb/os/darwin_usb.c
index 75ab2be..805ec07 100644
--- a/libusb/os/darwin_usb.c
+++ b/libusb/os/darwin_usb.c
@@ -1715,19 +1715,6 @@
   return 0;
 }
 
-/* attaching/detaching kernel drivers is not currently supported (maybe in the future?) */
-static int darwin_attach_kernel_driver (struct libusb_device_handle *dev_handle, int interface) {
-  UNUSED(dev_handle);
-  UNUSED(interface);
-  return LIBUSB_ERROR_NOT_SUPPORTED;
-}
-
-static int darwin_detach_kernel_driver (struct libusb_device_handle *dev_handle, int interface) {
-  UNUSED(dev_handle);
-  UNUSED(interface);
-  return LIBUSB_ERROR_NOT_SUPPORTED;
-}
-
 static void darwin_destroy_device(struct libusb_device *dev) {
   struct darwin_device_priv *dpriv = (struct darwin_device_priv *) dev->os_priv;
 
@@ -2058,16 +2045,6 @@
   }
 }
 
-static void darwin_clear_transfer_priv (struct usbi_transfer *itransfer) {
-  struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
-  struct darwin_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer);
-
-  if (transfer->type == LIBUSB_TRANSFER_TYPE_ISOCHRONOUS && tpriv->isoc_framelist) {
-    free (tpriv->isoc_framelist);
-    tpriv->isoc_framelist = NULL;
-  }
-}
-
 static void darwin_async_io_callback (void *refcon, IOReturn result, void *arg0) {
   struct usbi_transfer *itransfer = (struct usbi_transfer *)refcon;
   struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer);
@@ -2252,7 +2229,6 @@
         .caps = 0,
         .init = darwin_init,
         .exit = darwin_exit,
-        .get_device_list = NULL, /* not needed */
         .get_device_descriptor = darwin_get_device_descriptor,
         .get_active_config_descriptor = darwin_get_active_config_descriptor,
         .get_config_descriptor = darwin_get_config_descriptor,
@@ -2275,14 +2251,11 @@
 #endif
 
         .kernel_driver_active = darwin_kernel_driver_active,
-        .detach_kernel_driver = darwin_detach_kernel_driver,
-        .attach_kernel_driver = darwin_attach_kernel_driver,
 
         .destroy_device = darwin_destroy_device,
 
         .submit_transfer = darwin_submit_transfer,
         .cancel_transfer = darwin_cancel_transfer,
-        .clear_transfer_priv = darwin_clear_transfer_priv,
 
         .handle_transfer_completion = darwin_handle_transfer_completion,
 
diff --git a/libusb/os/haiku_usb_raw.cpp b/libusb/os/haiku_usb_raw.cpp
index 67b270d..82cf088 100644
--- a/libusb/os/haiku_usb_raw.cpp
+++ b/libusb/os/haiku_usb_raw.cpp
@@ -165,14 +165,6 @@
 	return fDeviceHandle->CancelTransfer(*((USBTransfer **)usbi_transfer_get_os_priv(itransfer)));
 }
 
-static void
-haiku_clear_transfer_priv(struct usbi_transfer *itransfer)
-{
-	USBTransfer *transfer = *((USBTransfer **)usbi_transfer_get_os_priv(itransfer));
-	delete transfer;
-	*((USBTransfer **)usbi_transfer_get_os_priv(itransfer)) = NULL;
-}
-
 static int
 haiku_handle_transfer_completion(struct usbi_transfer *itransfer)
 {
@@ -214,20 +206,15 @@
 	.caps = 0,
 	.init = haiku_init,
 	.exit = haiku_exit,
-	.set_option = NULL,
-	.get_device_list = NULL,
-	.hotplug_poll = NULL,
-	.wrap_sys_device = NULL,
 	.open = haiku_open,
 	.close = haiku_close,
+
 	.get_device_descriptor = haiku_get_device_descriptor,
 	.get_active_config_descriptor = haiku_get_active_config_descriptor,
 	.get_config_descriptor = haiku_get_config_descriptor,
-	.get_config_descriptor_by_value = NULL,
 
-
-	.get_configuration = NULL,
 	.set_configuration = haiku_set_configuration,
+
 	.claim_interface = haiku_claim_interface,
 	.release_interface = haiku_release_interface,
 
@@ -235,32 +222,13 @@
 	.clear_halt = haiku_clear_halt,
 	.reset_device = haiku_reset_device,
 
-	.alloc_streams = NULL,
-	.free_streams = NULL,
-
-	.dev_mem_alloc = NULL,
-	.dev_mem_free = NULL,
-
-	.kernel_driver_active = NULL,
-	.detach_kernel_driver = NULL,
-	.attach_kernel_driver = NULL,
-
-	.destroy_device = NULL,
-
 	.submit_transfer = haiku_submit_transfer,
 	.cancel_transfer = haiku_cancel_transfer,
-	.clear_transfer_priv = haiku_clear_transfer_priv,
 
-	.handle_events = NULL,
 	.handle_transfer_completion = haiku_handle_transfer_completion,
 
 	.clock_gettime = haiku_clock_gettime,
 
-#ifdef USBI_TIMERFD_AVAILABLE
-	.get_timerfd_clockid = NULL,
-#endif
-
-	.context_priv_size = 0,
 	.device_priv_size = sizeof(USBDevice *),
 	.device_handle_priv_size = sizeof(USBDeviceHandle *),
 	.transfer_priv_size = sizeof(USBTransfer *),
diff --git a/libusb/os/linux_usbfs.c b/libusb/os/linux_usbfs.c
index f16907b..1b73fde 100644
--- a/libusb/os/linux_usbfs.c
+++ b/libusb/os/linux_usbfs.c
@@ -2852,7 +2852,6 @@
 	.caps = USBI_CAP_HAS_HID_ACCESS|USBI_CAP_SUPPORTS_DETACH_KERNEL_DRIVER,
 	.init = op_init,
 	.exit = op_exit,
-	.get_device_list = NULL,
 	.hotplug_poll = op_hotplug_poll,
 	.get_device_descriptor = op_get_device_descriptor,
 	.get_active_config_descriptor = op_get_active_config_descriptor,
diff --git a/libusb/os/netbsd_usb.c b/libusb/os/netbsd_usb.c
index 79aeca9..16e07f2 100644
--- a/libusb/os/netbsd_usb.c
+++ b/libusb/os/netbsd_usb.c
@@ -73,7 +73,6 @@
 
 static int netbsd_submit_transfer(struct usbi_transfer *);
 static int netbsd_cancel_transfer(struct usbi_transfer *);
-static void netbsd_clear_transfer_priv(struct usbi_transfer *);
 static int netbsd_handle_transfer_completion(struct usbi_transfer *);
 static int netbsd_clock_gettime(int, struct timespec *);
 
@@ -87,55 +86,37 @@
 static int _access_endpoint(struct libusb_transfer *);
 
 const struct usbi_os_backend usbi_backend = {
-	"Synchronous NetBSD backend",
-	0,
-	NULL,				/* init() */
-	NULL,				/* exit() */
-	NULL,				/* set_option() */
-	netbsd_get_device_list,
-	NULL,				/* hotplug_poll */
-	netbsd_open,
-	netbsd_close,
+	.name = "Synchronous NetBSD backend",
+	.caps = 0,
+	.get_device_list = netbsd_get_device_list,
+	.open = netbsd_open,
+	.close = netbsd_close,
 
-	netbsd_get_device_descriptor,
-	netbsd_get_active_config_descriptor,
-	netbsd_get_config_descriptor,
-	NULL,				/* get_config_descriptor_by_value() */
+	.get_device_descriptor = netbsd_get_device_descriptor,
+	.get_active_config_descriptor = netbsd_get_active_config_descriptor,
+	.get_config_descriptor = netbsd_get_config_descriptor,
 
-	netbsd_get_configuration,
-	netbsd_set_configuration,
+	.get_configuration = netbsd_get_configuration,
+	.set_configuration = netbsd_set_configuration,
 
-	netbsd_claim_interface,
-	netbsd_release_interface,
+	.claim_interface = netbsd_claim_interface,
+	.release_interface = netbsd_release_interface,
 
-	netbsd_set_interface_altsetting,
-	netbsd_clear_halt,
-	netbsd_reset_device,
+	.set_interface_altsetting = netbsd_set_interface_altsetting,
+	.clear_halt = netbsd_clear_halt,
+	.reset_device = netbsd_reset_device,
 
-	NULL,				/* alloc_streams */
-	NULL,				/* free_streams */
+	.destroy_device = netbsd_destroy_device,
 
-	NULL,				/* dev_mem_alloc() */
-	NULL,				/* dev_mem_free() */
+	.submit_transfer = netbsd_submit_transfer,
+	.cancel_transfer = netbsd_cancel_transfer,
 
-	NULL,				/* kernel_driver_active() */
-	NULL,				/* detach_kernel_driver() */
-	NULL,				/* attach_kernel_driver() */
+	.handle_transfer_completion = netbsd_handle_transfer_completion,
 
-	netbsd_destroy_device,
+	.clock_gettime = netbsd_clock_gettime,
 
-	netbsd_submit_transfer,
-	netbsd_cancel_transfer,
-	netbsd_clear_transfer_priv,
-
-	NULL,				/* handle_events() */
-	netbsd_handle_transfer_completion,
-
-	netbsd_clock_gettime,
-	0,				/* context_priv_size */
-	sizeof(struct device_priv),
-	sizeof(struct handle_priv),
-	0,				/* transfer_priv_size */
+	.device_priv_size = sizeof(struct device_priv),
+	.device_handle_priv_size = sizeof(struct handle_priv),
 };
 
 int
@@ -481,14 +462,6 @@
 	return (LIBUSB_ERROR_NOT_SUPPORTED);
 }
 
-void
-netbsd_clear_transfer_priv(struct usbi_transfer *itransfer)
-{
-	usbi_dbg("");
-
-	/* Nothing to do */
-}
-
 int
 netbsd_handle_transfer_completion(struct usbi_transfer *itransfer)
 {
diff --git a/libusb/os/null_usb.c b/libusb/os/null_usb.c
index 97fa0b8..c050322 100644
--- a/libusb/os/null_usb.c
+++ b/libusb/os/null_usb.c
@@ -106,17 +106,6 @@
 	return LIBUSB_ERROR_NOT_SUPPORTED;
 }
 
-static void
-null_clear_transfer_priv(struct usbi_transfer *itransfer)
-{
-}
-
-static int
-null_handle_transfer_completion(struct usbi_transfer *itransfer)
-{
-	return LIBUSB_ERROR_NOT_SUPPORTED;
-}
-
 static int
 null_clock_gettime(int clkid, struct timespec *tp)
 {
@@ -133,44 +122,19 @@
 const struct usbi_os_backend usbi_backend = {
 	.name = "Null backend",
 	.caps = 0,
-	.init = NULL,
-	.exit = NULL,
-	.set_option = NULL,
 	.get_device_list = null_get_device_list,
-	.hotplug_poll = NULL,
-	.wrap_sys_device = NULL,
 	.open = null_open,
 	.close = null_close,
 	.get_device_descriptor = null_get_device_descriptor,
 	.get_active_config_descriptor = null_get_active_config_descriptor,
 	.get_config_descriptor = null_get_config_descriptor,
-	.get_config_descriptor_by_value = NULL,
-	.get_configuration = NULL,
 	.set_configuration = null_set_configuration,
 	.claim_interface = null_claim_interface,
 	.release_interface = null_release_interface,
 	.set_interface_altsetting = null_set_interface_altsetting,
 	.clear_halt = null_clear_halt,
 	.reset_device = null_reset_device,
-	.alloc_streams = NULL,
-	.free_streams = NULL,
-	.dev_mem_alloc = NULL,
-	.dev_mem_free = NULL,
-	.kernel_driver_active = NULL,
-	.detach_kernel_driver = NULL,
-	.attach_kernel_driver = NULL,
-	.destroy_device = NULL,
 	.submit_transfer = null_submit_transfer,
 	.cancel_transfer = null_cancel_transfer,
-	.clear_transfer_priv = null_clear_transfer_priv,
-	.handle_events = NULL,
-	.handle_transfer_completion = null_handle_transfer_completion,
 	.clock_gettime = null_clock_gettime,
-#ifdef USBI_TIMERFD_AVAILABLE
-	.get_timerfd_clockid = NULL,
-#endif
-	.context_priv_size = 0,
-	.device_priv_size = 0,
-	.device_handle_priv_size = 0,
-	.transfer_priv_size = 0,
 };
diff --git a/libusb/os/openbsd_usb.c b/libusb/os/openbsd_usb.c
index 74d2c0f..ed4d3f2 100644
--- a/libusb/os/openbsd_usb.c
+++ b/libusb/os/openbsd_usb.c
@@ -73,7 +73,6 @@
 
 static int obsd_submit_transfer(struct usbi_transfer *);
 static int obsd_cancel_transfer(struct usbi_transfer *);
-static void obsd_clear_transfer_priv(struct usbi_transfer *);
 static int obsd_handle_transfer_completion(struct usbi_transfer *);
 static int obsd_clock_gettime(int, struct timespec *);
 
@@ -112,11 +111,11 @@
 
 	.submit_transfer = obsd_submit_transfer,
 	.cancel_transfer = obsd_cancel_transfer,
-	.clear_transfer_priv = obsd_clear_transfer_priv,
 
 	.handle_transfer_completion = obsd_handle_transfer_completion,
 
 	.clock_gettime = obsd_clock_gettime,
+
 	.device_priv_size = sizeof(struct device_priv),
 	.device_handle_priv_size = sizeof(struct handle_priv),
 };
@@ -502,14 +501,6 @@
 	return (LIBUSB_ERROR_NOT_SUPPORTED);
 }
 
-void
-obsd_clear_transfer_priv(struct usbi_transfer *itransfer)
-{
-	usbi_dbg("");
-
-	/* Nothing to do */
-}
-
 int
 obsd_handle_transfer_completion(struct usbi_transfer *itransfer)
 {
diff --git a/libusb/os/sunos_usb.c b/libusb/os/sunos_usb.c
index 6960033..20aefe8 100644
--- a/libusb/os/sunos_usb.c
+++ b/libusb/os/sunos_usb.c
@@ -79,7 +79,6 @@
 static void sunos_destroy_device(struct libusb_device *);
 static int sunos_submit_transfer(struct usbi_transfer *);
 static int sunos_cancel_transfer(struct usbi_transfer *);
-static void sunos_clear_transfer_priv(struct usbi_transfer *);
 static int sunos_handle_transfer_completion(struct usbi_transfer *);
 static int sunos_clock_gettime(int, struct timespec *);
 static int sunos_kernel_driver_active(struct libusb_device_handle *, int interface);
@@ -245,16 +244,6 @@
 static int _errno_to_libusb(int);
 static int sunos_usb_get_status(int fd);
 
-static int sunos_init(struct libusb_context *ctx)
-{
-	return (LIBUSB_SUCCESS);
-}
-
-static void sunos_exit(struct libusb_context *ctx)
-{
-	usbi_dbg("");
-}
-
 static string_list_t *
 sunos_new_string_list(void)
 {
@@ -1511,14 +1500,6 @@
 	return (ret);
 }
 
-void
-sunos_clear_transfer_priv(struct usbi_transfer *itransfer)
-{
-	usbi_dbg("");
-
-	/* Nothing to do */
-}
-
 int
 sunos_handle_transfer_completion(struct usbi_transfer *itransfer)
 {
@@ -1670,33 +1651,25 @@
 const struct usbi_os_backend usbi_backend = {
         .name = "Solaris",
         .caps = 0,
-        .init = sunos_init,
-        .exit = sunos_exit,
         .get_device_list = sunos_get_device_list,
         .get_device_descriptor = sunos_get_device_descriptor,
         .get_active_config_descriptor = sunos_get_active_config_descriptor,
         .get_config_descriptor = sunos_get_config_descriptor,
-        .hotplug_poll = NULL,
         .open = sunos_open,
         .close = sunos_close,
         .get_configuration = sunos_get_configuration,
         .set_configuration = sunos_set_configuration,
-
         .claim_interface = sunos_claim_interface,
         .release_interface = sunos_release_interface,
         .set_interface_altsetting = sunos_set_interface_altsetting,
         .clear_halt = sunos_clear_halt,
         .reset_device = sunos_reset_device, /* TODO */
-        .alloc_streams = NULL,
-        .free_streams = NULL,
         .kernel_driver_active = sunos_kernel_driver_active,
         .detach_kernel_driver = sunos_detach_kernel_driver,
         .attach_kernel_driver = sunos_attach_kernel_driver,
         .destroy_device = sunos_destroy_device,
         .submit_transfer = sunos_submit_transfer,
         .cancel_transfer = sunos_cancel_transfer,
-	.handle_events = NULL,
-        .clear_transfer_priv = sunos_clear_transfer_priv,
         .handle_transfer_completion = sunos_handle_transfer_completion,
         .clock_gettime = sunos_clock_gettime,
 #ifdef USBI_TIMERFD_AVAILABLE
diff --git a/libusb/os/windows_common.c b/libusb/os/windows_common.c
index 6704cb0..a8ee237 100644
--- a/libusb/os/windows_common.c
+++ b/libusb/os/windows_common.c
@@ -678,12 +678,6 @@
 	return priv->backend->cancel_transfer(itransfer);
 }
 
-static void windows_clear_transfer_priv(struct usbi_transfer *itransfer)
-{
-	struct windows_context_priv *priv = _context_priv(ITRANSFER_CTX(itransfer));
-	priv->backend->clear_transfer_priv(itransfer);
-}
-
 static int windows_handle_events(struct libusb_context *ctx, struct pollfd *fds, POLL_NFDS_TYPE nfds, int num_ready)
 {
 	struct windows_context_priv *priv = _context_priv(ctx);
@@ -810,7 +804,7 @@
 	windows_destroy_device,
 	windows_submit_transfer,
 	windows_cancel_transfer,
-	windows_clear_transfer_priv,
+	NULL,	/* clear_transfer_priv */
 	windows_handle_events,
 	NULL,	/* handle_transfer_completion */
 	windows_clock_gettime,
diff --git a/libusb/version_nano.h b/libusb/version_nano.h
index 6cb695c..519fe4a 100644
--- a/libusb/version_nano.h
+++ b/libusb/version_nano.h
@@ -1 +1 @@
-#define LIBUSB_NANO 11441
+#define LIBUSB_NANO 11442