mssip.h trouble
Patrik Stridvall
ps at leissner.se
Tue Sep 10 12:53:46 CDT 2002
> Patrik Stridvall <ps at leissner.se> writes:
>
> > I'm totally at loss as to what to do. Not that it currently
> matters since
> > the data structures isn't currently used but someday
> somebody will...
>
> Well, we need to add explicit padding in the structures to respect the
> alignment that MSVC uses. That should only be required at the end of
> the structures I think, so it's not too bad.
Unfortunately its a little more complicated than that,
it effects the internal offset of fields as well in
some case.
In the normal case below it doesn't matter whether n is 4 or 8.
#pragma pack(n)
typedef struct {
char x;
long y; /* offset is 4 both for n = 4 and n = 8 */
} long_n;
#pragma pack()
However is the case below is does matter whether n is 4 or 8:
#ifdef _MSC_VER
typedef __int64 longlong_t;
#else
typedef long long longlong_t;
#endif
#pragma pack(n)
typedef struct {
char x;
longlong_t y; /* offset is 4 if n = 4, but is 8 if n = 8 */
} longlong_n;
#pragma pack()
In short, if the size of a field is larger than 4 it matters internally
whether alignment is 4 or 8.
Now in the case of mssip.h, I can't see any fields that have sizes larger
than 4 so we could easily handle that special case as you suggested.
However in general we can not...
More information about the wine-devel
mailing list