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

Fabiano Fidêncio fidencio at redhat.com
Mon Mar 16 08:45:58 UTC 2015


On Sun, 2015-03-15 at 16:04 +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];
> +    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;

Please, add an extra space before the "?".

> +    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);


Best Regards,
--
Fabiano Fidêncio




More information about the Libosinfo mailing list