mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-17 07:18:15 +00:00
Merged revisions 292188 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r292188 | russell | 2010-10-18 14:50:04 -0500 (Mon, 18 Oct 2010) | 9 lines Resolve some compiler errors in ast_sockaddr_is_any(). These errors came up once this function was used from within netsock2.c. The errors were like the following: netsock2.c:393: error: dereferencing pointer ‘({anonymous})’ does break strict-aliasing rules The usage of a union here avoids this problem. ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@292189 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -389,11 +389,16 @@ int ast_sockaddr_is_ipv6(const struct ast_sockaddr *addr)
|
||||
|
||||
int ast_sockaddr_is_any(const struct ast_sockaddr *addr)
|
||||
{
|
||||
return (ast_sockaddr_is_ipv4(addr) &&
|
||||
((const struct sockaddr_in *)&addr->ss)->sin_addr.s_addr ==
|
||||
INADDR_ANY) ||
|
||||
(ast_sockaddr_is_ipv6(addr) &&
|
||||
IN6_IS_ADDR_UNSPECIFIED(&((const struct sockaddr_in6 *)&addr->ss)->sin6_addr));
|
||||
union {
|
||||
struct sockaddr_storage ss;
|
||||
struct sockaddr_in sin;
|
||||
struct sockaddr_in6 sin6;
|
||||
} tmp_addr = {
|
||||
.ss = addr->ss,
|
||||
};
|
||||
|
||||
return (ast_sockaddr_is_ipv4(addr) && (tmp_addr.sin.sin_addr.s_addr == INADDR_ANY)) ||
|
||||
(ast_sockaddr_is_ipv6(addr) && IN6_IS_ADDR_UNSPECIFIED(&tmp_addr.sin6.sin6_addr));
|
||||
}
|
||||
|
||||
int ast_sockaddr_hash(const struct ast_sockaddr *addr)
|
||||
|
||||
Reference in New Issue
Block a user