[Libosinfo] [PATCH 03/12] media: Extract volume size from ISO9660 device/image

Zeeshan Ali (Khattak) zeeshanak at gnome.org
Sun Mar 15 16:04:50 UTC 2015


When creating a media object from an ISO9660 device/image, extract
volume size too along with other other information.
---
 osinfo/osinfo_media.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/osinfo/osinfo_media.c b/osinfo/osinfo_media.c
index e86df11..d9f3e0b 100644
--- a/osinfo/osinfo_media.c
+++ b/osinfo/osinfo_media.c
@@ -46,11 +46,15 @@ struct _PrimaryVolumeDescriptor {
     guint8 ignored[8];
     gchar  system[MAX_SYSTEM];       /* System ID */
     gchar  volume[MAX_VOLUME];       /* Volume ID */
-    guint8 ignored2[246];
+    guint8 ignored2[8];
+    gint32 volume_space_size[2];
+    guint8 ignored3[40];
+    gint16 logical_blk_size[2];
+    guint8 ignored4[186];
     gchar  publisher[MAX_PUBLISHER]; /* Publisher ID */
-    guint8 ignored3[128];
+    guint8 ignored5[128];
     gchar  application[MAX_APPLICATION]; /* Application ID */
-    guint8 ignored4[1346];
+    guint8 ignored6[1346];
 };
 
 /* the PrimaryVolumeDescriptor struct must exactly 2048 bytes long
@@ -677,6 +681,8 @@ static void on_svd_read(GObject *source,
     GError *error = NULL;
     CreateFromLocationAsyncData *data;
     gssize ret;
+    guint8 index;
+    gint64 vol_size;
 
     data = (CreateFromLocationAsyncData *)user_data;
 
@@ -745,6 +751,13 @@ static void on_svd_read(GObject *source,
                                 OSINFO_MEDIA_PROP_APPLICATION_ID,
                                 data->pvd.application);
 
+    index = (G_BYTE_ORDER == G_LITTLE_ENDIAN)? 0 : 1;
+    vol_size = ((gint64) data->pvd.volume_space_size[index]) *
+               data->pvd.logical_blk_size[index];
+    osinfo_entity_set_param_int64(OSINFO_ENTITY(media),
+                                  OSINFO_MEDIA_PROP_VOLUME_SIZE,
+                                  vol_size);
+
 EXIT:
     if (error != NULL)
         g_simple_async_result_take_error(data->res, error);
-- 
2.1.0




More information about the Libosinfo mailing list