Fix SET_SS_LEN so that it also works correctly outside libratbox.

Use RB_SOCKADDR_HAS_SA_LEN instead of SOCKADDR_IN_HAS_LEN
which is only defined inside libratbox.
This fixes creating own sockaddr structs in other programs
using SET_SS_LEN, then passing them to libratbox, on
4.4BSD based systems.
This commit is contained in:
Jilles Tjoelker 2008-04-05 21:08:48 +02:00
parent 8325120565
commit b5d9e56cfb
1 changed files with 3 additions and 3 deletions

View File

@ -143,20 +143,20 @@ unsigned int geteuid(void);
#define lrb_assert(expr) assert(expr)
#endif
#ifdef SOCKADDR_IN_HAS_LEN
#ifdef RB_SOCKADDR_HAS_SA_LEN
#define ss_len sa_len
#endif
#define GET_SS_FAMILY(x) (((struct sockaddr *)(x))->sa_family)
#ifdef SOCKADDR_IN_HAS_LEN
#ifdef RB_SOCKADDR_HAS_SA_LEN
#define SET_SS_LEN(x, y) do { \
struct sockaddr *storage; \
storage = ((struct sockaddr *)(x));\
storage->sa_len = (y); \
} while (0)
#define GET_SS_LEN(x) (((struct sockaddr *)(x))->sa_len)
#else /* !SOCKADDR_IN_HAS_LEN */
#else /* !RB_SOCKADDR_HAS_SA_LEN */
#define SET_SS_LEN(x, y) (((struct sockaddr *)(x))->sa_family = ((struct sockaddr *)(x))->sa_family)
#ifdef RB_IPV6
#define GET_SS_LEN(x) (((struct sockaddr *)(x))->sa_family == AF_INET ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6))