lwip-users
[Top][All Lists]
Advanced

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

Re: [lwip-users] Problem With dns.c Using 32-Bit Compilers


From: Alain M.
Subject: Re: [lwip-users] Problem With dns.c Using 32-Bit Compilers
Date: Fri, 29 Aug 2008 13:37:08 -0300
User-agent: Thunderbird 2.0.0.6 (X11/20070728)


Bill Auerbach escreveu:
What about macros to make it portable and universal?

Then we can make macros to be that and optimyzed. There could be a file of such macros for a few architectures. Let me try an example por ARM which is intereting because it is 32 bit and does not have byte access:

struct dns_answer {
   /* DNS answer record starts with either a domain name or a pointer
      to a name already present somewhere in the packet. */
   u16_t type;
   u16_t class;
   u32_t ttl;
   u16_t len;
 } PACK_STRUCT_STRUCT;

// Create a buffer allways alligned
#define DNS_ANSWER_BUFF(buf) u32_d buf[3]

// Move from buffer to struct
#define DNS_ANSWER_FROM_BUF(buf,str)  \
  {                                   \
    long t=buf[0];                    \
    str.type  = t & 0xffff;           \
    str.class = t >>16;               \
    str.ttl   = buf[1];               \
    str.len   = buf[2] & 0xffff;      \
  }

// move from struct to buff
#define DNS_ANSWER_TO_BUFF(buf,str)   \
  {                                   \
    buf[0]=str.class<<16 | str.type;  \
    buf[1]=str.ttl;                   \
    buf[2]=str.len;                   \
  }

There are only a finite number of such macros... and maybe a serie for 8, 16 and 32 bits will do :)

Alain




reply via email to

[Prev in Thread] Current Thread [Next in Thread]