summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel P. Berrangé <berrange@redhat.com>2021-11-25 12:21:04 +0000
committerDaniel P. Berrangé <berrange@redhat.com>2022-02-04 14:14:49 +0000
commit65313c6e6d8a5f741e50940dc753a06ebe502d91 (patch)
tree0c9c911893305740891085a4b4017184b4a9c348
parent6d5970a6245dcae02e00f38cbf30f6d3f889a126 (diff)
downloadlibosinfo-65313c6e6d8a5f741e50940dc753a06ebe502d91.tar.gz
guests: use a OsinfoMediaList when detecting media matches
In preparation for returning multiple media matches, pass a OsinfoMediaList object around. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
-rw-r--r--osinfo/osinfo_db.c33
1 files changed, 20 insertions, 13 deletions
diff --git a/osinfo/osinfo_db.c b/osinfo/osinfo_db.c
index fddebc4..4d8172b 100644
--- a/osinfo/osinfo_db.c
+++ b/osinfo/osinfo_db.c
@@ -547,8 +547,8 @@ static gint media_volume_compare(gconstpointer a, gconstpointer b)
static gboolean compare_media(OsinfoMedia *media,
GList *oss,
+ OsinfoMediaList *matched_media,
OsinfoOs **ret_os,
- OsinfoMedia **matched,
GList **fallback_oss)
{
GList *os_iter;
@@ -580,8 +580,8 @@ static gboolean compare_media(OsinfoMedia *media,
if (osinfo_media_matches(media, os_media)) {
*ret_os = os;
- if (matched != NULL)
- *matched = os_media;
+
+ osinfo_list_add(OSINFO_LIST(matched_media), OSINFO_ENTITY(os_media));
break;
}
}
@@ -599,8 +599,8 @@ static gboolean compare_media(OsinfoMedia *media,
static gboolean
osinfo_db_guess_os_from_media_internal(OsinfoDb *db,
OsinfoMedia *media,
- OsinfoOs **matched_os,
- OsinfoMedia **matched_media)
+ OsinfoMediaList *matched_media,
+ OsinfoOs **matched_os)
{
GList *oss = NULL;
GList *fallback_oss = NULL;
@@ -613,11 +613,11 @@ osinfo_db_guess_os_from_media_internal(OsinfoDb *db,
g_return_val_if_fail(media != NULL, FALSE);
oss = osinfo_list_get_elements(OSINFO_LIST(db->priv->oses));
- if (compare_media(media, oss, matched_os, matched_media, &fallback_oss))
+ if (compare_media(media, oss, matched_media, matched_os, &fallback_oss))
matched = TRUE;
if (!matched &&
- compare_media(media, fallback_oss, matched_os, matched_media, NULL))
+ compare_media(media, fallback_oss, matched_media, matched_os, NULL))
matched = TRUE;
g_list_free(oss);
@@ -642,11 +642,17 @@ OsinfoOs *osinfo_db_guess_os_from_media(OsinfoDb *db,
OsinfoMedia *media,
OsinfoMedia **matched_media)
{
+ g_autoptr(OsinfoMediaList) all_matched_media = osinfo_medialist_new();
OsinfoOs *ret;
- if (!osinfo_db_guess_os_from_media_internal(db, media, &ret, matched_media))
+ if (!osinfo_db_guess_os_from_media_internal(db, media, all_matched_media, &ret))
return NULL;
+ if (matched_media) {
+ OsinfoEntity *ent = osinfo_list_get_nth(OSINFO_LIST(all_matched_media), 0);
+ *matched_media = OSINFO_MEDIA(ent);
+ }
+
return ret;
}
@@ -748,19 +754,20 @@ static void fill_media(OsinfoDb *db, OsinfoMedia *media,
*/
gboolean osinfo_db_identify_media(OsinfoDb *db, OsinfoMedia *media)
{
- OsinfoMedia *matched_media;
+ g_autoptr(OsinfoMediaList) all_matched_media = osinfo_medialist_new();
OsinfoOs *matched_os;
+ OsinfoEntity *ent;
g_return_val_if_fail(OSINFO_IS_MEDIA(media), FALSE);
g_return_val_if_fail(OSINFO_IS_DB(db), FALSE);
- if (!osinfo_db_guess_os_from_media_internal(db, media,
- &matched_os,
- &matched_media)) {
+ if (!osinfo_db_guess_os_from_media_internal(db, media, all_matched_media,
+ &matched_os)) {
return FALSE;
}
- fill_media(db, media, matched_media, matched_os);
+ ent = osinfo_list_get_nth(OSINFO_LIST(all_matched_media), 0);
+ fill_media(db, media, OSINFO_MEDIA(ent), matched_os);
return TRUE;
}