From: Tzafrir Cohen Date: Wed, 9 Sep 2009 20:30:29 +0000 (+0000) Subject: gcc 4.4 fix: union instead of cast X-Git-Tag: 1.6.1.7-rc1~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7cce857d3cec53f331e6ce649afd229adeef1373;p=thirdparty%2Fasterisk.git 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. Merged revisions 217445 via svnmerge from http://svn.digium.com/svn/asterisk/trunk git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.1@217518 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/res/res_phoneprov.c b/res/res_phoneprov.c index db87fccbad..218cfc1b9f 100644 --- a/res/res_phoneprov.c +++ b/res/res_phoneprov.c @@ -494,17 +494,20 @@ static struct ast_str *phoneprov_callback(struct ast_tcptls_session_instance *se /* 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); }