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:
parent
8325120565
commit
b5d9e56cfb
|
@ -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))
|
||||
|
|
Loading…
Reference in New Issue