Subject: Re: packed structures
From: [email-masked] (Andreas Degert)

12 Aug 1998 09:37:47 -0700
Message-ID: <[email-masked]>
References: <000101bdc547$2b785c20$e645aace@TomStokes>
Mime-Version: 1.0 (generated by tm-edit 7.106)
Content-Type: text/plain; charset=US-ASCII
To: "Tom Stokes" <[email-masked]>
Cc: "CYGWIN32" <[email-masked]>

"Tom Stokes" <[email-masked]> writes:

> The size of this structure is 12 which is wrong. What am I missing?
[...]

try the following (compile and execute or compile to .s):

------------------------------------------
typedef struct HeaderTag 
{
  unsigned long   HeaderLength;
  char            PackingType __attribute__ ((packed));
  unsigned short  NumRows __attribute__ ((packed));
  unsigned short  PackedSize __attribute__ ((packed));
} __attribute__ ((packed)) HeaderType;

#define offset(f) (int)&(((HeaderType*)0)->f)

int main(void)
{
  printf("%d,%d,%d,%d\n",offset(PackingType),offset(NumRows),
	 offset(PackedSize),sizeof(HeaderType));
  return 0;
}
--------------------------------------------

Notice the added attribute after the closing brace. Without that the
whole structure is padded with 3 additional bytes.

ciao

Andreas
-
For help on using this list (especially unsubscribing), send a message to
"[email-masked]" with one line of text: "help".