[Spice-devel] [PATCH spice-gtk] add optional format string to spice_usb_device_get_description()
Marc-André Lureau
marcandre.lureau at gmail.com
Tue Jan 3 07:20:32 PST 2012
---
gtk/usb-device-manager.c | 39 +++++++++++++++++++++++++--------------
gtk/usb-device-manager.h | 2 +-
2 files changed, 26 insertions(+), 15 deletions(-)
diff --git a/gtk/usb-device-manager.c b/gtk/usb-device-manager.c
index e55caae..0f53755 100644
--- a/gtk/usb-device-manager.c
+++ b/gtk/usb-device-manager.c
@@ -490,7 +490,7 @@ static void spice_usb_device_manager_auto_connect_cb(GObject *gobject,
spice_usb_device_manager_connect_device_finish(self, res, &err);
if (err) {
- gchar *desc = spice_usb_device_get_description((SpiceUsbDevice *)device);
+ gchar *desc = spice_usb_device_get_description((SpiceUsbDevice *)device, NULL);
g_prefix_error(&err, "Could not auto-redirect %s: ", desc);
g_free(desc);
@@ -871,20 +871,30 @@ void spice_usb_device_manager_disconnect_device(SpiceUsbDeviceManager *self,
/**
* spice_usb_device_get_description:
* @device: #SpiceUsbDevice to get the description of
+ * @format: an optionnal printf() format string with positionnal parameters
*
* Get a string describing the device which is suitable as a description of
* the device for the end user. The returned string should be freed with
* g_free() when no longer needed.
*
- * Returns: a newly-allocated string holding the description
+ * The @format positionnal parameters are the following:
+ * - '%%1$s' manufacturer
+ * - '%%2$s' product
+ * - '%%3$s' descriptor (a [vendor_id:product_id] string)
+ * - '%%4$d' bus
+ * - '%%5$d' address
+ *
+ * (the default format string is "%%s %%s %%s at %%d-%%d")
+ *
+ * Returns: a newly-allocated string holding the description, or %NULL if failed
*/
-gchar *spice_usb_device_get_description(SpiceUsbDevice *_device)
+gchar *spice_usb_device_get_description(SpiceUsbDevice *_device, const gchar *format)
{
#ifdef USE_USBREDIR
libusb_device *device = (libusb_device *)_device;
struct libusb_device_descriptor desc;
- int rc, bus, address;
- gchar *description, *manufacturer = NULL, *product = NULL;
+ int bus, address;
+ gchar *description, *descriptor, *manufacturer = NULL, *product = NULL;
g_return_val_if_fail(device != NULL, NULL);
@@ -902,17 +912,18 @@ gchar *spice_usb_device_get_description(SpiceUsbDevice *_device)
if (!product)
product = g_strdup(_("Device"));
- rc = libusb_get_device_descriptor(device, &desc);
- if (rc == LIBUSB_SUCCESS) {
- description = g_strdup_printf(_("%s %s [%04x:%04x] at %d-%d"),
- manufacturer, product, desc.idVendor,
- desc.idProduct, bus, address);
- } else {
- description = g_strdup_printf(_("%s %s at %d-%d"), manufacturer,
- product, bus, address);
- }
+ if (libusb_get_device_descriptor(device, &desc) == LIBUSB_SUCCESS)
+ descriptor = g_strdup_printf("[%04x:%04x]", desc.idVendor, desc.idProduct);
+ else
+ descriptor = g_strdup("");
+
+ if (!format)
+ format = _("%s %s %s at %d-%d");
+
+ description = g_strdup_printf(format, manufacturer, product, descriptor, bus, address);
g_free(manufacturer);
+ g_free(descriptor);
g_free(product);
return description;
diff --git a/gtk/usb-device-manager.h b/gtk/usb-device-manager.h
index a8b3969..d01bc12 100644
--- a/gtk/usb-device-manager.h
+++ b/gtk/usb-device-manager.h
@@ -87,7 +87,7 @@ struct _SpiceUsbDeviceManagerClass
GType spice_usb_device_get_type(void);
GType spice_usb_device_manager_get_type(void);
-gchar *spice_usb_device_get_description(SpiceUsbDevice *device);
+gchar *spice_usb_device_get_description(SpiceUsbDevice *device, const gchar *format);
SpiceUsbDeviceManager *spice_usb_device_manager_get(SpiceSession *session,
GError **err);
--
1.7.7.5
More information about the Spice-devel
mailing list