diff options
author | Richard Hughes <richard@hughsie.com> | 2022-09-06 08:16:47 +0100 |
---|---|---|
committer | Richard Hughes <richard@hughsie.com> | 2022-09-06 10:05:45 +0100 |
commit | b548c8e16bcaedc924398e7ac99090aa79a69890 (patch) | |
tree | 8d98605b7939637100983294b764b3b2960493a8 | |
parent | fd5f1d2b2bec8ccc3c12c2f1867a0a915543cfd9 (diff) | |
download | gusb-b548c8e16bcaedc924398e7ac99090aa79a69890.tar.gz |
trivial: Use a boolean flag for cache control
There's no point keep asking the device for BOS descriptors when it has none.
-rw-r--r-- | gusb/gusb-device.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/gusb/gusb-device.c b/gusb/gusb-device.c index 2d7e46a..9ca1fc7 100644 --- a/gusb/gusb-device.c +++ b/gusb/gusb-device.c @@ -36,6 +36,8 @@ typedef struct { libusb_device *device; libusb_device_handle *handle; struct libusb_device_descriptor desc; + gboolean interfaces_valid; + gboolean bos_descriptors_valid; GPtrArray *interfaces; /* of GUsbInterface */ GPtrArray *bos_descriptors; /* of GUsbBosDescriptor */ } GUsbDevicePrivate; @@ -279,6 +281,8 @@ _g_usb_device_load(GUsbDevice *self, JsonObject *json_object, GError **error) } /* success */ + priv->interfaces_valid = TRUE; + priv->bos_descriptors_valid = TRUE; return TRUE; } @@ -776,7 +780,7 @@ g_usb_device_get_interfaces(GUsbDevice *self, GError **error) g_return_val_if_fail(error == NULL || *error == NULL, NULL); /* get all interfaces */ - if (priv->interfaces->len == 0) { + if (!priv->interfaces_valid) { gint rc; struct libusb_config_descriptor *config; @@ -802,6 +806,7 @@ g_usb_device_get_interfaces(GUsbDevice *self, GError **error) } } libusb_free_config_descriptor(config); + priv->interfaces_valid = TRUE; } /* success */ @@ -821,6 +826,8 @@ g_usb_device_invalidate(GUsbDevice *self) { GUsbDevicePrivate *priv = GET_PRIVATE(self); g_return_if_fail(G_USB_IS_DEVICE(self)); + priv->interfaces_valid = FALSE; + priv->bos_descriptors_valid = FALSE; g_ptr_array_set_size(priv->interfaces, 0); g_ptr_array_set_size(priv->bos_descriptors, 0); } @@ -889,7 +896,7 @@ g_usb_device_get_bos_descriptors(GUsbDevice *self, GError **error) g_return_val_if_fail(error == NULL || *error == NULL, NULL); /* get all BOS descriptors */ - if (priv->bos_descriptors->len == 0) { + if (!priv->bos_descriptors_valid) { gint rc; guint8 num_device_caps; struct libusb_bos_descriptor *bos = NULL; @@ -923,6 +930,7 @@ g_usb_device_get_bos_descriptors(GUsbDevice *self, GError **error) g_ptr_array_add(priv->bos_descriptors, bos_descriptor); } libusb_free_bos_descriptor(bos); + priv->bos_descriptors_valid = TRUE; } /* success */ |