<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On May 28, 2015, at 18:48 PM, Christophe Fergeau <<a href="mailto:cfergeau@redhat.com" class="">cfergeau@redhat.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">On Thu, May 28, 2015 at 01:24:04PM +0300, Kirill Moizik wrote:</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">From: Dmitry Fleytman <<a href="mailto:dmitry@daynix.com" class="">dmitry@daynix.com</a>><br class=""><br class="">When spice run with auto redirection rule, hide rule should be applied to detach device from host stack<span class="Apple-converted-space"> </span><br class="">during device plug-in to avoid "new hardware wizard" pop up (in case there is no driver for redirected device on host)<br class=""><br class="">Signed-off-by: Kirill Moizik <<a href="mailto:kirill@daynix.com" class="">kirill@daynix.com</a>><br class="">Signed-off-by: Dmitry Fleytman <<a href="mailto:dmitry@daynix.com" class="">dmitry@daynix.com</a>><br class="">---<br class="">gtk/usb-device-manager.c | 102 +++++++++++++++++++++++++++++++++++++++++++++--<br class="">1 file changed, 98 insertions(+), 4 deletions(-)<br class=""><br class="">diff --git a/gtk/usb-device-manager.c b/gtk/usb-device-manager.c<br class="">index 841e3a4..9786f16 100644<br class="">--- a/gtk/usb-device-manager.c<br class="">+++ b/gtk/usb-device-manager.c<br class="">@@ -29,6 +29,10 @@<br class="">#include <errno.h><br class="">#include <libusb.h><br class=""><br class="">+#ifdef USE_WINUSB<br class="">+#include "usbdk_api.h"<br class="">+#endif<br class="">+<br class="">#if defined(USE_GUDEV)<br class="">#include <gudev/gudev.h><br class="">#elif defined(G_OS_WIN32)<br class="">@@ -124,6 +128,8 @@ struct _SpiceUsbDeviceManagerPrivate {<br class="">#endif<br class="">#ifdef USE_WINUSB<br class="">    SpiceWinUsbDriver     *installer;<br class="">+    usbdk_api_wrapper      usbdk_api;<br class="">+    HANDLE                 usbdk_hider_handle;<br class="">#endif<br class="">#endif<br class="">    GPtrArray *devices;<br class="">@@ -246,13 +252,19 @@ static gboolean is_usbdk_driver_installed(void)<br class=""><br class="">static void spice_usb_device_manager_init(SpiceUsbDeviceManager *self)<br class="">{<br class="">+    SpiceUsbDeviceManagerPrivate *priv =<br class="">+        SPICE_USB_DEVICE_MANAGER_GET_PRIVATE(self);<br class="">+<br class="">#ifdef USE_WINUSB<br class="">    use_usbdk = is_usbdk_driver_installed();<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Any reason why line was added before rather than in this commit?</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote><div><br class=""></div><div><br class=""></div><div>Yes, this line is a part of backend selection mechanism.</div><div>use_usbdk variable needs to be set and used by previous patches.</div><div><br class=""></div><div>We could actually merge patches 3/4/5 into one big patch for all UsbDk-related changes, but I tend to keep patches as small as possible.</div><br class=""><blockquote type="cite" class=""><div class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">-#endif<br class=""><br class="">-    SpiceUsbDeviceManagerPrivate *priv;<br class="">+    if(use_usbdk) {<br class="">+        if (usbdk_api_load(&priv->usbdk_api) == -1) {<br class="">+            SPICE_DEBUG("Failed to load UsbDk API DLL");<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">missing use_usbdk = FALSE; in error cases.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote><div><br class=""></div><div>Sire. Will fix.</div><div><br class=""></div><blockquote type="cite" class=""><div class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">+        }<br class="">+    }<br class="">+#endif<br class=""><br class="">-    priv = SPICE_USB_DEVICE_MANAGER_GET_PRIVATE(self);<br class="">    self->priv = priv;<br class=""><br class="">    priv->channels = g_ptr_array_new();<br class="">@@ -411,6 +423,12 @@ static void spice_usb_device_manager_finalize(GObject *gobject)<br class="">    g_free(priv->auto_connect_filter);<br class="">    g_free(priv->redirect_on_connect);<br class=""><br class="">+#ifdef USE_WINUSB<br class="">+    if (use_usbdk) {<br class="">+        usbdk_api_unload(&priv->usbdk_api);<br class="">+    }<br class="">+#endif<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">You probably need</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">   if(priv->usbdk_hider_handle != NULL) {</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">       priv->usbdk_api.ClearRules(priv->usbdk_hider_handle);</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">       priv->usbdk_api.CloseHiderHandle(priv->usbdk_hider_handle);</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">   }</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">?</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote><div><br class=""></div><div><br class=""></div><div>Yes, good idea.</div><br class=""><blockquote type="cite" class=""><div class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">+<br class="">    /* Chain up to the parent class */<br class="">    if (G_OBJECT_CLASS(spice_usb_device_manager_parent_class)->finalize)<br class="">        G_OBJECT_CLASS(spice_usb_device_manager_parent_class)->finalize(gobject);<br class="">@@ -428,7 +446,6 @@ static void spice_usb_device_manager_get_property(GObject     *gobject,<br class="">{<br class="">    SpiceUsbDeviceManager *self = SPICE_USB_DEVICE_MANAGER(gobject);<br class="">    SpiceUsbDeviceManagerPrivate *priv = self->priv;<br class="">-<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Unrelated white space change</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote><div><br class=""></div><div>Right. Thanks.</div><div><br class=""></div><br class=""><blockquote type="cite" class=""><div class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">    switch (prop_id) {<br class="">    case PROP_SESSION:<br class="">        g_value_set_object(value, priv->session);<br class="">@@ -448,6 +465,13 @@ static void spice_usb_device_manager_get_property(GObject     *gobject,<br class="">    }<br class="">}<br class=""><br class="">+#ifdef USE_WINUSB<br class="">+static<br class="">+void _usbdk_autoredir_enable(SpiceUsbDeviceManager *manager);<br class="">+static<br class="">+void _usbdk_autoredir_disable(SpiceUsbDeviceManager *manager);<br class="">+#endif<br class="">+<br class="">static void spice_usb_device_manager_set_property(GObject       *gobject,<br class="">                                                  guint          prop_id,<br class="">                                                  const GValue  *value,<br class="">@@ -462,6 +486,13 @@ static void spice_usb_device_manager_set_property(GObject       *gobject,<br class="">        break;<br class="">    case PROP_AUTO_CONNECT:<br class="">        priv->auto_connect = g_value_get_boolean(value);<br class="">+#ifdef USE_WINUSB<br class="">+        if (priv->auto_connect) {<br class="">+            _usbdk_autoredir_enable(self);<br class="">+        } else {<br class="">+            _usbdk_autoredir_disable(self);<br class="">+        }<br class="">+#endif<br class="">        break;<br class="">    case PROP_AUTO_CONNECT_FILTER: {<br class="">        const gchar *filter = g_value_get_string(value);<br class="">@@ -1906,6 +1937,69 @@ guint8 spice_usb_device_get_state(SpiceUsbDevice *device)<br class=""><br class="">    return info->state;<br class="">}<br class="">+<br class="">+static<br class="">+void spice_usb_device_manager_set_rules(SpiceUsbDeviceManagerPrivate *priv)<br class="">+{<br class="">+    struct usbredirfilter_rule *rules;<br class="">+    int r, count;<br class="">+<br class="">+    r = usbredirfilter_string_to_rules(priv->redirect_on_connect, ",", "|", &rules, &count);<br class="">+    if (r) {<br class="">+        SPICE_DEBUG("auto-conenct rules parsing failed with error %d", r);<br class="">+        return;<br class="">+    }<br class="">+<br class="">+    for (int i = 0; i < count; i++) {<br class="">+        USB_DK_HIDE_RULE rule;<br class="">+        rule.Hide = (uint64_t)rules[i].allow;<br class="">+        rule.Class = (uint64_t)rules[i].device_class;<br class="">+        rule.VID = (uint64_t)rules[i].vendor_id;<br class="">+        rule.PID = (uint64_t)rules[i].product_id;<br class="">+        rule.BCD = (uint64_t)rules[i].device_version_bcd;<br class="">+        if(!priv->usbdk_api.AddRule(priv->usbdk_hider_handle, &rule)) {<br class="">+            SPICE_DEBUG("UsbDk set hide rule API failed");<br class="">+        }<br class="">+    }<br class="">+<br class="">+    free(rules);<br class="">+}<br class="">+<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">This helper could go to usbdk_api_wrapper maybe:</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">usbdk_api_wrapper_set_rules(wrapper, handle, priv->redirect_on_connect) ?</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote><div><br class=""></div><div>I’d prefer to keep UsbDk wrapper code as independent as possible.</div><div>This parsing logic looks too specific.</div><br class=""><blockquote type="cite" class=""><div class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">+static<br class="">+void _usbdk_autoredir_enable(SpiceUsbDeviceManager *manager)<br class="">+{<br class="">+    if(!use_usbdk)<br class="">+        return;<br class="">+<br class="">+    SpiceUsbDeviceManagerPrivate *priv = manager->priv;<br class="">+<br class="">+    if(priv->redirect_on_connect == NULL) {<br class="">+        SPICE_DEBUG("No autoredirect rules, no hider setup needed");<br class="">+        return;<br class="">+    }<br class="">+<br class="">+    priv->usbdk_hider_handle = priv->usbdk_api.CreateHandle();<br class="">+    if(priv->usbdk_hider_handle == NULL) {<br class="">+        SPICE_DEBUG("Failed to instanciate UsbDk interface");<br class="">+        return;<br class="">+    }<br class="">+<br class="">+    spice_usb_device_manager_set_rules(priv);<br class="">+}<br class="">+<br class="">+static<br class="">+void _usbdk_autoredir_disable(SpiceUsbDeviceManager *manager)<br class="">+{<br class="">+    if(!use_usbdk)<br class="">+        return;<br class="">+<br class="">+    SpiceUsbDeviceManagerPrivate *priv = manager->priv;<br class="">+    if(priv->usbdk_hider_handle != NULL) {<br class="">+        priv->usbdk_api.ClearRules(priv->usbdk_hider_handle);<br class="">+        priv->usbdk_api.CloseHiderHandle(priv->usbdk_hider_handle);<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">priv->usbdk_hider_handle = NULL;</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote><div><br class=""></div><div><br class=""></div><div>Will fix.</div><div>Thanks again for the review, Christophe</div><div><br class=""></div><br class=""><blockquote type="cite" class=""><div class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">+    }<br class="">+}<br class="">+<br class="">#endif<br class=""><br class="">static SpiceUsbDevice *spice_usb_device_ref(SpiceUsbDevice *device)<br class="">--<span class="Apple-converted-space"> </span><br class="">2.1.0<br class=""><br class="">_______________________________________________<br class="">Spice-devel mailing list<br class=""><a href="mailto:Spice-devel@lists.freedesktop.org" class="">Spice-devel@lists.freedesktop.org</a><br class=""><a href="http://lists.freedesktop.org/mailman/listinfo/spice-devel" class="">http://lists.freedesktop.org/mailman/listinfo/spice-devel</a></blockquote></div></blockquote></div><br class=""></body></html>