[libvirt] [PATCH 1/4] vbox: cleanup vboxAttachUSB
Laine Stump
laine at laine.org
Mon Nov 25 11:26:14 UTC 2013
On 11/21/2013 04:41 PM, Ryota Ozaki wrote:
> This cleanup flattens deeply nested code.
>
> Signed-off-by: Ryota Ozaki <ozaki.ryota at gmail.com>
ACK and pushed. Fairly mechanical. (Still concerned by the lack of error
checking, but that is a pre-existing problem...)
> ---
> src/vbox/vbox_tmpl.c | 153 ++++++++++++++++++++++++++-------------------------
> 1 file changed, 79 insertions(+), 74 deletions(-)
>
> diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
> index 942570f..67dd23a 100644
> --- a/src/vbox/vbox_tmpl.c
> +++ b/src/vbox/vbox_tmpl.c
> @@ -4852,94 +4852,99 @@ vboxAttachUSB(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
> * usual
> */
> for (i = 0; i < def->nhostdevs; i++) {
> - if (def->hostdevs[i]->mode ==
> - VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) {
> - if (def->hostdevs[i]->source.subsys.type ==
> - VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB) {
> - if (def->hostdevs[i]->source.subsys.u.usb.vendor ||
> - def->hostdevs[i]->source.subsys.u.usb.product) {
> - VIR_DEBUG("USB Device detected, VendorId:0x%x, ProductId:0x%x",
> - def->hostdevs[i]->source.subsys.u.usb.vendor,
> - def->hostdevs[i]->source.subsys.u.usb.product);
> - isUSB = true;
> - break;
> - }
> - }
> - }
> + if (def->hostdevs[i]->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS)
> + continue;
> +
> + if (def->hostdevs[i]->source.subsys.type !=
> + VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB)
> + continue;
> +
> + if (!def->hostdevs[i]->source.subsys.u.usb.vendor &&
> + !def->hostdevs[i]->source.subsys.u.usb.product)
> + continue;
> +
> + VIR_DEBUG("USB Device detected, VendorId:0x%x, ProductId:0x%x",
> + def->hostdevs[i]->source.subsys.u.usb.vendor,
> + def->hostdevs[i]->source.subsys.u.usb.product);
> + isUSB = true;
> + break;
> }
>
> - if (isUSB) {
> - /* First Start the USB Controller and then loop
> - * to attach USB Devices to it
> - */
> - machine->vtbl->GetUSBController(machine, &USBController);
> - if (USBController) {
> - USBController->vtbl->SetEnabled(USBController, 1);
> + if (!isUSB)
> + return;
> +
> + /* First Start the USB Controller and then loop
> + * to attach USB Devices to it
> + */
> + machine->vtbl->GetUSBController(machine, &USBController);
> +
> + if (!USBController)
> + return;
> +
> + USBController->vtbl->SetEnabled(USBController, 1);
> #if VBOX_API_VERSION < 4002
> - USBController->vtbl->SetEnabledEhci(USBController, 1);
> + USBController->vtbl->SetEnabledEhci(USBController, 1);
> #else
> - USBController->vtbl->SetEnabledEHCI(USBController, 1);
> + USBController->vtbl->SetEnabledEHCI(USBController, 1);
> #endif
>
> - for (i = 0; i < def->nhostdevs; i++) {
> - if (def->hostdevs[i]->mode ==
> - VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) {
> - if (def->hostdevs[i]->source.subsys.type ==
> - VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB) {
> + for (i = 0; i < def->nhostdevs; i++) {
> + char *filtername = NULL;
> + PRUnichar *filternameUtf16 = NULL;
> + IUSBDeviceFilter *filter = NULL;
> + PRUnichar *vendorIdUtf16 = NULL;
> + char vendorId[40] = {0};
> + PRUnichar *productIdUtf16 = NULL;
> + char productId[40] = {0};
>
> - char *filtername = NULL;
> - PRUnichar *filternameUtf16 = NULL;
> - IUSBDeviceFilter *filter = NULL;
> + if (def->hostdevs[i]->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS)
> + continue;
>
> - /* Zero pad for nice alignment when fewer than 9999
> - * devices.
> - */
> - if (virAsprintf(&filtername, "filter%04zu", i) >= 0) {
> - VBOX_UTF8_TO_UTF16(filtername, &filternameUtf16);
> - VIR_FREE(filtername);
> - USBController->vtbl->CreateDeviceFilter(USBController,
> - filternameUtf16,
> - &filter);
> - }
> - VBOX_UTF16_FREE(filternameUtf16);
> + if (def->hostdevs[i]->source.subsys.type !=
> + VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB)
> + continue;
>
> - if (filter &&
> - (def->hostdevs[i]->source.subsys.u.usb.vendor ||
> - def->hostdevs[i]->source.subsys.u.usb.product)) {
> + /* Zero pad for nice alignment when fewer than 9999
> + * devices.
> + */
> + if (virAsprintf(&filtername, "filter%04zu", i) >= 0) {
> + VBOX_UTF8_TO_UTF16(filtername, &filternameUtf16);
> + VIR_FREE(filtername);
> + USBController->vtbl->CreateDeviceFilter(USBController,
> + filternameUtf16,
> + &filter);
> + }
> + VBOX_UTF16_FREE(filternameUtf16);
>
> - PRUnichar *vendorIdUtf16 = NULL;
> - char vendorId[40] = {0};
> - PRUnichar *productIdUtf16 = NULL;
> - char productId[40] = {0};
> + if (!filter)
> + continue;
>
> - if (def->hostdevs[i]->source.subsys.u.usb.vendor) {
> - snprintf(vendorId, sizeof(vendorId), "%x",
> - def->hostdevs[i]->source.subsys.u.usb.vendor);
> - VBOX_UTF8_TO_UTF16(vendorId, &vendorIdUtf16);
> - filter->vtbl->SetVendorId(filter, vendorIdUtf16);
> - VBOX_UTF16_FREE(vendorIdUtf16);
> - }
> - if (def->hostdevs[i]->source.subsys.u.usb.product) {
> - snprintf(productId, sizeof(productId), "%x",
> - def->hostdevs[i]->source.subsys.u.usb.product);
> - VBOX_UTF8_TO_UTF16(productId, &productIdUtf16);
> - filter->vtbl->SetProductId(filter,
> - productIdUtf16);
> - VBOX_UTF16_FREE(productIdUtf16);
> - }
> - filter->vtbl->SetActive(filter, 1);
> - USBController->vtbl->InsertDeviceFilter(USBController,
> - i,
> - filter);
> - VBOX_RELEASE(filter);
> - }
> + if (!def->hostdevs[i]->source.subsys.u.usb.vendor &&
> + !def->hostdevs[i]->source.subsys.u.usb.product)
> + continue;
>
> - }
> - }
> - }
> - VBOX_RELEASE(USBController);
> + if (def->hostdevs[i]->source.subsys.u.usb.vendor) {
> + snprintf(vendorId, sizeof(vendorId), "%x",
> + def->hostdevs[i]->source.subsys.u.usb.vendor);
> + VBOX_UTF8_TO_UTF16(vendorId, &vendorIdUtf16);
> + filter->vtbl->SetVendorId(filter, vendorIdUtf16);
> + VBOX_UTF16_FREE(vendorIdUtf16);
> + }
> + if (def->hostdevs[i]->source.subsys.u.usb.product) {
> + snprintf(productId, sizeof(productId), "%x",
> + def->hostdevs[i]->source.subsys.u.usb.product);
> + VBOX_UTF8_TO_UTF16(productId, &productIdUtf16);
> + filter->vtbl->SetProductId(filter,
> + productIdUtf16);
> + VBOX_UTF16_FREE(productIdUtf16);
> }
> + filter->vtbl->SetActive(filter, 1);
> + USBController->vtbl->InsertDeviceFilter(USBController,
> + i,
> + filter);
> + VBOX_RELEASE(filter);
> }
> + VBOX_RELEASE(USBController);
> }
>
> static void
More information about the libvir-list
mailing list