diff options
author | Daniel P. Berrangé <berrange@redhat.com> | 2021-11-25 12:11:59 +0000 |
---|---|---|
committer | Daniel P. Berrangé <berrange@redhat.com> | 2022-02-04 14:14:49 +0000 |
commit | 5d29aa6efb7f1880d3411d2c24c79d64472885b1 (patch) | |
tree | e15bd2c9d01cd264f1325b5f200f41d7d2a15848 /osinfo | |
parent | 4a8c19a2bdc963a574bed5c0789ded36eda337da (diff) | |
download | libosinfo-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.c | 36 |
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; } |