aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2017-06-14 15:07:51 -0500
committerDan Williams <dcbw@redhat.com>2017-06-14 20:22:49 -0500
commite37e81c2e40b0ddfaa0b8d0075aa83b962d7c32e (patch)
treeebe65b5c3250f2f7e4b90f23999aed5fe5ba7c1d /src
parent75e8527987c1e225c1861a659206630305b2f31b (diff)
broadband-modem-qmi: allow prefix match for Modem images ending with '?'
Assume that a modem image build_id "02.08.02.00_?" matches a pri build_id of "02.08.02.00_ATT" or "02.08.02.00_GENERIC".
Diffstat (limited to 'src')
-rw-r--r--src/mm-broadband-modem-qmi.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c
index 8390b6fb..0e060d9a 100644
--- a/src/mm-broadband-modem-qmi.c
+++ b/src/mm-broadband-modem-qmi.c
@@ -10151,6 +10151,28 @@ get_next_image_info (FirmwareCheckSupportContext *ctx)
qmi_message_dms_get_stored_image_info_input_unref (input);
}
+static gboolean
+match_images (const gchar *pri_id, const gchar *modem_id)
+{
+ gsize modem_id_len;
+
+ if (!pri_id || !modem_id)
+ return FALSE;
+
+ if (g_str_equal (pri_id, modem_id))
+ return TRUE;
+
+ /* If the Modem image build_id ends in '?' just use a prefix match. eg,
+ * assume that modem="02.08.02.00_?" matches pri="02.08.02.00_ATT" or
+ * pri="02.08.02.00_GENERIC".
+ */
+ modem_id_len = strlen (modem_id);
+ if (modem_id[modem_id_len - 1] != '?')
+ return FALSE;
+
+ return strncmp (pri_id, modem_id, modem_id_len - 1) == 0;
+}
+
static void
list_stored_images_ready (QmiClientDms *client,
GAsyncResult *res,
@@ -10241,7 +10263,7 @@ list_stored_images_ready (QmiClientDms *client,
QmiMessageDmsListStoredImagesOutputListImageSublistSublistElement,
j);
- if (g_str_equal (subimage_pri->build_id, subimage_modem->build_id)) {
+ if (match_images (subimage_pri->build_id, subimage_modem->build_id)) {
FirmwarePair *pair;
mm_dbg ("Found pairing PRI+MODEM images with build ID '%s'", subimage_pri->build_id);