/****************************************************************************
* Copyright (C) 1998 WIDE Project. All rights reserved.
* Copyright (C) 1999,2000,2001,2002 University of Tromso. All rights reserved.
* Copyright (C) 2002 Invenia Innovation AS. All rights reserved.
*
* Author: Feike W. Dillema, feico@pasta.cs.uit.no.
* based on newbie code by Yusuke DOI, Keio Univ. Murai Lab.
****************************************************************************/
#define CVSID(string) \
static const char cvsid[] __attribute__((__unused__)) = string
/*
macro MAXNUM(x,y);
return maximum number of x and y.
*/
#define MAXNUM(x,y) (((x)>(y)) ? (x) : (y))
/*
* Inline versions of get/put short/long;
* they are copied from BIND destribution
*
* Pointer is advanced; we assume that both arguments
* are lvalues and will already be in registers.
* cp MUST be u_char *.
*/
#define GETSHORT(us, ucp) { \
(us) = *(ucp)++ << 8; \
(us) |= *(ucp)++; \
}
#define GETLONG(ul, ucp) { \
(ul) = *(ucp)++ << 8; \
(ul) |= *(ucp)++; (ul) <<= 8; \
(ul) |= *(ucp)++; (ul) <<= 8; \
(ul) |= *(ucp)++; \
}
#define PUTSHORT(us, ucp) { \
*(ucp)++ = (us) >> 8; \
*(ucp)++ = (us); \
}
/*
* Warning: PUTLONG destroys its first argument.
*/
#define PUTLONG(ul, ucp) { \
(ucp)[3] = ul; \
(ucp)[2] = (ul >>= 8); \
(ucp)[1] = (ul >>= 8); \
(ucp)[0] = ul >> 8; \
(ucp) += sizeof(uint32_t); \
}
/*
* get size of sockaddr structure
*/
#ifdef HAVE_SA_LEN_FIELD
#define SOCKADDR_SIZEOF(sa) (MAXNUM((sa).sa_len, sizeof(sa)))
#else
#ifdef SA_LEN
#define SOCKADDR_SIZEOF(sa) SA_LEN(&(sa))
#else
/* Use ugly hack from USAGI project */
#define SOCKADDR_SIZEOF(sa) (((sa).sa_family == AF_INET6) \
? sizeof(struct sockaddr_in6) \
: (((sa).sa_family == AF_INET) \
? sizeof(struct sockaddr_in) \
: sizeof(struct sockaddr)))
#endif
#endif
#ifdef USE_INET6
#define V6(x) x
#else
#define V6(x)
#endif
#ifdef USE_INET4
#define V4(x) x
#else
#define V4(x)
#endif
syntax highlighted by Code2HTML, v. 0.9.1