int usbip_vhci_driver_open(void) { udev_context = udev_new(); if (!udev_context) { err("udev_new failed"); return -1; } vhci_driver = calloc(1, sizeof(struct usbip_vhci_driver)); /* will be freed in usbip_driver_close() */ vhci_driver->hc_device = udev_device_new_from_subsystem_sysname(udev_context, USBIP_VHCI_BUS_TYPE, USBIP_VHCI_DEVICE_NAME); if (!vhci_driver->hc_device) { err("udev_device_new_from_subsystem_sysname failed"); goto err; } vhci_driver->nports = get_nports(); dbg("available ports: %d", vhci_driver->nports); if (vhci_driver->nports <= 0) { err("no available ports"); goto err; } else if (vhci_driver->nports > MAXNPORT) { err("port number exceeds %d", MAXNPORT); goto err; } vhci_driver->ncontrollers = get_ncontrollers(); dbg("available controllers: %d", vhci_driver->ncontrollers); if (vhci_driver->ncontrollers <=0) { err("no available usb controllers"); goto err; } if (refresh_imported_device_list()) goto err; return 0; err: udev_device_unref(vhci_driver->hc_device); if (vhci_driver) free(vhci_driver); vhci_driver = NULL; udev_unref(udev_context); return -1; }
int usbip_vhci_driver_open(void) { int nports; struct udev_device *hc_device; udev_context = udev_new(); if (!udev_context) { err("udev_new failed"); return -1; } /* will be freed in usbip_driver_close() */ hc_device = udev_device_new_from_subsystem_sysname(udev_context, USBIP_VHCI_BUS_TYPE, USBIP_VHCI_DEVICE_NAME); if (!hc_device) { err("udev_device_new_from_subsystem_sysname failed"); goto err; } nports = get_nports(hc_device); if (nports <= 0) { err("no available ports"); goto err; } dbg("available ports: %d", nports); vhci_driver = calloc(1, sizeof(struct usbip_vhci_driver) + nports * sizeof(struct usbip_imported_device)); if (!vhci_driver) { err("vhci_driver allocation failed"); goto err; } vhci_driver->nports = nports; vhci_driver->hc_device = hc_device; vhci_driver->ncontrollers = get_ncontrollers(); dbg("available controllers: %d", vhci_driver->ncontrollers); if (vhci_driver->ncontrollers <=0) { err("no available usb controllers"); goto err; } if (refresh_imported_device_list()) goto err; return 0; err: udev_device_unref(hc_device); if (vhci_driver) free(vhci_driver); vhci_driver = NULL; udev_unref(udev_context); return -1; }