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

Christophe Fergeau cfergeau at redhat.com
Mon Mar 16 09:51:18 UTC 2015


On Sun, Mar 15, 2015 at 04:04:50PM +0000, Zeeshan Ali (Khattak) wrote:
> 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];

Why not guint32 ? At least wikipedia says that all numbers in ISO9660
images are unsigned (I could not find the place where this is explicitly
stated in the spec though).

> +    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
> 
> _______________________________________________
> Libosinfo mailing list
> Libosinfo at redhat.com
> https://www.redhat.com/mailman/listinfo/libosinfo
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libosinfo/attachments/20150316/aba35e26/attachment.sig>


More information about the Libosinfo mailing list