[Libosinfo] [libosinfo PATCH 6/6] media: Add _is_bootable() API
Fabiano Fidêncio
fidencio at redhat.com
Mon Jun 24 13:16:50 UTC 2019
Let's add an API in order to let the applications known whether a media
created is bootable or not (according to libosinfo detection).
Signed-off-by: Fabiano Fidêncio <fidencio at redhat.com>
---
osinfo/libosinfo.syms | 1 +
osinfo/osinfo_media.c | 27 +++++++++++++++++++++++++--
osinfo/osinfo_media.h | 2 ++
3 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
index d6809a8..4e96f16 100644
--- a/osinfo/libosinfo.syms
+++ b/osinfo/libosinfo.syms
@@ -590,6 +590,7 @@ LIBOSINFO_1.6.0 {
osinfo_media_create_from_location_with_flags_async;
osinfo_media_create_from_location_with_flags_finish;
osinfo_media_detect_flags_get_type;
+ osinfo_media_is_bootable;
osinfo_os_get_kernel_url_argument;
} LIBOSINFO_1.5.0;
diff --git a/osinfo/osinfo_media.c b/osinfo/osinfo_media.c
index 69813db..b744a94 100644
--- a/osinfo/osinfo_media.c
+++ b/osinfo/osinfo_media.c
@@ -144,6 +144,7 @@ struct _CreateFromLocationAsyncData {
gchar *publisher;
guint flags;
+ gboolean bootable;
};
static void create_from_location_async_data_free
@@ -870,6 +871,10 @@ create_from_location_async_data(CreateFromLocationAsyncData *data)
OSINFO_MEDIA_PROP_VOLUME_SIZE,
vol_size);
+ osinfo_entity_set_param_boolean(OSINFO_ENTITY(media),
+ OSINFO_MEDIA_PROP_BOOTABLE,
+ data->bootable);
+
return media;
}
@@ -1067,15 +1072,18 @@ static void search_ppc_bootinfo_callback(GObject *source,
data = (CreateFromLocationAsyncData *)user_data;
+ data->bootable = TRUE;
ret = search_ppc_bootinfo_finish(res, &error);
if (!ret) {
if (g_error_matches(error,
OSINFO_MEDIA_ERROR,
OSINFO_MEDIA_ERROR_NOT_BOOTABLE)) {
- if ((data->flags & OSINFO_MEDIA_DETECT_REQUIRE_BOOTABLE) != 0)
+ if ((data->flags & OSINFO_MEDIA_DETECT_REQUIRE_BOOTABLE) != 0) {
goto cleanup;
- else
+ } else {
g_clear_error(&error);
+ data->bootable = FALSE;
+ }
}
}
@@ -1154,6 +1162,7 @@ static void on_svd_read(GObject *source,
return;
}
+ data->bootable = TRUE;
media = create_from_location_async_data(data);
cleanup:
@@ -1798,3 +1807,17 @@ OsinfoInstallScriptList *osinfo_media_get_install_script_list(OsinfoMedia *media
return OSINFO_INSTALL_SCRIPTLIST(new_list);
}
+
+/**
+ * osinfo_media_is_bootable:
+ * @media: and #OsinfoMedia instance
+ *
+ * Returns: #TRUE if the @media is bootable. #FALSE otherwise.
+ */
+gboolean osinfo_media_is_bootable(OsinfoMedia *media)
+{
+ g_return_val_if_fail(OSINFO_IS_MEDIA(media), FALSE);
+
+ return osinfo_entity_get_param_value_boolean(OSINFO_ENTITY(media),
+ OSINFO_MEDIA_PROP_BOOTABLE);
+}
diff --git a/osinfo/osinfo_media.h b/osinfo/osinfo_media.h
index 747046b..5b7bd8b 100644
--- a/osinfo/osinfo_media.h
+++ b/osinfo/osinfo_media.h
@@ -105,6 +105,7 @@ typedef struct _OsinfoMediaPrivate OsinfoMediaPrivate;
#define OSINFO_MEDIA_PROP_VOLUME_SIZE "volume-size"
#define OSINFO_MEDIA_PROP_EJECT_AFTER_INSTALL "eject-after-install"
#define OSINFO_MEDIA_PROP_INSTALLER_SCRIPT "installer-script"
+#define OSINFO_MEDIA_PROP_BOOTABLE "bootable"
/* object */
struct _OsinfoMedia
@@ -161,6 +162,7 @@ const gchar *osinfo_media_get_publisher_id(OsinfoMedia *media);
const gchar *osinfo_media_get_application_id(OsinfoMedia *media);
const gchar *osinfo_media_get_kernel_path(OsinfoMedia *media);
const gchar *osinfo_media_get_initrd_path(OsinfoMedia *media);
+gboolean osinfo_media_is_bootable(OsinfoMedia *media);
OsinfoOs *osinfo_media_get_os(OsinfoMedia *media);
OsinfoOsVariantList *osinfo_media_get_os_variants(OsinfoMedia *media);
GList *osinfo_media_get_languages(OsinfoMedia *media);
--
2.21.0
More information about the Libosinfo
mailing list