diff src/http/ngx_http_core_module.c @ 3395:4e15548b29d4

fix building by gcc 4.4 with -O2/3/s: dereferencing pointer 'sin' does break strict-aliasing rules
author Igor Sysoev <igor@sysoev.ru>
date Tue, 22 Dec 2009 15:15:45 +0000
parents 8854f4eb2839
children 9e7926763f87
line wrap: on
line diff
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -2850,7 +2850,7 @@ ngx_http_core_merge_srv_conf(ngx_conf_t 
     if (!conf->listen) {
         ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t));
 
-        sin = (struct sockaddr_in *) &lsopt.sockaddr;
+        sin = &lsopt.u.sockaddr_in;
 
         sin->sin_family = AF_INET;
 #if (NGX_WIN32)
@@ -2867,7 +2867,7 @@ ngx_http_core_merge_srv_conf(ngx_conf_t 
         lsopt.sndbuf = -1;
         lsopt.wildcard = 1;
 
-        (void) ngx_sock_ntop((struct sockaddr *) &lsopt.sockaddr, lsopt.addr,
+        (void) ngx_sock_ntop(&lsopt.u.sockaddr, lsopt.addr,
                              NGX_SOCKADDR_STRLEN, 1);
 
         if (ngx_http_add_listen(cf, conf, &lsopt) == NGX_OK) {
@@ -3275,7 +3275,7 @@ ngx_http_core_listen(ngx_conf_t *cf, ngx
 
     ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t));
 
-    ngx_memcpy(lsopt.sockaddr, u.sockaddr, u.socklen);
+    ngx_memcpy(&lsopt.u.sockaddr, u.sockaddr, u.socklen);
 
     lsopt.socklen = u.socklen;
     lsopt.backlog = NGX_LISTEN_BACKLOG;
@@ -3283,7 +3283,7 @@ ngx_http_core_listen(ngx_conf_t *cf, ngx
     lsopt.sndbuf = -1;
     lsopt.wildcard = u.wildcard;
 
-    (void) ngx_sock_ntop((struct sockaddr *) &lsopt.sockaddr, lsopt.addr,
+    (void) ngx_sock_ntop(&lsopt.u.sockaddr, lsopt.addr,
                          NGX_SOCKADDR_STRLEN, 1);
 
     for (n = 2; n < cf->args->nelts; n++) {
@@ -3380,7 +3380,7 @@ ngx_http_core_listen(ngx_conf_t *cf, ngx
 #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
             struct sockaddr  *sa;
 
-            sa = (struct sockaddr *) lsopt.sockaddr;
+            sa = &lsopt.u.sockaddr;
 
             if (sa->sa_family == AF_INET6) {