From 48557a428e334fd92f0ea7bd1d7b08cfa0f1a851 Mon Sep 17 00:00:00 2001 From: Richard Hughes Date: Wed, 12 Oct 2022 10:39:51 +0100 Subject: [PATCH] Add fwupd_device_has_checksum() for future usage --- libfwupd/fwupd-device.c | 35 ++++++++++++++++++++++++++++++----- libfwupd/fwupd-device.h | 2 ++ libfwupd/fwupd.map | 6 ++++++ libfwupdplugin/fu-device.h | 1 + 4 files changed, 39 insertions(+), 5 deletions(-) diff --git a/libfwupd/fwupd-device.c b/libfwupd/fwupd-device.c index 735a34927..6ccc96709 100644 --- a/libfwupd/fwupd-device.c +++ b/libfwupd/fwupd-device.c @@ -113,6 +113,33 @@ fwupd_device_get_checksums(FwupdDevice *self) return priv->checksums; } +/** + * fwupd_device_has_checksum: + * @self: a #FwupdDevice + * @checksum: (not nullable): the device checksum + * + * Finds out if the device has this specific checksum. + * + * Returns: %TRUE if the checksum name is found + * + * Since: 1.8.7 + **/ +gboolean +fwupd_device_has_checksum(FwupdDevice *self, const gchar *checksum) +{ + FwupdDevicePrivate *priv = GET_PRIVATE(self); + + g_return_val_if_fail(FWUPD_IS_DEVICE(self), FALSE); + g_return_val_if_fail(checksum != NULL, FALSE); + + for (guint i = 0; i < priv->checksums->len; i++) { + const gchar *checksum_tmp = g_ptr_array_index(priv->checksums, i); + if (g_strcmp0(checksum, checksum_tmp) == 0) + return TRUE; + } + return FALSE; +} + /** * fwupd_device_add_checksum: * @self: a #FwupdDevice @@ -128,11 +155,9 @@ fwupd_device_add_checksum(FwupdDevice *self, const gchar *checksum) FwupdDevicePrivate *priv = GET_PRIVATE(self); g_return_if_fail(FWUPD_IS_DEVICE(self)); g_return_if_fail(checksum != NULL); - for (guint i = 0; i < priv->checksums->len; i++) { - const gchar *checksum_tmp = g_ptr_array_index(priv->checksums, i); - if (g_strcmp0(checksum_tmp, checksum) == 0) - return; - } + + if (fwupd_device_has_checksum(self, checksum)) + return; g_ptr_array_add(priv->checksums, g_strdup(checksum)); } diff --git a/libfwupd/fwupd-device.h b/libfwupd/fwupd-device.h index 42322acd3..996a653e0 100644 --- a/libfwupd/fwupd-device.h +++ b/libfwupd/fwupd-device.h @@ -157,6 +157,8 @@ GPtrArray * fwupd_device_get_checksums(FwupdDevice *self); void fwupd_device_add_checksum(FwupdDevice *self, const gchar *checksum); +gboolean +fwupd_device_has_checksum(FwupdDevice *self, const gchar *checksum); const gchar * fwupd_device_get_plugin(FwupdDevice *self); void diff --git a/libfwupd/fwupd.map b/libfwupd/fwupd.map index ebc653df4..4bff47b42 100644 --- a/libfwupd/fwupd.map +++ b/libfwupd/fwupd.map @@ -861,3 +861,9 @@ LIBFWUPD_1.8.6 { fwupd_request_set_flags; local: *; } LIBFWUPD_1.8.4; + +LIBFWUPD_1.8.7 { + global: + fwupd_device_has_checksum; + local: *; +} LIBFWUPD_1.8.6; diff --git a/libfwupdplugin/fu-device.h b/libfwupdplugin/fu-device.h index 845a055c8..9d5af9568 100644 --- a/libfwupdplugin/fu-device.h +++ b/libfwupdplugin/fu-device.h @@ -142,6 +142,7 @@ fu_device_new(FuContext *ctx); #define fu_device_has_instance_id(d, v) fwupd_device_has_instance_id(FWUPD_DEVICE(d), v) #define fu_device_has_vendor_id(d, v) fwupd_device_has_vendor_id(FWUPD_DEVICE(d), v) #define fu_device_has_protocol(d, v) fwupd_device_has_protocol(FWUPD_DEVICE(d), v) +#define fu_device_has_checksum(d, v) fwupd_device_has_checksum(FWUPD_DEVICE(d), v) #define fu_device_add_checksum(d, v) fwupd_device_add_checksum(FWUPD_DEVICE(d), v) #define fu_device_add_release(d, v) fwupd_device_add_release(FWUPD_DEVICE(d), v) #define fu_device_add_icon(d, v) fwupd_device_add_icon(FWUPD_DEVICE(d), v)