Mail Archives: djgpp/1996/07/09/10:10:39
From: locke AT mcs DOT net (Peter Johnson)
Date: Tue, 09 Jul 1996 05:29:13 GMT
On Sun, 07 Jul 1996 19:27:32 GMT, alaric AT abwillms DOT demon DOT co DOT uk (Alaric
B. Williams) wrote:
>
>It seems to be a structure packing problem... the ff.c in djtst claims
>that the offset of ff_name is 30; but the SAME test in my code returns
>32. Why is the packing changing? I compile both sources with the same
>command line!
>
Peter Johnson continues:
Output of compiled ff.c:
sizeof(ff) = 290
ff.ff_attrib = 21
ff.ff_ftime = 22
ff.ff_fdate = 24
ff.ff_fsize = 26
ff.ff_name = 30
(null): error
Output of compiled ff.cc (identical to ff.c):
sizeof(ff) = 292
ff.ff_attrib = 21
ff.ff_ftime = 22
ff.ff_fdate = 24
ff.ff_fsize = 28
ff.ff_name = 32
(null): error
For some reason, ff_fdate is not packed as a SHORT!! instead it is
packed on a 4-byte margin...... HMMM!
DJ, Charles - Any ideas why packing would differ C/C++??
This is a known bug in GCC handling structure packing in C++. I believe that
DJ and others have reported it to the FSF and it should be fixed in later
versions. For now you can add #pragma pack or the __attribute__((packed))
storage attribute to your C++ structures (see the DJGPP docs, GNU C/C++ Manual,
or prior threads for the exact usage as I have not had occasion to use these).
Also the faq (section 22.9) points to:
http://www.delorie.com/gnu/docs/gcc/gcc_83.html#SEC86
--
Art S. Kagel, kagel AT quasar DOT bloomberg DOT com
A proverb is no proverb to you 'till life has illustrated it. -- John Keats
- Raw text -