Re: [osinfo PATCH] Mark the PrimaryVolumeDescriptor struct as packed

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 01/06/2012 05:21 AM, Christophe Fergeau wrote:
> This tells gcc it shouldn't add some padding between the struct
> members. which is important because we rely on this structure size
> being exactly 2048. One of its members is guint8 ignored2[246]; (only
> a 2 byte multiple) so all the fields of the struct won't be aligned
> on a 8 byte boundary, so gcc could do some unexpected things on
> some arch.
> ---
>  osinfo/osinfo_media.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/osinfo/osinfo_media.c b/osinfo/osinfo_media.c
> index 2366993..2a80205 100644
> --- a/osinfo/osinfo_media.c
> +++ b/osinfo/osinfo_media.c
> @@ -44,7 +44,7 @@ struct _PrimaryVolumeDescriptor {
>      guint8 ignored2[246];
>      gchar  publisher[MAX_PUBLISHER]; /* Publisher ID */
>      guint8 ignored3[1602];
> -};
> +} __attribute__ ((packed));;

When a struct must be an exact size, it's probably worth adding a
compile-time verification, so that you get a compilation failure if any
compiler ever picks the wrong size.  If you used gnulib, it would be
fairly trivial to use "verify.h" for this purpose, but even without
gnulib, you can do:

char dummy[sizeof(struct _PrimaryVolumeDescriptor) == 2048 ? 1 : -1];

-- 
Eric Blake   eblake@xxxxxxxxxx    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


[Index of Archives]     [Linux Virtualization]     [KVM Development]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]     [Video 4 Linux]

  Powered by Linux