diff options
author | tzafrir <tzafrir@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-09-09 18:52:48 +0000 |
---|---|---|
committer | tzafrir <tzafrir@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-09-09 18:52:48 +0000 |
commit | e8c418029fdbf878e73af16a02b4854a2480f982 (patch) | |
tree | 1a8f9b15044f0e86185b7379b679301311aac95a /res | |
parent | 29bf63b15a53fee1972485b57f5860208056ffc4 (diff) |
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: http://svn.digium.com/svn/asterisk/trunk@217445 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res')
-rw-r--r-- | res/res_phoneprov.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/res/res_phoneprov.c b/res/res_phoneprov.c index 62c13c33c..a8ebe67a0 100644 --- a/res/res_phoneprov.c +++ b/res/res_phoneprov.c @@ -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); } |