From 502a2ca64a27922d0e8c5f158daf08df717cec9e Mon Sep 17 00:00:00 2001 From: Richard Hughes Date: Mon, 5 Jun 2017 09:23:10 +0100 Subject: [PATCH] Do not re-download firmware that exists in the cache --- src/fu-util.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/fu-util.c b/src/fu-util.c index b62f2f7c5..8502400b4 100644 --- a/src/fu-util.c +++ b/src/fu-util.c @@ -581,6 +581,22 @@ fu_util_verify_update (FuUtilPrivate *priv, gchar **values, GError **error) return fwupd_client_verify_update (priv->client, values[0], NULL, error); } +static gboolean +fu_util_file_exists_with_checksum (const gchar *fn, + const gchar *checksum_expected, + GChecksumType checksum_type) +{ + gsize len = 0; + g_autofree gchar *checksum_actual = NULL; + g_autofree gchar *data = NULL; + + if (!g_file_get_contents (fn, &data, &len, NULL)) + return FALSE; + checksum_actual = g_compute_checksum_for_data (checksum_type, + (guchar *) data, len); + return g_strcmp0 (checksum_expected, checksum_actual) == 0; +} + static gboolean fu_util_download_file (FuUtilPrivate *priv, SoupURI *uri, @@ -598,6 +614,12 @@ fu_util_download_file (FuUtilPrivate *priv, g_autoptr(SoupMessage) msg = NULL; g_autoptr(SoupSession) session = NULL; + /* check if the file already exists with the right checksum */ + if (fu_util_file_exists_with_checksum (fn, checksum_expected, checksum_type)) { + g_debug ("skpping download as file already exists"); + return TRUE; + } + /* create the soup session */ user_agent = g_strdup_printf ("%s/%s", PACKAGE_NAME, PACKAGE_VERSION); session = soup_session_new_with_options (SOUP_SESSION_USER_AGENT, user_agent,