summaryrefslogtreecommitdiff
path: root/osinfo
diff options
context:
space:
mode:
authorDaniel P. Berrangé <berrange@redhat.com>2021-11-25 12:11:59 +0000
committerDaniel P. Berrangé <berrange@redhat.com>2022-02-04 14:14:49 +0000
commit5d29aa6efb7f1880d3411d2c24c79d64472885b1 (patch)
treee15bd2c9d01cd264f1325b5f200f41d7d2a15848 /osinfo
parent4a8c19a2bdc963a574bed5c0789ded36eda337da (diff)
downloadlibosinfo-5d29aa6efb7f1880d3411d2c24c79d64472885b1.tar.gz
osinfo: refactor media guessing internal helper
We want the return value from the media guessing helper to indicate whether any matches were used, and have the OsinfoOs as an output parameter which can now be optional. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Diffstat (limited to 'osinfo')
-rw-r--r--osinfo/osinfo_db.c36
1 files changed, 23 insertions, 13 deletions
diff --git a/osinfo/osinfo_db.c b/osinfo/osinfo_db.c
index 3781712..efe7ba5 100644
--- a/osinfo/osinfo_db.c
+++ b/osinfo/osinfo_db.c
@@ -596,29 +596,34 @@ static gboolean compare_media(OsinfoMedia *media,
return FALSE;
}
-static OsinfoOs *
+static gboolean
osinfo_db_guess_os_from_media_internal(OsinfoDb *db,
OsinfoMedia *media,
+ OsinfoOs **matched_os,
OsinfoMedia **matched_media)
{
- OsinfoOs *ret = NULL;
GList *oss = NULL;
GList *fallback_oss = NULL;
+ gboolean matched = FALSE;
- g_return_val_if_fail(OSINFO_IS_DB(db), NULL);
- g_return_val_if_fail(media != NULL, NULL);
+ if (matched_os)
+ *matched_os = NULL;
+
+ g_return_val_if_fail(OSINFO_IS_DB(db), FALSE);
+ g_return_val_if_fail(media != NULL, FALSE);
oss = osinfo_list_get_elements(OSINFO_LIST(db->priv->oses));
- if (compare_media(media, oss, &ret, matched_media, &fallback_oss))
- goto end;
+ if (compare_media(media, oss, matched_os, matched_media, &fallback_oss))
+ matched = TRUE;
- compare_media(media, fallback_oss, &ret, matched_media, NULL);
+ if (!matched &&
+ compare_media(media, fallback_oss, matched_os, matched_media, NULL))
+ matched = TRUE;
- end:
g_list_free(oss);
g_list_free(fallback_oss);
- return ret;
+ return matched;
}
/**
@@ -637,7 +642,12 @@ OsinfoOs *osinfo_db_guess_os_from_media(OsinfoDb *db,
OsinfoMedia *media,
OsinfoMedia **matched_media)
{
- return osinfo_db_guess_os_from_media_internal(db, media, matched_media);
+ OsinfoOs *ret;
+
+ if (!osinfo_db_guess_os_from_media_internal(db, media, &ret, matched_media))
+ return NULL;
+
+ return ret;
}
static void fill_media(OsinfoDb *db, OsinfoMedia *media,
@@ -744,9 +754,9 @@ gboolean osinfo_db_identify_media(OsinfoDb *db, OsinfoMedia *media)
g_return_val_if_fail(OSINFO_IS_MEDIA(media), FALSE);
g_return_val_if_fail(OSINFO_IS_DB(db), FALSE);
- matched_os = osinfo_db_guess_os_from_media_internal(db, media,
- &matched_media);
- if (matched_os == NULL) {
+ if (!osinfo_db_guess_os_from_media_internal(db, media,
+ &matched_os,
+ &matched_media)) {
return FALSE;
}