[virt-tools-list] [libosinfo 5/8] Add osinfo_db_identify_media
Zeeshan Ali (Khattak)
zeeshanak at gnome.org
Wed Dec 5 16:42:43 UTC 2012
On Mon, Dec 3, 2012 at 1:23 PM, Christophe Fergeau <cfergeau at redhat.com> wrote:
> ---
> osinfo/libosinfo.syms | 2 +
> osinfo/osinfo_db.c | 105 +++++++++++++++++++++++++++++++++-----------------
> osinfo/osinfo_db.h | 2 +
> test/test-isodetect.c | 10 ++---
> tools/osinfo-detect.c | 12 ++++--
> 5 files changed, 87 insertions(+), 44 deletions(-)
>
> diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
> index 2824678..d45e58e 100644
> --- a/osinfo/libosinfo.syms
> +++ b/osinfo/libosinfo.syms
> @@ -328,6 +328,8 @@ LIBOSINFO_0.2.2 {
> osinfo_product_relationship_get_type;
> osinfo_path_format_get_type;
>
> + osinfo_db_identify_media;
> +
> osinfo_entity_get_param_value_enum;
> osinfo_entity_set_param_enum;
>
> diff --git a/osinfo/osinfo_db.c b/osinfo/osinfo_db.c
> index 665554c..1e8a93c 100644
> --- a/osinfo/osinfo_db.c
> +++ b/osinfo/osinfo_db.c
> @@ -391,40 +391,6 @@ static gint media_volume_compare (gconstpointer a, gconstpointer b)
> return 1;
> }
>
> -static void fill_media (OsinfoMedia *media, OsinfoMedia *matched_media)
> -{
> - gboolean is_installer;
> - gboolean is_live;
> - gint reboots;
> - const gchar *kernel_path;
> - const gchar *initrd_path;
> - const gchar *arch;
> - const gchar *url;
> -
> - arch = osinfo_media_get_architecture(matched_media);
> - if (arch != NULL)
> - g_object_set(G_OBJECT(media), "architecture", arch, NULL);
> - url = osinfo_media_get_url(matched_media);
> - if (url != NULL)
> - g_object_set(G_OBJECT(media), "url", url, NULL);
> -
> - kernel_path = osinfo_media_get_kernel_path(matched_media);
> - if (kernel_path != NULL)
> - g_object_set(G_OBJECT(media), "kernel_path", kernel_path, NULL);
> -
> - initrd_path = osinfo_media_get_initrd_path(matched_media);
> - if (initrd_path != NULL)
> - g_object_set(G_OBJECT(media), "initrd_path", initrd_path, NULL);
> - is_installer = osinfo_media_get_installer(matched_media);
> - is_live = osinfo_media_get_live(matched_media);
> - reboots = osinfo_media_get_installer_reboots(matched_media);
> - g_object_set(G_OBJECT(media),
> - "installer", is_installer,
> - "live", is_live,
> - "installer-reboots", reboots,
> - NULL);
> -}
> -
> /**
> * osinfo_db_guess_os_from_media:
> * @db: the database
> @@ -477,7 +443,6 @@ OsinfoOs *osinfo_db_guess_os_from_media(OsinfoDb *db,
> match_regex (os_system, media_system) &&
> match_regex (os_publisher, media_publisher)) {
> ret = os;
> - fill_media(media, os_media);
> if (matched_media != NULL)
> *matched_media = os_media;
> break;
> @@ -496,6 +461,76 @@ OsinfoOs *osinfo_db_guess_os_from_media(OsinfoDb *db,
> return ret;
> }
>
> +static void fill_media (OsinfoMedia *media, OsinfoMedia *matched_media, OsinfoOs *os)
> +{
> + gboolean is_installer;
> + gboolean is_live;
> + gint reboots;
> + const gchar *kernel_path;
> + const gchar *initrd_path;
> + const gchar *arch;
> + const gchar *url;
> +
> + arch = osinfo_media_get_architecture(matched_media);
> + if (arch != NULL)
> + g_object_set(G_OBJECT(media), "architecture", arch, NULL);
> + url = osinfo_media_get_url(matched_media);
> + if (url != NULL)
> + g_object_set(G_OBJECT(media), "url", url, NULL);
> +
> + kernel_path = osinfo_media_get_kernel_path(matched_media);
> + if (kernel_path != NULL)
> + g_object_set(G_OBJECT(media), "kernel_path", kernel_path, NULL);
> +
> + initrd_path = osinfo_media_get_initrd_path(matched_media);
> + if (initrd_path != NULL)
> + g_object_set(G_OBJECT(media), "initrd_path", initrd_path, NULL);
> + is_installer = osinfo_media_get_installer(matched_media);
> + is_live = osinfo_media_get_live(matched_media);
> + g_object_set(G_OBJECT(media),
> + "installer", is_installer,
> + "live", is_live,
> + NULL);
> + if (is_installer) {
> + reboots = osinfo_media_get_installer_reboots(matched_media);
> + g_object_set(G_OBJECT(media), "installer-reboots", reboots, NULL);
> + }
> + if (os != NULL)
> + osinfo_media_set_os(media, os);
> +}
> +
> +/**
> + * osinfo_db_identify_media:
> + * @db: a #OsinfoDb database
> + * @media: the installation media
> + * data
> + *
> + * Try to match the @media created using osinfo_media_create_from_location()
This makes it sound like app developer doesn't have a choice. As an
app developer, I'd think why is libosinfo not creating the media
instance for me if it knows that I'll be doing that just before this
call anyways.
I recall that you are doing it this way because implementing async
version of this method will than be very difficult?
--
Regards,
Zeeshan Ali (Khattak)
FSF member#5124
More information about the virt-tools-list
mailing list