Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: mDNSResponder build failure on 64-bit platform (amd64)



On Oct 2,  3:59pm, martin%duskware.de@localhost (Martin Husemann) wrote:
-- Subject: Re: mDNSResponder build failure on 64-bit platform (amd64)

| On Fri, Oct 02, 2009 at 09:55:50AM -0400, Christos Zoulas wrote:
| > The code is written so that if the structure is not the right size,
| > the array size ends negative.
| 
| Yes, but why would the size of the structure differ if unpacked?
| 
| typedef packedstruct
|     {
|     uint32_t version;
|     uint32_t datalen;
|     uint32_t ipc_flags;
|     uint32_t op;                // request_op_t or reply_op_t
|     client_context_t client_context; // context passed from client, returned 
by$
|     uint32_t reg_index;            // identifier for a record registered via 
DN$
|     // socket connected by DNSServiceConnect().  Must be unique in the scope 
of$
|     // index/socket pair uniquely identifies a record.  (Used to select 
records$
|     } ipc_msg_hdr;
| 
| where 
| typedef packedunion
|     {
|     void *context;
|     uint32_t u32[2];
|     } client_context_t;
| 
| 
| I.e. the structure should be naturally aligned. What am I missing?

uint32_t reg_index; Since the struct needs to be 64 bit aligned it is expanded
by another uint32_t so that arrays of the struct work. Anyway, I taught lint
about __packed... So if you change the code to use __packed, and don't define
that away in the lint case in cdefs, it should just work.

christos


Home | Main Index | Thread Index | Old Index