[PATCH 2/7] dpwsockx: Implementation of SPInit

Henri Verbeet hverbeet at gmail.com
Fri Sep 4 05:12:01 CDT 2009


2009/9/4 Ismael Barros² <razielmine at gmail.com>:
> I've been looking into iphlpapi/ip.h (just learned bit fields
> exist...); would this implementation be fine?
>
> #include "pshpack1.h"
>
> typedef struct tagDPSP_MSG_HEADER
> {
> #ifdef WORDS_BIGENDIAN
>    DWORD size:20;
>    DWORD token:12;
> #else
>    DWORD token:12;
>    DWORD size:20;
> #endif
>    SOCKADDR_IN SockAddr;
> } DPSP_MSG_HEADER, *LPDPSP_MSG_HEADER;

Probably not. I'm not sure iphlpapi/ip.h does things right in the
first place, it seems to confuse bitfield ordering with machine byte
ordering. As a general rule, I think it's best to avoid bitfields for
things like writing data to a file or sending data over the network,
it's just a pain. Aside from that, using the bitfields in this way
messes with the bit ordering, but doesn't change the byte order. For
the bitfields in iphlpapi/ip.h that's not an issue because they fit in
a single byte. Just store the data in a DWORD with the appropriate
masks and shifts, and byte swap that DWORD when reading/writing it.



More information about the wine-devel mailing list