From b5f42a5083618dbc37c2374fc6ec85befa952d4c Mon Sep 17 00:00:00 2001 From: Stefan Sayer Date: Wed, 9 Apr 2008 13:36:55 +0000 Subject: [PATCH] fixing sa_len to compile again on non-ipv6 and non-macosx git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@855 8eb893ce-cfd4-0310-b710-fb5ebe64c474 --- core/AmUtils.h | 14 ++++++++++++++ core/sems.cpp | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/core/AmUtils.h b/core/AmUtils.h index 46e5c5e7..66d79df7 100644 --- a/core/AmUtils.h +++ b/core/AmUtils.h @@ -286,6 +286,20 @@ std::vector explode(string s, string e); /** add a directory to an environement variable */ void add_env_path(const char* name, const string& path); +#ifdef SUPPORT_IPV6 +#ifdef SIN6_LEN +#define SOCKADDR_LEN(soc_address) ((struct sockaddr *)&soc_address)->sa_len +#else +#ifndef SA_LEN +#define SA_LEN(x) (((x)->sa_family == AF_INET6)?sizeof(struct sockaddr_in6): \ + (((x)->sa_family == AF_INET)?sizeof(struct sockaddr_in):sizeof(struct sockaddr))) +#endif +#define SOCKADDR_LEN(soc_address) SA_LEN((struct sockaddr *)&soc_address) +#endif /* SIN6_LEN */ +#else +#define SOCKADDR_LEN(soc_address) sizeof(soc_address) +#endif /* SUPPORT_IPV6 */ + #endif // Local Variables: diff --git a/core/sems.cpp b/core/sems.cpp index ff51c60b..0e80c34c 100644 --- a/core/sems.cpp +++ b/core/sems.cpp @@ -455,7 +455,7 @@ static void getInterfaceList(int sd, std::vector >& if_ inet_ntoa(sa->sin_addr))); } - p_ifr = (struct ifreq*)(((char*)p_ifr) + IFNAMSIZ + p_ifr->ifr_addr.sa_len); + p_ifr = (struct ifreq*)(((char*)p_ifr) + IFNAMSIZ + SOCKADDR_LEN(p_ifr->ifr_addr)); } }