gcc 4.4 fix: union instead of cast

gcc 4.4 has more strict rules for aliasing. It doesn't like a 
struct sockaddr_in pointer pointing to a struct sockaddr. So we make it
a union.


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@217445 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Tzafrir Cohen 2009-09-09 18:52:48 +00:00
parent 2ee2947a55
commit 1ed1eb277e
1 changed files with 7 additions and 4 deletions

View File

@ -487,17 +487,20 @@ static int phoneprov_callback(struct ast_tcptls_session_instance *ser, const str
/* Unless we are overridden by serveriface or serveraddr, we set the SERVER variable to
* the IP address we are listening on that the phone contacted for this config file */
if (ast_strlen_zero(global_server)) {
struct sockaddr name;
socklen_t namelen = sizeof(name);
union {
struct sockaddr sa;
struct sockaddr_in sa_in;
} name;
socklen_t namelen = sizeof(name.sa);
int res;
if ((res = getsockname(ser->fd, &name, &namelen))) {
if ((res = getsockname(ser->fd, &name.sa, &namelen))) {
ast_log(LOG_WARNING, "Could not get server IP, breakage likely.\n");
} else {
struct ast_var_t *var;
struct extension *exten_iter;
if ((var = ast_var_assign("SERVER", ast_inet_ntoa(((struct sockaddr_in *)&name)->sin_addr)))) {
if ((var = ast_var_assign("SERVER", ast_inet_ntoa(name.sa_in.sin_addr)))) {
AST_LIST_TRAVERSE(&route->user->extensions, exten_iter, entry) {
AST_LIST_INSERT_TAIL(exten_iter->headp, var, entries);
}