Falk Hueffner wrote:
<snip>
> > struct PACKET_HEADER
> > {
> >   le length;
> >   MD5Hash setid;
> > } __attribute__ ((packed));
> >
> > struct MAINPACKET
> > {
> >   PACKET_HEADER header;
> >   MD5Hash fileid[0];
> > } __attribute__ ((packed));
> >
> > const MD5Hash& FileId(const char *packetdata, int filenumber)
> > {
> >   return ((const MAINPACKET*)packetdata)->fileid[filenumber];
> > }
> >
> > const MD5Hash& SetId(const char *packetdata)
> > {
> >   return ((const MAINPACKET*)packetdata)->header.setid;
> > }
> >
> > // END
> >
> > SetId provokes the error; FileId doesn't.
> 
> The problem is that the packedness of MAINPACKET::header isn't
> ignored.
> 
> Note also that the program will not work as intended, because (as soon
> as gcc is fixed) all the packedness is ignored. So I clone this bug.

Thanks for the confirmation.  Personally I think packed structures are a
horrible idea.  Presumably if all the classes involved are changed to be
POD, they'll become packed again?  (In practice I don't think it makes a
difference, as the class members appear to be naturally aligned without
any need for padding bytes.)

Ben.

-- 
Ben Hutchings
One of the nice things about standards is that there are so many of them.

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to